决策树基本介绍
一、 介绍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.722B集合熵值:-1/10*log2(1/10)*103.3222、C4.5算法(1)、衡量标准信息增益率3、CART算法(1)、衡量标准基尼系数三、剪枝1、为什么要剪枝防止过拟合例如有1000条数据构建出来的树有1000条路径也就是每个样本数据就构建一条路径。此时会存在过拟合当预测新的数据时如果不在树的路径中将无法判断出结果2、如何剪枝(1)、预剪枝a.限制树的深度b.限制叶子节点的个数以及叶子节点的样本数c.基尼系数(2)、后剪枝先让决策树完整生长再从底部开始删除不必要的分支。四、代码实现题目天气预测是否打球数据实现过程1、导入库importpandasaspdfromsklearn.treeimportDecisionTreeClassifierfromsklearn.preprocessingimportLabelEncoderfromsklearn.treeimportplot_treeimportmatplotlib.pyplotasplt2、创建数据datapd.DataFrame({天气:[晴朗,晴朗,阴天,雨天,雨天,雨天,阴天,晴朗,晴朗,雨天],温度:[高,高,高,中,低,低,低,中,低,中],湿度:[高,高,高,高,正常,正常,正常,高,正常,正常],打球:[否,否,是,是,是,否,是,否,是,是]})print(data)3、数据编码encoderLabelEncoder()forcolindata.columns:data[col]encoder.fit_transform(data[col])print(data)4、划分特征和标签Xdata.drop(打球,axis1)ydata[打球]5、建立决策树模型treeDecisionTreeClassifier(criterionentropy)6、训练模型和预测tree.fit(X,y)testpd.DataFrame([[encoders[天气].transform([晴朗])[0],encoders[温度].transform([低])[0],encoders[湿度].transform([正常])[0]]],columns[天气,温度,湿度])resulttree.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[不打球,打球],filledTrue)plt.show()10、效果展示
