如何解决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')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。