决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)...

本文主要是介绍决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.

1、问题的引入

2、一个实例

3、基本概念

4、ID3

5、C4.5

6、CART

7、随机森林

2.

image

我们应该设计什么的算法,使得计算机对贷款申请人员的申请信息自动进行分类,以决定能否贷款?

 

 

一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:

女儿:多大年纪了?

母亲:26。

女儿:长的帅不帅?

母亲:挺帅的。

女儿:收入高不?

母亲:不算很高,中等情况。

女儿:是公务员不?

母亲:是,在税务局上班呢。

女儿:那好,我去见见。

决策过程:

image

 

这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见

3.定义:

决策树是一种描述对样本实例(男人)进行分类(见或不见)的树形结构。

决策树由结点和有向边组成。最上部是根节点,此时所有样本都在一起,经过该节点后样本被划分到各子节点中。每个子节点再用新的特征来进一步决策,直到最后的叶节点。叶节点上只包含单纯一类样本(见或不见),不需要在进行划分。

结点两种类型:内部结点和叶结点。

内部结点表示一个特征或属性,叶节点表示一个类。

4.熵

特征选择

首先,我们该选择什么标准(属性、特征)作为我们的首要条件(根节点)对样本(男人)进行划分,决定见或不见呢?——特征选择

母亲希望女儿能最快速的有一个明确的态度,决定见或不见,这样好给男方一个明确的答复。

母亲需要获得尽可能多的信息,减少不确定性。

信息的如何度量?——熵

母亲得到信息越多,女儿的态度越明确,与男方见与不见的不确定性越低。因此,信息量与不确定性相对应。使用熵来表示不确定性的度量。

熵定义:如果一件事有k种可的结果,每种结果的概率为

image

则我们对此事件的结果进行观察后得到的信息量为:

image

熵越大,随机变量(见与不见)的不确定性越大。

 

5.条件熵(局部,现象发生的前提下的熵)

条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。例如,知道男生年龄的前提条件下,根据女儿见与不见的不确定性。

image

熵与条件熵中概率由数据估计得到时,所对应的熵和条件熵称为经验熵和经验条件熵。若概率为0,令0log0=0

6.信息增益

信息增益表示得知特征X(年龄)的信息使得类Y(见与不见)的信息的不确定性减少程度。

特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下的经验条件熵H(D|A)之差

image

熵H(Y)与条件熵H(Y|X)之差称为互信息,即g(D,A)。

信息增益大表明信息增多,信息增多,则不确定性就越小,母亲应该选择使得信息增益增大的条件询问女儿。

 

7.信息增益准则的特征选择方法

对数据集D,计算每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。

8.贷款申请样本数据表 (例子)

image

根据贷款申请样本数据表,我们有15条样本记录,则样本容量为15。最终分为是否贷款2个类,其中是有9条记录,否有6条记录。有年龄、有工作、有自己的房子和信贷情况4个不同特征。每个特征有不同的取值,如年龄有老、中、青3种取值。

熵的定义

image

计算经验熵

image

然后计算各特征对数据集D的信息增益。分别以A1,A2,A3,A4表示年龄、有工作、有自己的房子和信贷情况4个特征。

根据年龄有取值青年、中年、老年。

青年贷款是2条记录,否3条记录,共5条记录

中年贷款是3条记录,否2条记录,共5条记录

老年贷款是4条记录,否1条记录,共5条记录

条件熵公式

image

 

条件熵公式

image

年龄为已知条件的条件熵为

image

D1,D2,D3分别是年龄取值为青年、中年、老年的样本子集。

以年龄为条件的信息增益为

image

有工作的信息增益

image

有房子的信息增益

image

信贷情况的信息增益

image

最后比较各特征的信息增益值,对于特征A3有自己房子的信息增益值最大,所以选择特征A3作为最优特征。

结合最开始的例子,我们可以知道年龄作为首选特征的信息增益最大,选择年龄作为见与不见首要条件。

9.ID3算法

ID3算法的核心是在决策树各个子节点上应用信息增益准则选择特征,递归的构建决策树,具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归调用以上方法,构建决策树。

