- bounty还有7天到期**。回答此问题可获得+50声望奖励。Edo Wexler正在寻找来自可靠来源的**答案 *:尚未提出合适的解决方案。
我已经使用二进制分类目标变量训练了RF模型。由于我的数据不平衡,我使用class_weight='balanced'
(我看到这可能是原因,无法找到解决这个问题的方法)。当从模型中绘制一棵树时,我得到以下输出:
验证码:
import graphviz
from sklearn import tree
import os
# Assuming your Random Forest model is named 'model'
trees = model.estimators_
# Plot the first tree
dot_data = tree.export_graphviz(trees[0], out_file=None, filled=True, rounded=True, special_characters=True) #), feature_names=X_rf.columns)
graph = graphviz.Source(dot_data)
graph
当我在模型训练中没有使用class_weight='balanced'
时,我得到了预期的行为。
我希望在value属性中看到每个节点的整数值,如value = [124, 2145]
。
编辑
我已经尝试添加了proportion = True,正如评论中所建议的那样(我在Github问题的参考中找到了答案)。
它只是将值从count改为proportion。这并不能解决问题。
看起来只有将值乘以反权重才能解决这个问题,但我找不到一个实现(提醒-问题只在于可视化结果,而不是模型的性能)。
1条答案
按热度按时间laik7k3q1#
从
plot_tree
的文档中:所示的样本计数用可能存在的任何sample_weights加权。
也就是说,这些数字是每个类别的样本的总权重。由于权重是类权重,因此只需除以相应的类权重即可恢复样本计数。