【机器学习】二、决策树

目录

一、决策树定义:

二、决策树特征选择

2.1 特征选择问题

 2.2 信息增益

2.2.1 熵

2.2.2 信息增益

三、决策树的生成

 3.1 ID3算法

3.1.1理论推导

3.1.2代码实现

 3.2 C4.5 算法

3.2.1理论推导

​ 3.2.2代码实现

四、决策树的剪枝

4.1 原理

4.2 算法思路:

五、CART算法

5.1 CART生成

5.1.1 回归树的生成

5.1.2 分类树的生成

 比较:

5.1.3 CART生成算法

5.2 CART剪枝

 六、代码

6.1 代码

6.2 结果


一、决策树定义:

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。

结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。

⚪:内部结点

正方形:叶结点

二、决策树特征选择

2.1 特征选择问题

特征选择在于选取对训练数据具有分类能力的特征。这样可以提高决策树学习的效率。如果用一个特征去分类,得到的结果与随机的分类没有很大差别,那么这次分类是无意义的。因此,我们要选取有意义的特征进行分类。

举个例子吧~

 如上述表格所示,决定买房子要不要贷款的因素有年龄、有无工作、有无房子、信贷情况四个因素。那么如何选取合适的特征因素呢?

特征选择就是决定用哪个特征来划分特征空间。

       直观上来讲,如果一个特征具有更好的分类能力,或者说,按照各以特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就应该选择这一特征。  

信息增益(information gain)就能够很好的表示这一直观准则。

 2.2 信息增益

2.2.1 熵

在统计学中,熵是表示随机变量不确定性的度量。

设X是一个取有限个值的离散随机变量,其概率分布为

 则随机变量X的熵定义为:

其中如果pi =  0,则0log0 = 0.

单位为bit或者nat。

上只依赖于X的分布,而与X的取值无关,所以也可将X的熵记作H(p)。

熵越大,随机变量的不确定性越大,从定义可以验证:

 

 信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

2.2.2 信息增益

 

 选择方法:

 计算方法:

输入:训练数据集D和特征值A:

输出:特征A队训练数据集D的信息增益g(D,A),

step1:计算数据集D的经验熵H(D):

step2:计算特征A对数据集D的经验条件熵H(D|A):

step3:计算信息增益:

 举个栗子吧~:

用上面的表,计算每个特征的信息增益!!!!

 所以A3的信息增益值最大,选择A3做最优特征。

三、决策树的生成

 3.1 ID3算法

ID3算法的核心是在决策树上各个结点上应用信息增益准则选择特征,递归地构建决策树。

3.1.1理论推导

对上表用ID3算法建立决策树:

 

3.1.2代码实现

https://blog.csdn.net/colourful_sky/article/details/82056125

 3.2 C4.5 算法

       C4.5算法与ID3类似,C4.5算法对ID3算法进行了改进,C4.5在生产的过程中,用信息增益比来选择特征。

3.2.1理论推导
 3.2.2代码实现

https://www.cnblogs.com/wsine/p/5180315.html

四、决策树的剪枝

4.1 原理

      决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的结果容易出现过拟合现象。因为这样生成的决策树过于复杂,所以我们需要对决策树进行简化——剪枝。

剪枝:在决策树学习中将已生成的树进行简化的过程。

本次介绍损失函数最小原则进行剪枝,即用正则化的极大似然估计进行模型选择。

公式这里参考李航老师的书:

 

4.2 算法思路:

五、CART算法

     分类与回归树模型(CART, classification and regression tree)是应用广泛的决策树学习方法。

CART由特征选择、树的生成及剪枝组成,既可以用于回归也可以用于分类

5.1 CART生成

step1:决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大。

step2:决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

5.1.1 回归树的生成

回归树用平方误差最小化准则,选择特征,生成二叉树。

 

5.1.2 分类树的生成

分类树用基尼指数最小化准则,选择特征,生成二叉树。

 比较:

5.1.3 CART生成算法

原理:

 例子:

还是用上面的的表格吧

step1:计算各个特征的基尼指数,选择最有特征以及其最优切分点。

step2:选择基尼指数最小的特征及其对应的切分点 

5.2 CART剪枝

 六、代码

sklearn中决策树都在‘tree’这个模块中,这个模块总共包含五类:

tree.DecisionTreeClassifier 分类树
tree.DecisionTreeRegressor 回归树
tree.export_graphviz 画图专用
tree.ExtraTreeClassifier 高随机版本的分类树
tree.ExtraTreeRegressor 高随机版本的回归树

这里用分类树举例子

