Как установить «усиление» в качестве показателя важности объекта в feature_importances_ для классификатора LightGBM в sklearn :: LGBMClassifier () - PullRequest
0 голосов
/ 27 июня 2018

Я строю модель двоичного классификатора с использованием LGBMClassifer в LightGBM, как показано ниже:

 # LightGBM model
        clf = LGBMClassifier(
            nthread=4,
            n_estimators=10000,
            learning_rate=0.005,
            num_leaves= 45,
            colsample_bytree= 0.8,
            subsample= 0.4,
            subsample_freq=1,
            max_depth= 20,
            reg_alpha= 0.5,
            reg_lambda=0.5,
            min_split_gain=0.04,
            min_child_weight=.05
            random_state=0,
            silent=-1,
            verbose=-1)

Далее, Подгонка моей модели по тренировочным данным

     clf.fit(train_x, train_y, eval_set=[(train_x, train_y), (valid_x, valid_y)], 
                eval_metric= 'auc', verbose= 100, early_stopping_rounds= 200)

    fold_importance_df = pd.DataFrame()
    fold_importance_df["feature"] = feats   
    fold_importance_df["importance"] = clf.feature_importances_

Выход:

feature                      importance
feature13                     1108
feature21                     1104
feature11                     774
  • Пока все хорошо, сейчас я смотрю на показатель важности функций, основанный на этой модели. Итак, я использую функцию feature_importance_(), чтобы получить это (но по умолчанию она дает мне важность функции на основе split)

  • Хотя split дает мне представление о том, какая функция используется сколько раз в разбиениях, но я думаю, что gain даст мне лучшее понимание важности функций.

  • Python API бустерного класса LightGBM https://lightgbm.readthedocs.io/en/latest/Python-API.html?highlight=importance упоминает:

     feature_importance(importance_type='split', iteration=-1)
    
    
     Parameters:importance_type (string, optional (default="split")) – 
     If “split”, result contains numbers 
     of times the feature is used in a model. If “gain”, result contains 
     total gains of splits which use the feature.
     Returns:   result – Array with feature importances.
     Return type:   numpy array`
    

Принимая во внимание, что Sklearn API для LightGBM LGBMClassifier() ничего не упоминает Sklearn API LGBM , он имеет только этот параметр для этой функции:

feature_importances_
array of shape = [n_features] – The feature importances (the higher, the more important the feature).
  • У меня вопрос, как я могу получить важность функции от sklearn версии, т.е. LGBMClassifier() на основе gain?

1 Ответ

0 голосов
/ 03 июля 2018

feature_importance() - метод объекта Booster в исходной LGBM.

Sklearn API предоставляет базовый Booster для обученных данных через атрибут booster_, как указано в Документах API .

Таким образом, вы можете сначала получить доступ к этому объекту-бустеру, а затем вызвать feature_importance() точно так же, как вы делали бы это с исходной LGBM.

clf.booster_.feature_importance(importance_type='gain')
...