七、决策树算法和集成算法

一、决策树算法

Ⅰ,树模型

决策树:从根节点开始一步步走到叶子节点(决策)
所有的数据最终都会落到叶子节点,既可以做分类也可以做回归
对于分类:是由众数决定的,例如爷爷奶奶妈妈都是负数,狗蛋儿是正数
对于回归:主要是利用方差来进行计算的,例如按照年龄划分,不同年龄划分到一块,优劣主要看方差的大小数值进行判断。节点的值就是每个划分到一块的年龄的平均值。

举个例子:若要判断谁喜欢打王者农药,如何判断?
首先很容易明白,一般喜欢打农药都是青少年,所以先通过年龄划分,接着,男孩子多数喜欢,然后通过性别划分,最后找到狗蛋儿。这里的年龄和性别判决的先后顺序,能互换吗?不能!换了之后结果可能会大变。在这个案例中,这里的年龄为主要判定决策,其分类效果最强,性别是次要的判定决策。那么问题又来了,凭什么年龄是主要判定决策?凭啥?这就是树模型中主要解决的问题。
在这里插入图片描述

Ⅱ,树的组成

根节点:第一个选择点(age<15)
非叶子节点与分支:中间过程(is male?)
叶子节点:最终的决策结果(狗蛋儿、小红、爷爷奶奶妈妈)
学过数据结构的童鞋理解起来很容易,当然光看字面意思也比较容易,这里就不再过多赘述了。

Ⅲ,决策树的训练和测试

训练阶段:从给定的训练集构造出来一棵树(从跟节点开始选择特征,如何进行特征切分)
测试阶段:根据构造出来的树模型从上到下去走一遍就好了
一旦构造好了决策树,那么分类或者预测任务就很简单了,只需要走一遍就可以了,那么难点就在于如何构造出来一颗树,这就没那么容易了,需要考虑的问题还有很多的!

Ⅳ,如何切分特征,选择节点

根节点的选择该用哪个特征呢?接下来呢?如何切分呢?

我们的目标应该是根节点就像一个老大似的能更好的切分数据(分类的效果更好),根节点下面的节点自然就是二当家了。

通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点,以此类推。

Ⅴ,衡量标准:熵

熵是表示随机变量不确定性的度量。说白了,越混乱熵越大
公式:H(X)=- ∑ (pi * log pi), i=1,2, … , n,其中p为概率取值在0-1之间。为啥捏?主要是对数函数的功劳,对数函数,当取值趋向于1的时候,值趋向于0,公式中前面有负号,故不需要考虑对数的负号问题。也就是说,概率越趋于1,对应的熵越小,越稳定。
在分类任务中我们希望通过节点分支后数据类别的熵值小。熵越小越稳定,表示对象都是一类。

概率对熵值的影响:在这里插入图片描述
很明显,概率值越模糊,熵值越混乱。越趋于中间,越不好判断,熵值越高。

信息增益:表示特征X使得类Y的不确定性减少的程度。(分类后的专一性,希望分类后的结果是同类在一起)也就是说分类完之后,熵变小了。信息增益就是分类前后熵的变化值。

Ⅵ,决策树构造实例

这里有狗蛋儿14天的打王者农药情况,看看是什么元素影响狗蛋儿打游戏。如何构建决策树?
在这里插入图片描述

①选哪个因素当根节点?

在这里插入图片描述

②初始熵值

14天内,有9天打农药,5天不打农药。根据上述的熵的计算公式可得:在这里插入图片描述
初始的熵为0.940。

③outlook

开始对四个因素进行逐一分析,先从outlook开始:
在这里插入图片描述

Outlook = sunny时,熵值为0.971。- ((2/5 * log 2/5) + (3/5 * log 3/5))
Outlook = overcast时,熵值为0。
Outlook = rainy时,熵值为0.971。- ( (3/5 * log 3/5) + (2/5 * log 2/5))

根据数据统计,outlook取值分别为sunny,overcast,rainy的概率分别为:5/14, 4/14, 5/14
由于sunny、overcast、rainy出现的天数不一样,故需要在加权求和一下:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693
系统的熵值从原始的0.940下降到了0.693,增益为0.247

④temperature

同样的道理可得:gain(temperature)=0.029

⑤humidity

同样的道理可得:gain(humidity)=0.152

⑥windy

同样的道理可得:gain(windy)=0.048

选择最大的那个Outlook ,相当于是遍历了一遍特征,找出来了大当家,然后再其余的中继续通过信息增益找二当家!

Ⅶ,决策树版本

ID3:信息增益
C4.5:信息增益率(解决ID3问题,考虑自身熵)
CART:使用GINI系数来当做衡量标准
GINI系数:在这里插入图片描述(和熵的衡量标准类似,计算方式不相同)

Ⅷ,连续值的解决

贪婪算法:例如 60 70 80 90 110 220 300 400,分别依次划分
60、70 80 90 110 220 300 400
60 70、80 90 110 220 300 400
60 70 80、90 110 220 300 400
60 70 80 90、110 220 300 400
60 70 80 90 110、 220 300 400
60 70 80 90 110 220、300 400
60 70 80 90 110 220 300、400
然后依次去计算信息增益,挑选大当家的。实际上就是离散化的过程。

