lightgbm.create_tree_digraph仅显示单个特征 如何实现全部特征的树可视化
问题根因
- 训练参数限制:你设置的
feature_fraction=0.1代表每棵树训练时仅随机抽取10%的特征用于节点分裂,你总共只有12个训练特征,计算下来单棵树最多用到2个特征,所以单棵树可视化时仅出现Purpose_Of_Loan一个特征属于正常情况。 - 可视化默认逻辑限制:
lightgbm.create_tree_digraph默认仅渲染第一棵树(tree_index=0),单棵树的分裂节点数量有限,本身就不可能覆盖全部12个训练特征。
解决方法
- 调整训练参数(如需单棵树覆盖更多特征)
将feature_fraction参数调整为0.8~1,提升单棵树可使用的特征比例,调整后重新训练模型,单棵树可视化时会出现更多特征。参数修改示例:
clf = LGBMClassifier(nthread=4, n_estimators=100, learning_rate=0.05, bagging_fraction= 1, feature_fraction= 0.8, # 原参数为0.1 lambda_l1= 5, lambda_l2= 0, max_depth= 5, min_child_weight= 5, min_split_gain= 0.001, is_unbalance = True, num_leaves= 36)
注意:feature_fraction参数调整会影响模型的泛化能力和训练效果,修改后需要重新验证模型指标是否符合预期。
- 查看多棵树的结构
不需要调整训练参数的前提下,可以通过指定tree_index参数查看不同树的结构,遍历所有树即可看到全部特征的使用情况。示例代码如下(查看第6棵树):
viz = lightgbm.create_tree_digraph(clf.booster_, tree_index=5) viz
- 输出特征重要性验证特征参与情况
如果仅需确认所有12个特征都参与了模型训练,无需查看树结构,直接输出特征重要性即可:
import pandas as pd feature_imp = pd.DataFrame({ "特征名": clf.feature_name_, "重要性得分": clf.feature_importances_ }).sort_values(by="重要性得分", ascending=False) print(feature_imp)
如果输出结果包含全部12个特征,说明所有特征都正常参与模型训练,仅单棵树未用到其余特征,无需额外调整。
内容的提问来源于stack exchange,提问作者Kevin M
相关产品推荐
相关产品推荐

