网站具体流程,开发软件价格,哪些网站可以做任务挣钱,视频 wordpress 主题机器学习算法基础知识1#xff1a;决策树 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、场景描述三、决策树的训练1. 决策树训练方式#xff08;1#xff09;分类原则-Gini#xff08;2#xff09;分类原则-entropy#xff08;3#xff09;加权系数-样本量决策树 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、场景描述三、决策树的训练1. 决策树训练方式1分类原则-Gini2分类原则-entropy3加权系数-样本量3程序是如何实现的 2. 决策树构建结果 三、测试集验证四、其他知识五、参考文献 一、本文内容与前置知识点
1. 本文内容
介绍决策树是什么使用场景有哪些
2. 前置知识点
概率论基本知识信息熵增益
二、场景描述
鸢尾花的类别存在SetosaVersicolourVirginica三种我们希望制作一个模型对鸢尾花进行分类。我们会提供一些我们已经采集的样本并且手动提取了每朵花的部分特征数据集一共包括150个样本每个样本包括花萼长度花萼宽度花瓣长度花瓣宽度特征以及对应鸢尾花类别的标签第5列为鸢尾花的类别包括SetosaVersicolourVirginica三类。
三、决策树的训练
我们把150个样本取出120个作为训练集来进行决策树的训练目的希望决策树这个分类器有如下效果 1对于训练集的样本能有比较好的分类效果 2对于测试集的样本能有比较好的分类效果
1. 决策树训练方式
1分类原则-Gini
每一层会选取一个特征进行分类以二分类为主分类原则遵循贪心算法希望尽可能的把样本区分开。 使用了基尼系数作为样本分类效果的评估指标 G i n i 1 − ∑ i 1 n p i 2 Gini1-\sum^n_{i1}p_i^2 Gini1−i1∑npi2 可以看到样本分布越均匀基尼系数越大我们希望完成分类也就是让基尼系数尽可能小样本完全由同一类别构成的时候基尼系数为0。
2分类原则-entropy
信息熵同样的样本的分布越均匀熵越大。 E n t r o p y − ∑ i 0 n p i log 2 ( p i ) Entropy-\sum^n_{i0}p_i\log_2{(p_i)} Entropy−i0∑npilog2(pi)
3加权系数-样本量
直观的考虑以下场景三个类别个数分别为942记为(9,4,2) 下一级分类有两种方案 方案A[(1,0,0),(8,4,2)] 方案B[(8,0,0),(1,4,2)] 两种方案信息熵或基尼系数的加和相同但是显然B尽可能多的把第一类分出去了直观会认为更好。 从上述可以看出分出的堆的大小同样应该被考虑进去进行loss的计算。
所以实际的loss会被记录为(二分类为例) l o s s m G i n i m n G i n i n loss mGini_m nGini_n lossmGinimnGinin m和n分别是所分出两堆的大小用该等式计算信息量显然方案B会更小方案B更合适。
3程序是如何实现的
程序枚举每个特征和阈值在每层的数据中找出信息量最小的分类方式进行分类逐层以这种贪心的方式进行分类 我们只要当好调包侠就行不需要反复造轮子。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import tree
import matplotlib.pyplot as plt# 加载数据集
iris load_iris()
X, y iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 构建决策树分类器
clf DecisionTreeClassifier(criterionentropy, max_depth3, random_state42)
clf.fit(X_train, y_train)
print(iris.feature_names)
print(iris.target_names)
# 可视化决策树
plt.figure(figsize(12, 8))
tree.plot_tree(clf, feature_namesiris.feature_names, class_namesiris.target_names, filledTrue)
plt.show()# 测试准确率
accuracy clf.score(X_test, y_test)
print(测试集准确率:, accuracy)
2. 决策树构建结果
1决策树常用作分类器通过逐级进行条件判断的方式将样本进行逐级分类如下图 2这个决策树通过逐级二分类的方式将鸢尾花按照不同的特征进行分类。 3每个子节点得出最终分类结果这个决策树是三层的对于整个鸢尾花的分类结果上看120个样本大部分都得到了很好的分类。但是有一个白色的子节点仍然含有4朵花是vriginica被识别成了versicolor。 方框中每一行分别是
分类条件基尼系数表征样本的无序程度假设样本全都是同一种则基尼系数0样本数第四行是当前节点在分类中的归属类别。
三、测试集验证
把测试集放进去进行训练得到结果验证决策树的训练效果
accuracy clf.score(X_test, y_test)
print(测试集准确率:, accuracy)四、其他知识
这里只介绍了决策树用于分类的做法事实上还可以用于回归。这里只介绍了Gini和信息熵增益的训练方式事实上还有别的。树的构建最大层数是需要合理考虑的过浅分不出来过深会由于一些极端点导致过拟合设置合理的层数允许一些训练集的点分类错误都是常见的策略。决策树本质上是不断的在线性空间进行线性分割这一点有一点像SVM合理的树的深度会使用交叉验证的方式来进行估算
五、参考文献 五分钟机器学习决策树