决策树基本介绍
📅 2026/7/31 4:43:37
👁️ 阅读次数
📝 编程学习
一、 介绍
1、概念:决策树通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数据进行分类预测,属于有监督学习。
2、核心:所有数据从根节点一步一步落到叶子节点。
二、结点
1、根结点:第一个结点
2、非叶子结点:中间结点
3、叶子结点:最终结点
三、分类标准
1、ID3算法:
(1)、衡量标准:
熵值:表示随机变量不确定性的度量,或者说是物体内
部的混乱程度。
(2)、熵值计算公式:
(3)、举例:
A集合:[1, 1, 1, 1, 1, 1,1,1,2,2]
B集合:[0,1,2,3,4, 5,6,7,8,9]
A集合熵值:-2/10log2(2/10)-8/10log2(8/10)=0.722
B集合熵值:-1/10*log2(1/10)*10=3.322
2、C4.5算法:
(1)、衡量标准:
信息增益率
3、CART算法:
(1)、衡量标准:
基尼系数
三、剪枝
1、为什么要剪枝
防止过拟合:例如有1000条数据,构建出来的树有1000条路径,也就是每
个样本数据,就构建一条路径。此时会存在过拟合,当预测新的数据
时,如果不在树的路径中,将无法判断出结果
2、如何剪枝
(1)、预剪枝
a.限制树的深度
b.限制叶子节点的个数以及叶子节点的样本数
c.基尼系数
(2)、后剪枝
先让决策树完整生长,再从底部开始删除不必要的分支。
四、代码实现
题目:天气预测是否打球
数据:
实现过程
1、导入库
importpandasaspdfromsklearn.treeimportDecisionTreeClassifierfromsklearn.preprocessingimportLabelEncoderfromsklearn.treeimportplot_treeimportmatplotlib.pyplotasplt2、创建数据
data=pd.DataFrame({"天气":["晴朗","晴朗","阴天","雨天","雨天","雨天","阴天","晴朗","晴朗","雨天"],"温度":["高","高","高","中","低","低","低","中","低","中"],"湿度":["高","高","高","高","正常","正常","正常","高","正常","正常"],"打球":["否","否","是","是","是","否","是","否","是","是"]})print(data)3、数据编码
encoder=LabelEncoder()forcolindata.columns:data[col]=encoder.fit_transform(data[col])print(data)4、划分特征和标签
X=data.drop("打球",axis=1)y=data["打球"]5、建立决策树模型
tree=DecisionTreeClassifier(criterion="entropy")6、训练模型和预测
tree.fit(X,y)test=pd.DataFrame([[encoders["天气"].transform(["晴朗"])[0],encoders["温度"].transform(["低"])[0],encoders["湿度"].transform(["正常"])[0]]],columns=["天气","温度","湿度"])result=tree.predict(test)7、转换回中文
print("预测结果:")print(encoders["打球"].inverse_transform(result)8、设置中文字体
plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False9、绘制树
plt.figure(figsize=(15,5))plot_tree(tree,feature_names=["天气","温度","湿度"],class_names=["不打球","打球"],filled=True)plt.show()10、效果展示
编程学习
技术分享
实战经验