当前位置:网站首页>《统计学习方法》——第五章、决策树模型与学习(上)
《统计学习方法》——第五章、决策树模型与学习(上)
2022-07-02 06:33:00 【七归】
作者简介:整个建筑最重要的是地基,地基不稳,地动山摇。而学技术更要扎稳基础,关注我,带你稳扎每一板块邻域的基础。
博客主页:七归的博客
收录专栏:《统计学习方法》第二版——个人笔记
南来的北往的,走过路过千万别错过,错过本篇,“精彩”可能与您失之交臂 la
Triple attack(三连击):Comment,Like and Collect—>Attention
前面已完结的几篇有关《统计学习方法》第二版的文章,同时还附带着实战案例。
有位友友问笔者说:第二版书比第一版多了不少内容,当时买的还是第一版的,博主将把这本书完整更新一遍吗?
笔者回答原话:啊哈哈,差不多吧,不仅要自己能理解,也要小白看得懂,学到知识,希望小白学有所成。
鄙人不才,虽没有李航、周志华、黄海广、鲁伟等优秀老师那般的才华横溢,但幸运的是,我可以从前辈们身上吸收知识,在笔者学到知识并能够理解的情况下,也希望能帮助一些初学者入门AI,更好地学习此路线。
(别人可能会说培训机构、教育平台,还有很多比笔者更优秀的AI专业老师,凭啥来看笔者的文章?这只能看个人选择了,毕竟适合自己的才是最好的)
笔者在这儿提个建议(不喜还请另寻他处):培训机构教育水平固然高,但知识方面是一成不变的。在中国大学,智慧树,B站,CSDN和掘金等各大平台便能足以武装你的知识大脑;再不济,那就来看看博文,很多博主也总结了各方面的知识框架,如何取其精华就看你的了。
决策树模型
决策树概念
分类决策树模型是表示基于特征对实例进行分类的树形结构。
决策树由结点和有向边组成的。其中,结点有两种类型:
- 内部结点,內部结点表示应该特征或属性
- 叶结点,叶结点表示一个类。
决策树是一个树结构(可以是二叉树或者非二叉树)。树是一种递归结构。
决策树算法思想
- 用决策树分类,从根结点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每个子节点对应着该特征的一个取值。
- 如此递归地对实例进行测试并分配,直至达到叶结点,最后将实例分到叶结点的类中,即将叶结点存放的类别作为决策结果。(若有学过数据结构中树结构,便较为容易地理解决策树的决策过程)
- 每个內部结点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶结点存放一个类别。
- 决策树分为分类树和回归树,分类树对离散变量做决策树,回归树对连续变量做决策树
决策树与 if-then 规则
作为一个码农,我们在敲代码的过程中频繁地敲 if-else语句,其实脑子里早就已经灌满了决策树的思想了,所以相比于上一篇的朴素贝叶斯分类算法,有没有觉得决策树已经算“亲切”多了。因此,决策树可以转换成一个 if-then规则的集合。
决策树学习
陈情——如何实现决策
决策树学习的目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。
- 决策树本质上是从训练数据集中归纳出一组分类规则。即能对训练数据进行正确分类的决策树可能有多个,也可能一个都没有。
所以,决策树学习需要的不仅要更好地拟合输入数据,还要能够正确预测未来的类别标记。
- 因此,训练算法的目标就是建立具有很好的泛化能力模型,即建立能够准确预测未来样本类别标记的模型。
用损失函数表示这一目标。决策树的损失函数通常是正则化的极大似然函数。
- 决策树学习的策略是以损失函数为目标函数的最小化。确定损失函数后,就是在损失函数意义下选择最优决策树的问题。
通常是递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类过程,此过程对应着对特征空间的划分,也对应着决策树的构建。
- 构建完成的决策树可能对训练数据有很好的泛化能力,但对未来的测试数据却未必有很好的分类能力,即可能会发生过拟合现象。
- 此时需要对已生成的决策树自下而上进行剪枝,使其具有很好的泛化能力。
若特征数量很多,也可以在决策树学习开始的时候,对特征进行选择,只留下对训练数据有足够分类能力的特征亦可。
下面举个栗子:
- 利用训练数据,根据损失函数最小化的原则建立决策树模型;预测时,对新的数据,利用决策模型进行分类。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import metrics
iris = load_iris()
feature = iris.data
labels = iris.target
clf = DecisionTreeClassifier(criterion='entropy') # 信息熵
x_train, x_test, y_train, y_test = train_test_split(feature, labels, test_size=0.2, random_state=0)
clf.fit(x_train, y_train)
y_pre = clf.predict(x_test)
accuracy = metrics.accuracy_score(y_test, y_pre)
print("The accuracy is %.3f" % accuracy)
小插曲——解解闷
看完前面的决策树大致的决策过程之后,我们再来模拟一个现实场景,以便更好地理解决策树的决策过程:老妈又逼你去相亲拉~~
- 假如你是Mike,你在考虑自己是否要答应家人去相亲,你会基于什么信息做出是否相亲的决定?
- 你可能会考虑对方的年龄是否适合
- 会考虑到对方的长相如何
- 也可能要考虑对方的收入状况。
- Mike会基于这些因素,来判断自己是否去相亲。
在现实生活中,我们还会面临各种各样的选择,而这些选择也基本上是基于我们往期的经验来做出判断的。如果把判断背后的逻辑整理成一个结构图,大家就会发现它实际上是一个树状图。
而我们在做决策树的时候,会经历两个阶段:构造和剪枝
从上面的栗子,我们可以看出一个决策树在构造的过程中,会存在三种结点:
- 根结点
- 第一个选择点
- 內部结点与分支
- 中间过程
- 叶结点
- 最终的决策结果
由此根据这三种结点生成一棵完整的决策树。简单来说,构造的过程就是选择什么属性作为结点的过程,所以在构造决策树的过程中,需要解决的三个主要问题:
- 选择哪个属性作为根结点
- 选择哪些属性作为子结点
- 什么时候结束分类并且得到决策结果
那怎么来选择根结点呢?
- 目标:
- 通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根结点,以此类推。
- 而这个衡量标准就是:熵(下篇更新)
最后的最后——>总结
- 决策树学习旨在构建一个与训练数据拟合很好,并且复杂度很小的决策树。
- 决策树学习算法主要由三部分构成
- 特征选择
- 是指从训练数据中众多的特征中选择一个特征作为当前结点的分支标准,如何选择特征有着很多不同量化评估标准,从而衍生出不同的决策树算法。比如常用的算法有ID3、C4.5和CART。
- 决策树生成
- 根据选择的特征评估标准,从上至下递归地生成子结点,直到数据集不可分则停止决策树的生长。(利用树的递归结构理解)
- 决策树的剪枝
- 决策树容易过拟合,一般来说需要剪枝,缩小树结构规则,缓解过拟合,剪枝技术有预剪枝和后剪枝两种。
- 预剪枝
- 边建立决策树边进行剪枝的操作(更实用),预剪枝需要限制深度,叶结点个数,叶结点样本数,信息增益等
- 后剪枝
- 当建立完决策树后进行剪枝,通过一定的衡量标准(叶结点越多,损失越大)
- 特征选择
边栏推荐
- Minecraft install resource pack
- Select sort and insert sort
- 随笔:RGB图像颜色分离(附代码)
- Find the node with the smallest value range in the linked list and move it to the front of the linked list
- Minecraft group service opening
- C# 将网页保存为图片(利用WebBrowser)
- Solution of Xiaomi TV's inability to access computer shared files
- Dip1000 implicitly tagged with fields
- 【Go实战基础】gin 如何获取 GET 和 POST 的请求参数
- CSDN Q & A_ Evaluation
猜你喜欢

