python - 如何获得 lightgbm 模型特征的方差解释?
问题描述
我使用 lightgbm 来获得特征重要性。但是,输出是某个度量的绘图分数。我的问题是:
- x 轴上的度量是什么?这是F分数还是其他?
- 我怎样才能得到特征的输出,它向我展示了每个特征对模型方差的影响(类似于 PCA)?
- 如何提取数据框格式中所有重要特征的指标?
这是我的代码:
import lightgbm as lgb
import matplotlib.pyplot as plt
lgb_params = {
'boosting_type': 'gbdt',
'objective': 'binary',
'num_leaves': 30,
'num_round': 360,
'max_depth':8,
'learning_rate': 0.01,
'feature_fraction': 0.5,
'bagging_fraction': 0.8,
'bagging_freq': 12
}
lgb_train = lgb.Dataset(X, y)
model = lgb.train(lgb_params, lgb_train)
plt.figure(figsize=(12,6))
lgb.plot_importance(model, max_num_features=30)
plt.title("Feature importances")
plt.show()
解决方案
1)在您的情况下,x 轴上的度量是使用“拆分”类型(默认情况下)获得的特征重要性。正如您在lgm doc中看到的那样:重要性可以使用“拆分”或“增益”方法计算。如果“拆分”,则结果包含该特征在模型中使用的次数。如果为“增益”,则结果包含使用该特征的分割的总增益。
第一个度量是基于拆分的,它不考虑样本数量。第二个措施是基于增益的。与 scikit-learn 中的方法基本相同,只是将 Gini 杂质替换为梯度提升模型使用的目标
这些度量纯粹是使用训练数据计算的,因此拆分可能不会对测试集中的目标产生任何改进
2)与 sklearn pca 最相似explained_variance_ratio_
的度量(不是在含义上,而是在它可以使用的方式上)正是feature_importances
基于树的方法。如果你更有信心,你可以像 sklearn 随机森林那样以 % 来缩放这个数字,其中特征重要性总和为 1。你可以这样做model.feature_importances_/model.feature_importances_.sum()
。否则,还有其他类似的方法,例如排列重要性
3)将您可以执行的所有重要性存储在 df 中:pd.DataFrame({'name':model.feature_name_,'importance':model.feature_importances_})
推荐阅读
- excel - VBA用户定义范围并检查它是否为空
- google-cloud-data-fusion - 当项目位于组织下时,无法向数据融合服务帐户授予权限
- java - Android Firestore 将限制设置为每位用户 1 票
- javascript - 是否可以使用 ReactJS 在组件内部传递 reactbootstrap 表的 onClick 函数
- sql - 来自不同长度变量的 Exec sql 的 SQLRPGLE 语法?
- html - 当元素存在于不同的父元素中时,我们可以重新排序元素吗?
- reactjs - 如何摆脱由 set State 创建的避免无限循环?
- c - 用 C 编写大量文件后 Ubuntu 冻结
- javascript - 如何使用 Jest 在内部使用异步调用和调度测试动作减速器?
- javascript - 特定主导航链接的导航子菜单未正确显示