直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。

 

    继续前面的过程,由于特征A3(有自己房子)的信息增益值最大,所以选择特征A3作为根节点的特征。它将训练数据集划分为两个子集D1(A3取值为是)和D2(A3取值为否)。由于D1只有同一类样本点,可以明确要贷款给D1,所以它成为一个叶节点,节点类标记为“是”。

对于D2则需要从特征A1(年龄),A2(有工作)和A4(信贷情况)中选择新的特征。计算各个特征的信息增益:

image

image

image

 

选择信息增益最大的特征A2(有工作)作为节点特征。A2有2个取值,一个对应“是”(有工作)的子节点,包含3个样本,他们属于同一类,所以这是一个叶节点,类标记为“是”;另一个对应“否”(无工作)的子节点,包含6个样本,属于同一类,这也是一个叶节点,类标记为“否”。

换句话有15个贷款人,经过是否有房这一筛选条件,有房子的6个人能够贷款。剩余9个人需要进一步筛选,以是否有工作为筛选条件,有工作的3个人可以贷款,无工作的6个人不能够贷款。

image

该决策树只用了两个特征(有两个内部结点),以有自己的房子作为首要判决条件,然后以有工作作为判决条件是否可以贷款。

ID3算法只有树的生成,所以该算法生成的树容易产生过拟合,分得太细,考虑条件太多。

10.C4.5算法

1.用信息增益选择属性时偏向于选择分枝比较多的属性值,即取值 多的属性。

2.不能处理连续属性。

信息增益比定义:特征A对训练数据集D的信息增益比定义为其信息增益与训练数据D关于特征A的值的熵HA(D)之比

image

其中,image ,n是特征A取值个数。如A代表年龄。

image

C4.5算法的改进

C4.5算法是数据挖掘十大算法之一,它是对ID3算法的改进,相对于ID3算法主要有以下几个改进

(1)用信息增益比来选择属性

(2)在决策树的构造过程中对树进行剪枝

(3)对非离散数据也能处理

(4)能够对不完整数据进行处理

11.CART算法

分类回归树(CART,Classification And Regression Tree)其核心思想与ID3和C4.5相同,主要的不同处在于CART在每一个节点上都采用二分法,即每个节点都只能有两个子节点,最后构成的是二叉树。

划分方法

剪枝

名称

体温

表面覆盖

胎生

产蛋

能飞

水生

有腿

冬眠

类标记

恒温

毛发

哺乳类

巨蟒

冷血

鳞片

爬行类

鲑鱼

冷血

鳞片

鱼类

恒温

毛发

哺乳类

冷血

有时

两栖类

巨蜥

冷血

鳞片

爬行类

蝙蝠

恒温

毛发

哺乳类

恒温

哺乳类

豹纹鲨

冷血

鳞片

鱼类

海龟

冷血

鳞片

有时

爬行类

豪猪

恒温

刚毛

哺乳类

冷血

鳞片

鱼类

蝾螈

冷血

有时

两栖类

上例是属性有8个,每个属性又有多个离散的值可取。在决策树的每一个节点上我们可以按任一个属性的任一个值进行划分。比如最开始我们按:

1)表面覆盖为毛发和非毛发

2)表面覆盖为鳞片和非鳞片

3)体温为恒温和非恒温

要产生树的左右两个孩子,按哪种划分最好呢?一般我们采用GINI指数,作为划分标准。总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)

 

12.GINI指数

分类问题中,假设有k个类,样本点属于第i类的概率为pi,则基尼指数定义为

image

体温为恒温时包含哺乳类5个、鸟类2个,体温为非恒温时包含爬行类3个、鱼类3个、两栖类2个。

image

体温为恒温时包含哺乳类5个、鸟类2个,则:

image

体温为非恒温时包含爬行类3个、鱼类3个、两栖类2个,则:

image

 

集合的基尼指数

如果样本集合D根据特征A是否取某一可能值a被分割成D1和D2两部分,则在特征A的条件下,集合D的基尼增益定义为

image

如果按照“体温为恒温和非恒温”进行划分的话,我们得到GINI的增益:

image

