一、实验要求
在计算机上验证和测试招聘数据的决策树分类实验,理解基尼系数生成决策树,同时理解决策树的参数。
- 实验目的
1、掌握决策树分类的原理
2、能够实现决策树分类算法;
3、掌握决策树的参数设置;
三、实验内容
实验步骤
- 请阅读DecisionTree1代码,实现基尼系数生成决策树的,gini函数。
- 请阅读DecisionTree2代码,实现calOneEntropy和calOneGini函数,选取莺尾花数据的某个特征,对其分割,针对每个分割点分别计算信息熵和基尼系数,最后把信息熵和基尼系数的曲线图画出来。
def calOneEntropy(X,y,n=100):
ents = np.zeros(n)
X1 = X[:,3]
cuts = np.linspace(X1.min(),X1.max(),n)
#开始计算
i = 0
for num in cuts:
ent = 0.0
y1 = y[X1 < num]
y2 = y[X1 > num]
ent += entropy(y1)
ent += entropy(y2)
ents[i] = ent
i+=1
return cuts,ents
cuts,ents = calOneEntropy(X,y)
plt.xlabel('cuts')
plt.ylabel('ents')
plt.plot(cuts,ents)
plt.show()
def calOneGini(X,y,n=100):
ents = np.zeros(n)
X1 = X[:,3]
cuts = np.linspace(X1.min(),X1.max(),n)
#开始计算
i = 0
for num in cuts:
ent = 0.0
ent += gini(y[X1 < num])
ent += gini(y[X1 > num])
ents[i] = ent
i+=1
return cuts,ents
cuts,ents = calOneGini(X,y)
plt.xlabel('cuts')
plt.ylabel('ents')
plt.plot(cuts,ents)
plt.show()
3.请阅读tree1.ipynb,生成makemoon数据,分别测试,KNN,贝叶斯和决策树,对这个样本数据的分类观察分类的区别。
同时对决策树的下面5个参数进行调节,找到决策树分类相对最优的参数组合。
决策树易于理解和实现,但是决策树算法非常容易过拟合,可以通过设置节点最少样本数量和调节不同参数来改进。
KNN算法无需估计参数,无需训练的方法,但是它的缺点是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。如需改变其准确率可以通过改变其k值来进行测试,找到最优的分类方法。
贝叶斯模型对缺失数据不太敏感,算法也比较简单,常用于文本分类。但是需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
四、实验总结
1. 定义:基尼指数(基尼不纯度):表示在样本集合中一个随机选中的样本被分错的概率。
2.正则化超参数
DecisionTreeClassifier 类还有一些其他的参数,同样可以限制决策树的形状:
min_samples_split (分裂前节点必须有的最小样本数)
min_samples_leaf(叶节点必须有的最小样本数量)
max_leaf_nodes(最大叶节点数量)
max_features(分裂每个节点评估的最大特征数量)
3.使用交叉验证或者网格化搜索查询最优点
4.当决策树深度过大时,在训练集上表现特别好,往往就会出现过拟合现象,我们需要一些解决办法,引入随机森林,下次实验会用。