如何在 sklearn 中将 'gain' 设置为 LightGBM 分类器feature_importances_的特征重要性度量:: LGBMClassifier()



我正在使用LightGBM中的LGBMClassifer构建一个二元分类器模型,如下所示:

# 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会让我更好地了解特征的重要性。

  • LightGBM booster class 的 Python API 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 APIfor LightGBMLGBMClassifier()没有提到任何Sklearn APILGBM,它只有这个函数的这个参数:

feature_importances_
array of shape = [n_features] – The feature importances (the higher, the more important the feature).
  • 我的问题是我如何从sklearn版本中获取功能重要性,即LGBMClassifier()基于gain
feature_importance()

是原始LGBM中Booster对象的一种方法。

sklearn API 通过 API 文档中给出的属性booster_在训练数据上公开底层助推器。

因此,您可以先访问此助推器对象,然后以与原始 LGBM 相同的方式调用feature_importance()

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

相关内容

  • 没有找到相关文章

最新更新