集合的基尼指数表示集合D的不确定性,基尼指数值越大,样本属于某类的不确定性也就越大,这点与熵相似。我们总希望获得更多信息,减少不确定性。因此,最好的选取特征划分就是使得集合的基尼指数GINI最小的划分。

13.剪枝

当CART树划分得太细时,会对噪声数据产生过拟合作用。因此我们要通过剪枝来解决。剪枝又分为前剪枝和后剪枝。

前剪枝是指在构造树的过程中就知道哪些节点可以剪掉,于是干脆不对这些节点进行分裂。

后剪枝是指构造出完整的决策树之后再来考查哪些子树可以剪掉。

CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单),从而能够对未知数据有更准确的预测。

CART剪枝算法由两步组成:首先从生成算法产生的决策树T0底端开始不断剪枝,直到T0的根节点,形成一个子树序列 ;然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。

CART树中的每一个非叶子节点的表面误差率增益值α(误差增加的速率,越小越好)

image

 

image是是子树中包含的叶子节点个数。

image是节点t的误差代价,如果该节点被剪枝:

r(t)是节点t的误差率;

p(t)是节点t上的数据占所有数据的比例;

是子树Tt的误差代价,如果该节点不被剪枝。它等于子树Tt上所有叶子节点的误差代价之和。

有个非叶子节点t4如图所示:

image

已知所有的数据总共有60条,则节点t4的节点误差代价为:

image

注意:叶子节点的类定义为覆盖的样本占多数的类,即分正确的为多数,分错的为少数。

子树误差代价为:

image

以t4为根节点的子树上叶子节点有3个,最终:

image

找到α值最小的非叶子节点,令其左右孩子为空,即该节点成为叶子节点,即剪枝。

14.随机森林

随机森林就是建立很多决策树,组成一个决策树的“森林”,通过多棵树投票来进行决策。这种方法能够有效地提高对新样本的分类准确度。

随机森林的步骤:

首先,对样本数据进行有放回的抽样,得到多个样本集。具体来讲就是每次从原来的N个训练样本中有放回地随机抽取N个样本(包括可能重复样本)。

然后,从候选的特征中随机抽取m个特征,作为当前节点下决策的备选特征,从这些特征中选择最好地划分训练样本的特征。用每个样本集作为训练样本构造决策树。单个决策树在产生样本集和确定特征后,使用CART算法计算,不剪枝。

最后,得到所需数目的决策树后,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。

随机森林的方法即对训练样本进行了采样,又对特征进行了采样,充分保证了所构建的每个树之间的独立性,使得投票结果更准确。

image

随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。有了这2个随机因素,即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。

随机森林中有两个可控制参数:森林中树的数量(一般选取值较大)和抽取的属性值m的大小。

随机森林的优点:

(1)分类结果更加准确

(2)可以处理高维度的属性,并且不用做特征选择

(3)即使有很大部分数据遗失,仍可以维持高准确度

(4)学习过程快速

(5)在训练完成后,能够给出哪些属性比较重要

(6)容易实现并行化计算

(7)在训练

15.代码—实现ID3算法

1、准备训练数据

image

2、计算信息增益

image

image

image

image

image

image

image下边是计算

image

image下边计算

image

3、递归构建决策树

其中当所有的特征都用完时,采用多数表决的方法来决定该叶子节点的分类,即该叶节点中属于某一类最多的样本数,那么我们就说该叶节点属于那一类!

image

创建树

image

image

运行测试:

image

4、查看生成的决策树

image

image

image

5、测试数据

image

image

image

image

6、决策树的存储

构造决策树是一个很耗时的任务。为了节省计算时间,最好能够在每次执行分类时调用已经构造好的决策树。为了解决这个问题,需要使用python模块pickle序列化对象,序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。

image

image

运行测试:

image

7、示例:使用决策树预测隐形眼镜类型

image

image

image

image

image

image

总结

image

转载于:https://www.cnblogs.com/chaoren399/p/4847462.html

这篇关于决策树-预测隐形眼镜类型 (ID3算法,C4.5算法,CART算法,GINI指数,剪枝,随机森林)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211361

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int