机器学习入门|决策树(二)

简介: 对机器学习中决策树的几个划分属性结点的算法,如C4.5,ID3等的更深入的了解,希望能有所收获( ̄︶ ̄)↗ 

说来真是惭愧,今天上午看了一个阿里云大学的课,中午吃完饭就信心十足点击 “考试” 了,结果.....

WeChat_Image_20180203165350_2_

OK ,里面考了很多决策树的知识,想想也对,课程中唯一提到的机器学习算法就是决策树,你说考不考(ノへ ̄、)

总之,单单靠之前学习的一点知识机器学习入门|决策树(一)是远远不够对付这场考试的,以考促学,OK!

下面让我们再深入的了解一下决策树吧!

注:再看这一篇之前,最好先回顾一下上一篇机器学习入门|决策树(一),之前提过的概念,这篇就不再啰嗦啦(/▽\)

信息增益与ID3算法

ID3算法(Iterative Dichotomiser 3,迭代二叉树3代),是Ross Quinlan发明的一种决策树算法。

这个算法是建立在奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(简单理论)。尽管如此,该算法也不是总是生成最小的树形结构。而是一个启发式算法。奥卡姆剃刀阐述了一个信息熵的概念:

$$ Ent(D)=-\sum_{k=1}^{|\gamma|}p_{k}log_{2}p_{k}. $$

进而引入信息增益:

$$ Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}Ent(D^{v}). $$

这个ID3算法可以归纳为以下几点:

  1. 分别计算各个属性的信息增益
  2. 选取其中信息增益最大的属性最为划分属性
  3. 生成包含该属性的结点

ID3算法的核心思想就是以信息增益来度量属性的选择,选择分裂后信息增益最大的属性进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策空间。

ID3算法的一些优缺点:

  1. ID3算法在构造决策树的结构时从不回溯,是一种典型的贪婪搜索算法
  2. 用信息增益选择属性时偏向于选择分枝比较多的属性值,即取值多的属性(这个在上一篇中提到了)
  3. 不能处理连续值的属性
  4. 不做剪枝,容易过拟合

增益比率与C4.5算法

信息增益是一种选择特征的有效办法,但是它偏向于选择取值较多的哪些特征。比如,按编号进行划分,会产生庞大的分支,而每一支分支只包含一个样例。这种情况下为“纯”划分,此时信息增益为最大,但是这种划分对于分类并无意义。因此需要对具有不同特征值数目的特征进行校准。于是C4.5算法就在ID3的基础上引入了增益比率

$$ Gain-ratio(D,a)=\frac{Gain(D,a)}{IV(a)}, $$

其中

$$ IV(a)=-\sum_{v=1}^{V}\frac{|D^{v}|}{|D|}log_{2}\frac{|D^{v}|}{|D|} $$

C4.5算法改进了ID3算法,ID3算法只能处理离散型特征,而C4.5算法能够处理连续型特征。C4.5算法对数据进行预处理将连续型特征离散化。

那么,问题来了。

怎么将连续型的特征离散化呢?

最简单的策略是采取二分法(bi-partition)对连续属性进行处理,这正是C4.5决策树算法中采用的机制。

给定样本集$D$和连续属性$a$,假定$a$在$D$上出现了$n$个不同的取值,将这些值从小到大进行排序,记为$\left\{a^{1},a^{2},...,a^{n}\right\}.$基于划分点$t$可将$D$分为子集$D_{t}^{-}$和$D_{t}^{+}$,其中$D_{t}^{-}$包含那些属性$a$上取值不大于$t$的样本,$D_{t}^{+}$相反。显然,对于相邻的属性取值$a^{i}$与$a^{i+1}$来说,$t$在区间$[a^{i},a^{i+1})$中取任意值所产生的划分结果相同。因此,对连续属性$a$,我们可考察包含$n-1$个元素的候选划分点集合

$$ T_{a}=\left \{ \frac{a^i+a^{i+1}}{2}|1\leqslant i\leqslant n-1 \right \}, $$

即把区间$[a^i,a^{i+1})$的中位点作为候选划分点。然后,我们就可以像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分

$$ Gain(D,a)=\underset{t\in T_a}{max}\;Gain(D,a) $$

$$ =\underset{t\in T_a}{max}Ent(D)-\underset{\lambda \in \left\{-,+ \right \}}{\sum}\frac{|D^{\lambda }_{t}|}{|D|}Ent(D^{\lambda }_{t}) $$

其中$Gain(D,a,t)$是样本集$D$基于划分点$t$二分后的信息增益。于是,我们就可选择使$Gain(D,a,t)$最大化的划分点