Servlet全解:继承关系、生命周期、容器和请求转发与重定向等

Minecraft plug-in service opening

QT -- how to set shadow effect in QWidget

Minecraft module service opening

机器学习之数据类型案例——基于朴素贝叶斯法,用数据辩男女
![[blackmail virus data recovery] suffix Hydra blackmail virus](/img/27/f44334cf98229d0f8b33c70a878ca8.jpg)
[blackmail virus data recovery] suffix Hydra blackmail virus

Qt——如何在QWidget中设置阴影效果

Openshift build image

History of Web Technology

Minecraft群組服開服
随机推荐
Minecraft air Island service
我服了,MySQL表500W行,居然有人不做分区?
Servlet全解:继承关系、生命周期、容器和请求转发与重定向等
Webflux responsive programming
MYSQL安装出现问题(The service already exists)
使用IBM MQ远程连接时报错AMQ 4043解决思路
Use of libusb
【Go实战基础】如何安装和使用 gin
Solution and analysis of Hanoi Tower problem
Minecraft群组服开服
京东高级工程师开发十年,编写出:“亿级流量网站架构核心技术”
选择排序和插入排序
Openshift container platform community okd 4.10.0 deployment
Qt的connect函数和disconnect函数
libusb的使用
Loadbalancer dynamically refreshes Nacos server
Pyspark de duplication dropduplicates, distinct; withColumn、lit、col; unionByName、groupBy
Sqli labs (post type injection)
Openshift build image
First week of JS study