Ⅸ,剪枝策略

决策树过拟合风险很大,理论上可以完全分得开数据,如果树足够庞大,每个叶子节点就成为了一个数据,这样就出现了过拟合现象了。

①预剪枝

边建立决策树边进行剪枝的操作(更实用)
限制深度、叶子节点个数、叶子节点样本数、信息增益量等

②后剪枝

当建立完决策树后来进行剪枝操作
建立完成决策树之后开始后剪枝计算某个节点是否可以去掉,若去掉可以明显减少熵值,那就剪掉。
通过一定的衡量标准在这里插入图片描述叶子节点越多,损失越大
在这里插入图片描述

二、集成算法

1,Bagging:训练多个分类器取平均在这里插入图片描述

2,Boosting:从弱学习器开始加强,通过加权来进行训练在这里插入图片描述加入一棵树,要比原来强

3,Stacking:聚合多个分类或回归模型(可以分阶段来做)

Ⅰ,Ensemble learning

目的:让机器学习效果更好,单个不行,群殴走起

Ⅱ,Bagging模型

全称: bootstrap aggregation(说白了就是并行训练一堆分类器)
最典型的代表就是随机森林
随机:数据采样随机,特征选择随机
森林:很多个决策树并行放在一起
在这里插入图片描述

①随机森林

构造树模型:在这里插入图片描述
由于二重随机性,使得每个树基本上都不会一样,最终的结果也会不一样

树模型:
在这里插入图片描述
在这里插入图片描述

之所以要进行随机,是要保证泛化能力,如果树都一样,那就没意义了!

②随机森林优势

它能够处理很高维度(feature很多)的数据,并且不用做特征选择
在训练完后,它能够给出哪些feature比较重要
容易做成并行化方法,速度比较快
可以进行可视化展示,便于分析
在这里插入图片描述

③KNN模型

在这里插入图片描述
在这里插入图片描述
KNN就不太适合,因为很难去随机让泛化能力变强!

树模型:
在这里插入图片描述
理论上越多的树效果会越好,但实际上基本超过一定数量就差不多上下浮动了

Ⅲ,Boosting模型

典型代表:AdaBoost, Xgboost
Adaboost会根据前一次的分类效果调整数据权重(如果某一个数据在这次分错了,那么在下一次我就会给它更大的权重)
最终的结果:每个分类器根据自身的准确性来确定各自的权重,再合体

①Adaboost工作流程

每一次切一刀
最终合在一起
弱分类器这就升级了
在这里插入图片描述

Ⅳ,Stacking模型

堆叠:很暴力,拿来一堆直接上(各种分类器都来了)
可以堆叠各种各样的分类器(KNN,SVM,RF等等)
分阶段:第一阶段得出各自结果,第二阶段再用前一阶段结果训练
为了刷结果,不择手段!
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
堆叠在一起确实能使得准确率提升,但是速度是个问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 538. 把二叉搜索树转换为累加树 思考分析

题目 给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下&#xff0c;二叉搜索树满足下列约束条件&…

SQL中GROUP BY语句与HAVING语句的使用

最近在学习SQL Server相关知识&#xff0c;一直不知道怎么使用GROUP BY语句&#xff0c;经过研究和练习&#xff0c;终于明白如何使用了&#xff0c;在此记录一下同时添加了一个自己举的小例子&#xff0c;通过写这篇文章来加深下自己学习的效果&#xff0c;还能和大家分享下&a…

scala语言示例_var关键字与Scala中的示例

scala语言示例Scala var关键字 (Scala var keyword) The var Keyword in scala is used to declare variables. As Scala does not require explicit declaration of data type of the variable, var keyword is used. The variable declared using the var keyword as mutable…

八、决策树算法实验可视化展示

一、树模型的可视化展示 官网下载安装包 右击管理员身份运行&#xff0c;直接下一步即可。 配置环境变量&#xff1a; 将安装好的可视化软件的bin文件夹路径添加到系统环境变量Path下即可 打开cmd&#xff0c;输入dot -version&#xff0c;出现相关信息即安装成功 二、决策…

关于在页面中针对不同版本的IE浏览器实现不同的JS或者CSS样式

一般会用到<!--[if IE]>这里是正常的html代码<![endif]--> 条件注释只能在windows Internet Explorer(以下简称IE)下使用&#xff0c;因此我们可以通过条件注释来为IE添加特别的指令。因为这只是IE浏览器支持的注释。 1&#xff0c;条件注释的基本结构和HTML的注释…

机器学习笔记:PCA的简单理解以及应用建议

用notability做的笔记&#xff0c;比较随意&#xff0c;对于第五点的PCA错误使用需要特别强调。 目录1、PCA与线性回归2、PCA主成分数量选择3、压缩重现4、PCA应用建议5、PCA的错误使用1、PCA与线性回归 2、PCA主成分数量选择 3、压缩重现 4、PCA应用建议 5、PCA的错误使用