6.1 代码

  1. #数据准备
  2. from sklearn.datasets import load_breast_cancer
  3. breast_cancer = load_breast_cancer()
  4. #分离数据
  5. breast_cancer
  6. x=breast_cancer.data
  7. y=breast_cancer.target
  8. #训练数据
  9. from sklearn.model_selection import train_test_split
  10. x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=33,test_size=0.3)
  11. #数据标准化
  12. from sklearn.preprocessing import StandardScaler
  13. breast_cancer_ss = StandardScaler()
  14. x_train = breast_cancer_ss.fit_transform(x_train)
  15. x_test = breast_cancer_ss.transform(x_test)
  16. #分类树
  17. from sklearn.tree import DecisionTreeClassifier
  18. dtc = DecisionTreeClassifier()
  19. dtc.fit(x_train,y_train)
  20. dtc_y_predict = dtc.predict(x_test)
  21. from sklearn.metrics import classification_report
  22. k=0
  23. j=0
  24. for i in y_test:
  25. if i!=dtc_y_predict[j]:
  26. k=k+1
  27. j=j+1
  28. print(k)
  29. print('预测结果:\n:',dtc_y_predict)
  30. print('真是结果:\n:',y_test)
  31. print('Accuracy:',dtc.score(x_test,y_test))
  32. print(classification_report(y_test,dtc_y_predict,target_names=['benign','malignant']))

6.2 结果

 

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

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

相关文章

前端移动高级web详细解析五

响应式布局方案 媒体查询 Bootstrap框架 01-媒体查询 基本写法 max-width:最大宽度(小于等于) min-width:最小宽度(大于等于) 书写顺序 min-width(从小到大) max-width&…

linux下的程序环境和预处理(gcc演示)

1. 程序的翻译环境和执行环境 在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。 2. 详解编译链接 2.1 翻译环境 组成一个程序的…

Inspeckage,动态分析安卓 APP 的 Xposed 模块

前提 我在不久前写过《 APP 接口拦截与参数破解》的博文;最近爬取APP数据时又用到了相关技术,故在此详细描述一下 Inspeckage 的功能。(环境准备本文不再赘述) 功能 在电脑上访问 http://127.0.0.1:8008 就可以看到 inspeckage…

采购申请单明细账/汇总账页面编写

业务需求和功能 1、功能:编写采购申请页面和采购申请管理页面。在申请单界面添加常用的查询条件,如单品、申请单等。在采购申请管理页面以单品维度去展示采购申请单的汇总信息,添加一个默认查询时间为7天,并对查询出来的不同状态…

2021年09月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 使用map函数可以实现列表数据元素类型的转换,而无需通过循环。则将列表L[‘1’,‘3’,‘5’,‘7’,‘9’]转…

如何创建 SpringBoot 多模块项目

1. 创建父模块 【添加依赖】 【删除父模块资源】 父模块只需要保留 pom.xml,其他文件的全部删除(包括 src) 2. 创建子模块 3. 修改父模块 3.1 删除不必要的依赖 3.2 添加打包类型 3.3 添加所有子模块 声明子模块有两个好处: …

企业链表(未完成)

文章目录 1. 插入2. 类型转换说明2. 代码实现 1. 插入 // 插入 void insert(LinkList* list, int pos, LinkNode* data) {if (!list || !data)return;if (pos < 0 || pos > list->size)return;LinkNode* curNode &(list->head);for (int i 0; i < pos; i)…

Mac 配置环境变量

Mac 配置环境变量 修改配置文件 vim ~/.bash_profile i进入编辑模式. Esc&#xff1a;wq 保存文件 esc:q 退出 如&#xff1a;jdk环境变量配置 JAVA_HOME/Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/HomeCLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/…

目标检测 图像处理 计算机视觉 工业视觉

目标检测 图像处理 计算机视觉 工业视觉 工业表盘自动识别&#xff08;指针型和数值型&#xff09;智能水尺识别电梯中电动车识别&#xff0c;人数统计缺陷检测&#xff08;半导体&#xff0c;电子元器件等&#xff09;没带头盔检测基于dlib的人脸识别抽烟检测和睡岗检测/驾驶疲…

GAMP源码阅读:卫星位置钟差计算

原始 Markdown文档、Visio流程图、XMind思维导图见&#xff1a;https://github.com/LiZhengXiao99/Navigation-Learning 文章目录 1、satposs_rtklib()2、ephclk()1. eph2clk()&#xff1a;时钟校正参数&#xff08; a f 0 、 a f 1 、 a f 2 a_{f0}、a_{f1}、a_{f2} af0​、af…

vim

简介 vim是一款多模式的文本编辑器&#xff0c;vim里面还有很多子命令&#xff0c;来进行代码的编写操作 常用模式图 命令模式 光标移动 shif $ 光标定义到当前行的最右侧结尾 shift ^ 光标定义到当前行的最左侧开头 shift g 光标定位到文本最末尾…

怎样解决“缺失msvcp110.dll”错误,msvcp110.dll的修复教程

在计算机使用过程中&#xff0c;我们可能会遇到一些系统错误提示&#xff0c;比如“msvcp110.dll文件丢失”。这是因为msvcp110.dll是Microsoft Visual C 2012的一个动态链接库文件&#xff0c;如果这个文件丢失或者损坏&#xff0c;就可能导致某些程序无法正常运行。那么&…