sklearn随机森林plot_tree可视化结果释义咨询
糖尿病预测随机森林决策树可视化问题解答
基于公开diabetes.csv数据集构建糖尿病预测分类模型的实现代码如下:
from matplotlib import pyplot as plt import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier diab_cols = ['Pregnancies', 'Insulin', 'BMI', 'Age','Glucose','BloodPressure','DiabetesPedigreeFunction'] X = df[diab_cols]# Features y = df.Outcome # Target variable X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0) model = RandomForestClassifier(n_estimators=100,max_depth=5).fit(X_train,y_train) plt.figure(figsize=(20,20)) _ = tree.plot_tree(model.estimators_[0], feature_names=X.columns, filled=True)
运行代码后得到随机森林中第0棵基决策树的可视化结果:
针对图中相关标注的三个问题解答如下:
1. 节点标注的Gini具体含义
Gini即基尼不纯度,是CART决策树做分支划分时用来衡量节点样本混杂度的核心指标,二分类场景下取值范围为0-0.5:
- Gini=0时,当前节点所有样本属于同一类别,节点纯度最高,无需继续划分
- Gini越接近0.5,当前节点下患病、不患病两类样本占比越接近,样本混杂度越高
- 决策树每次分支的核心逻辑,就是找到能让分支后子节点Gini值下降最多的特征和切分阈值,尽可能提升子节点的样本纯度。
2. 节点中Glucose对应的[66,72]取值的意义
这组数字是当前节点包含的两类样本的计数,统计顺序固定为[负类样本数, 正类样本数]:
- 本数据集中
Outcome字段取值0代表未患糖尿病(负类),1代表患有糖尿病(正类) - 对应[66,72]的含义是:落在该节点的所有样本中,有66例为未患病样本,72例为患病样本
- 节点的预测规则很直接:哪类样本在节点中占比更高,就把所有落入该节点的样本预测为对应类别,该节点显然会将样本判定为患病。
3. 蓝色、白色、粉色三类填充颜色的区别
填充色是tree.plot_tree设置filled=True后,根据节点的预测类别、纯度自动生成的标识:
- 蓝色填充:代表当前节点预测结果为患病(正类),蓝色越深,节点Gini值越低、患病样本占比越高,预测置信度越高
- 粉色填充:代表当前节点预测结果为未患病(负类),粉色越深,节点Gini值越低、未患病样本占比越高,预测置信度越高
- 白色填充:代表当前节点下两类样本占比基本持平,Gini值接近0.5,没有明确的类别倾向,节点纯度最低。
内容的提问来源于stack exchange,提问作者rafine
相关产品推荐
相关产品推荐