这里可能有难理解,举个例子。就比如说判别一个西瓜好坏的属性中有一个叫做“纹理”,它就是可以用ID3算法来处理的离散值,取值有1.清晰,2.稍糊,3.模糊.很容易根据ID3中信息增益的公式求出其信息增益。好了,现在回到我们要处理的连续值,这可麻烦大了!连续值该怎么求!因为不是说取固定一个值来作为划分点,我们这里是要找到连续值属性比如密度的信息增益,求法如上,比如可以得到密度$\leqslant $0.318的为好瓜,反之为坏瓜,当然如果划分出来的“纯度”还是不高,那还可以再分,也可以再次用密度这个属性(注意!!这跟离散值不同了,离散值属性划分完就不可以再用了)。OK,对比一下,仔细思考,希望能理解,不理解可以留言噢( ̄︶ ̄)↗

再次强调,与离散属性不同,若当前结点划分属性为连续属性,该属性还可以作为其后代结点的划分属性

和ID3相比的改进:

  1. 用信息增益率代替信息增益
  2. 能对连续属性进行离散化,对不完整数据进行处理
  3. 进行剪枝

补充:在阿里云大学课堂中还介绍了C50算法,其相对于C4.5的改进:

  1. 使用了boosting
  2. 预剪枝,后剪枝

Gini指数与CART算法

CART(classification and regression tree)算法,即分类回归树,顾名思义,是一个既能用于分类(如ID3算法,C4.5算法),又能用于回归的算法。

至于基尼指数计算都在机器学习入门|决策树(一)中了。

根据视频中的,CART总结:

  1. 核心是基尼系数(Gini)
  2. 分类是二叉树
  3. 支持连续值和离散值
  4. 后剪枝进行修剪
  5. 支持回归,可以预测连续值

总结

WeChat_Image_20180203231840_1_

OK !写完这篇博客,再战!
WeChat_Image_20180203232108_1_

啥?只是飘过,有啥得意的╰( ̄ω ̄o)

但我觉得,OK就行!

参考:

wiki
于 剑 《机器学习:从公理到算法》
周志华 《机器学习》

目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 算法
深入了解机器学习:从入门到应用
【10月更文挑战第6天】深入了解机器学习:从入门到应用
|
17天前
|
机器学习/深度学习 数据采集
机器学习入门——使用Scikit-Learn构建分类器
机器学习入门——使用Scikit-Learn构建分类器
|
17天前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
52 1
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI的奥秘:机器学习入门指南
【10月更文挑战第30天】本篇文章是一份初学者友好的机器学习入门指南,旨在帮助读者理解并开始实践机器学习。我们将介绍机器学习的基本概念,包括监督学习、无监督学习和强化学习等。我们还将提供一些实用的代码示例,以帮助读者更好地理解和应用这些概念。无论你是编程新手,还是有一定经验的开发者,这篇文章都将为你提供一个清晰的机器学习入门路径。
37 2
|
1月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
34 1
|
20天前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
34 0
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第12天】本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和入门实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型训练和评估等步骤,并提供了代码示例。通过本文,读者可以掌握机器学习的基本流程,并为深入学习打下坚实基础。
24 1
|
2月前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
本文介绍了如何使用Python和Scikit-learn进行机器学习的基础知识和实践。首先概述了机器学习的基本概念,包括监督学习、无监督学习和强化学习。接着详细讲解了Python和Scikit-learn的安装、数据处理、模型选择与训练、模型评估及交叉验证等关键步骤。通过本文,初学者可以快速上手并掌握机器学习的基本技能。
64 2
|
2月前
|
机器学习/深度学习 人工智能 数据挖掘
机器学习基础:使用Python和Scikit-learn入门
【10月更文挑战第6天】在人工智能领域,机器学习已成为核心技术。本文指导初学者使用Python与Scikit-learn入门机器学习,涵盖基本概念、环境搭建、数据处理、模型训练及评估等环节。Python因简洁性及其生态系统成为首选语言,而Scikit-learn则提供了丰富工具,简化数据挖掘与分析流程。通过实践示例,帮助读者快速掌握基础知识,为进一步深入研究奠定坚实基础。
30 4
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端大模型入门:Transformer.js 和 Xenova-引领浏览器端的机器学习变革
除了调用API接口使用Transformer技术,你是否想过在浏览器中运行大模型?Xenova团队推出的Transformer.js,基于JavaScript,让开发者能在浏览器中本地加载和执行预训练模型,无需依赖服务器。该库利用WebAssembly和WebGPU技术,大幅提升性能,尤其适合隐私保护、离线应用和低延迟交互场景。无论是NLP任务还是实时文本生成,Transformer.js都提供了强大支持,成为构建浏览器AI应用的核心工具。
553 1