关于asp.net中的错误提示“将截断字符串或二进制数据。 语句已终止。”

好久没有更新博客了&#xff0c;今天在写asp.net网站的时候&#xff0c;出现了这个问题。错误提示“将截断字符串或二进制数据。 语句已终止。”通过调试&#xff0c;发现在插入数据的时候&#xff0c;由于插入的数据的字符或者二进制数据的长度大于原来定义的类型的长度。及保…

c# 无法将类型隐式转换_C#中的隐式类型数组

c# 无法将类型隐式转换C&#xff03;隐式类型数组 (C# Implicitly Typed Arrays) Like implicitly typed variables, we can also declare an array without specifying its type such type of arrays are known as Implicitly typed arrays. 像隐式类型的变量一样&#xff0c;…

一、信用卡卡号识别

一、思路分析 大体思路&#xff1a;首先拿到一张银行卡&#xff0c;我们得有银行卡号数字的0-9样式的模板&#xff0c;然后再通过不同数字的轮廓的外接矩形来进行匹配&#xff0c;最终识别出银行卡号所对应的数字。 银行卡数字模板&#xff1a; 银行卡信息&#xff1a; 拿到…

bootstrap网格系统_如何使用Bootstrap网格系统?

bootstrap网格系统In the last article, we learned how to create a simple page of Bootstrap? Now, we will learn what is "Grid System" in Bootstrap and how we can use or implement it in our bootstrap page? As you know bootstrap is a mobile-friendl…

有关WriteableBitmap和BitmapImage之间的相互转换

对于WP7中图形处理有关WriteableBitmap和BitmapImage之间的相互转换&#xff0c;给大家几个简单实用的方法。一、WriteableBitmap转为BitmapImage对象var bi new BitmapImage(); bi.SetSource(wb.ToImage().ToStream()); //其中wb是WriteableBitmap对象。 二、BitmapImage转为…

回溯法初步

本文为参考公众号所做的笔记。 代码随想录原文 回溯法本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案&#xff0c;所以它并不是一个高效的算法。但是由于有些问题本身能用暴力搜出来就不错了&#xff0c;所以回溯法也有很多的应用。 回溯法解决的问题…

QEMU中smp,socket,cores,threads几个参数的理解

在用QEMU创建KVM guest的时候&#xff0c;为了指定guest cpu资源&#xff0c;用到了-smp, -sockets, -cores, -threads几个参数&#xff0c; #/usr/bin/qemu-system-x86_64 -name pqsfc085 -enable-kvm -m 2048 -smp 2,sockets2,cores1,threads1 \ -boot ordernc,onced \ -hda …

二、文档扫描OCR

一、思路分析 首先&#xff0c;拿到一张文档&#xff0c;我们需要对文档进行预处理操作&#xff0c;再进行轮廓检测&#xff0c;因为就算拿到文档轮廓&#xff0c;但是这些轮廓也有可能是歪歪扭扭的&#xff0c;这时候需要通过一系列的透视变换操作&#xff0c;将文档摆正。通…

ruby hash方法_Ruby中带有示例的Hash.select方法

ruby hash方法哈希选择方法 (Hash.select Method) In this article, we will study about Hash.select Method. The working of this method can be predicted with the help of its name but it is not as simple as it seems. Well, we will understand this method with the…

leetcode 77. 组合 思考分析

目录1、题目2、回溯法思路3、参考其他思路&#xff0c;更深入了解这个问题4、剪枝优化可能需要回顾到的知识文章&#xff1a;1、常用算法总结(穷举法、贪心算法、递归与分治算法、回溯算法、数值概率算法)2、回溯法初步删除vector容器中的对象元素的三种方法:pop_back, erase与…

ASP 调用dll(VB)及封装dll实例

ASP调用dll及封装dll实例&#xff0c;封装为dll可以提供运行效率&#xff0c;加密代码。 打开VB6&#xff0c;新建ActiveX DLL 2、在工程引用中加入Microsoft Active Server Pages Object Library选择 3、填加代码如下Code Start 声明部分 Private MyScriptingContext As Scrip…

三、全景拼接

一、项目所涉及到的一些知识点 Ⅰ&#xff0c;BF(Brute-Force)暴力匹配&#xff1a;把两张图像的特征点全部给算出来&#xff0c;然后使用归一化的欧氏距离比较这两张图像上特征点之间的大小关系&#xff0c;越小越相似。 SIFT算法 import cv2 import numpy as np import ma…

找回自建SVN密码

自建了一个SVN Repo自己用。重装系统之后密码忘了。 经过了漫长的Google过程&#xff0c;才知道Repo中的密码居然是明文保存的。 在yourRepoDir/conf/svnserve.conf下的password-db处设置&#xff0c;通常是yourRepoDir/conf/passwd文件。 打开passwd文件&#xff0c;就是明文保…

ruby hash方法_Ruby中带有示例的Hash.invert方法

ruby hash方法Hash.invert方法 (Hash.invert Method) In this article, we will study about Hash.invert Method. The working of this method can be predicted with the help of its name but it is not as simple as it seems. Well, we will understand this method with …