Я строю модель двоичного классификатора с использованием 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
?