lenalg.feature_importances_与len输入变量不符

问题描述

如果我要问我的LightGBM模型的功能重要性得分,则最终得到的字符串要长于输入变量(预测变量)的数量

 len(alg.feature_importances_) = 50
 len(predictors) = 46

我使用的预测设置如下:

    alg = lgb.LGBMClassifier(boosting_type = 'gbdt',colsample_bytree = 0.75,importance_type = 'split',learning_rate = 0.1,max_depth = 7,n_estimators = 500,num_leaves = 10,reg_lambda= 0.01,min_child_samples=25) 

alg.fit(train[predictors],train[target])
alg.predict(test[predictors])
alg.proba(test[predictors])

然后获得的功能重要性如下:alg.feature_importances_

array([83,88,14,10,17,13,0])

输入变量(预测变量)如下:print(predictors)

['Prob1','Prob2','Comeback1','Comeback2','compare srp_1','compare srp_2','meang-W5_1','meang-W5_2','ratings-W100_1','ratings-W100_2','meang-W100_1','meang-W100_2','meangr-W5_1','meangr-W5_2','meangr-W100_1','meangr-W100_2','meangs-W5_1','meangs-W5_2','meangs-W100_1','meangs-W100_2','meanp-W20_1','meanp-W20_2','meanp-W1000_1','meanp-W1000_2','meanrp-W20_1','meanrp-W20_2','meanrp-W1000_1','meanrp-W1000_2','meansp-W20_1','meansp-W20_2','meansp-W1000_1','meansp-W1000_2','meanrp + meansp-W20_1','meanrp + meansp-W20_2','meanrp + meansp-W100_1','meanrp + meansp-W100_2','scoregames_1','scoregames_2','setsscore_1','setsscore_2','ratings_1','ratings_2','momentum_1','momentum_2']

对我来说这是一个问题,因为我不知道哪个功能得分属于哪个变量。看起来某些功能/变量会产生多个功能得分。

解决方法

feature_importance仅返回一个numpy数组,因此缺少标签并不表示该模型没有特征名称,而是正常行为。

我通常会绘制功能重要性,并在其中显示标签。从代码中,我可以得出实际需要完成的工作。是:

importance = booster.feature_importance(importance_type='gain') # or 'split'
feature_name = booster.feature_name()
list(zip(feature_name,importance))

如果您使用sklearn api且没有助推器的手柄,您将得到如下所示(如果alg是您训练的sklearn包装器对象):

booster= alg.booster_

如果您想直接绘制重要性,可以按照以下步骤进行操作:

lightgbm.plot_importance(booster,importance_type='gain')