机器学习 -- 初识决策树,前端面试复习重点

92 阅读13分钟

性能优化

1.webpack打包文件体积过大?(最终打包为一个js文件)

2.如何优化webpack构建的性能

3.移动端的性能优化

4.Vue的SPA 如何优化加载速度

5.移动端300ms延迟

6.页面的重构

所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。

开源分享:docs.qq.com/doc/DSmRnRG…

2. 决策树与if-then规则


从根节点开始对实例的每个特征进行测试,根据结果将其分支,递归的测试分配,直到叶子节点,从而构造了决策树。

决策树分类器的实质就是一系列的if-then规则

路径  ---  规则

内部节点 ---  判定规则

叶子节点 --- 决策结论

****(1)性质:****互斥且完备(即:每个实例都是有且仅有一条路径或规则覆盖。)

(2)特点:

特征空间被划分为不相交的单元或区域。

条件概率分布: 在每个单元中定义的一个类的概率分布。

每个叶节点的条件概率都趋向于具有较高概率的一类。

当决策树进行分类时,该节点的实例被强制归入具有高条件概率的类别。

(3)例子:

(每个矩形是一个单元,假设只有正类和负类,判断条件概率大的就属于该类)

3. 如何学习一个决策树


对于数据集有n个特征,yi对应每个样例的类标签,N为容量

学习目标:构造一个决策树模型,通过训练实例对样本进行正确的分类

实质:从训练数据中归纳出一系列的if-then规则

目的: 构建与训练数据不一致程度较低、泛化能力较好的决策树。对未知数据有较好的预测,且训练精确度好

损失函数: (通常)正则化极大似然函数,使损失函数最小。

从所有候选中选择最优决策树是n-p难问题。在现实中,决策树学习通常采用一种启发式方法,即局部优化。

方法: 选取当前条件下的最优特征作为划分规则,即局部最优特征。主要有自顶向下,贪婪的搜索方法

算法步骤:

(1)建立根节点(选择最佳特征)

(2)对于每个分支确定下一个特征,从而对节点进行划分

(3)确立下一个特征,递归的方法构造决策树

决策树学习算法包括:

(1)特征选择

(2)决策树生成

(3)决策树修剪(避免过拟合)

决策树: 一个条件概率分布。不同的决策树对应不同复杂度的概率模型。

决策树生成: 模型的局部选择(考虑局部优化)

决策树剪枝: 模型的全局选择(考虑全局优化)

三、特征选择

======

1. 什么是特征选择


特征选择: 选择能够对训练数据进行分类的特征。决定使用哪个特征来划分特征空间。如果一个特征分类的结果与随机分类的结果相似,那么这个特征就不能进行分类。

我们如何选择最好的特性? 特征选择准则:信息增益

哪一个特征最好?  它会生成最小损失的树; 启发式:选择产生“最纯粹”节点的特性

策略: 选择能够获得最大信息增益的特性

2. 熵


引入‘熵’的概念,看下图哪一个信息量更大?

左边图信息量更大,因为它有混合的,不确定性更改可以帮助我们更好的分类

熵越大,不确定性越大。

例子:在数据集中,我们有四个特性和两个目标类。在15个实例中,9个分类为是,其余为否有一些方法可以选择特性。如:

:用于测量随机变量的不确定性。熵越大,不确定性越大。

当只有两个特征,变化为二项分布

3. 条件熵


如果是多个特征 --> 引入条件熵 类似于联合概率密度,又叫经验熵或经验条件熵。

4. 信息增益


有了熵和经验熵 --> 信息增益

表示:以某特征划分数据集前后的熵的差值

在训练集D上特征A的信息增益g(D,A)表示为D的熵H(D)和条件熵H(D|A)的差值。

因此,特征选择的方法就是要使用信息增益的IG3算法,选择最小信息增益的特征。

5. ID3算法


使用IG来确定节点特征。

定义变量:

D: 训练数据  |D|:样例的总个数

K: 总共的类别,Ck分别表示每个类,|Ck|表示每个类对应的个数

假设特征A有n个值,则将D划分为{D1,D2,... Dn}子集,每个子集中有不同类Dik

算法表示:

输入:训练集D和特征A

输出:在训练集D上,特征A的信息增益g(D, A)

  1. 计算训练集D的熵H(D)

  2. 计算特征A的条件熵 H(D,A)

  3. 计算信息增益g(D, A) = H(D) - H(D,A)

例题:

6. 信息增益比


由于信息增益偏向于特征取值多的特征,具有倾向性,因此为了对其修正提出了:信息增益比。

总结: IG(信息增益)ID3算法

IGR(信息增益比)C4.5算法

四、决策树生成(Decision tree generation)

=================================

1. ID3算法


非正式********算法:

确定训练集上信息增益最高的特征。

以该特性为根,为该特性的每个值创建一个分支。

对于每个分支,使用该分支分类的训练集子集重复该过程。

何时停止?IG特别小或没有特征可选

正式算法:

输入:训练集D,特征集合A,阈值ε

输出:决策树

  1. 如果数据集D中属于同一类(结果相同)那么就不用划分了,直接就是单节点数;

  2. 如果没有特征,那么表格只有一列是类别,就建立单节点树,节点就取占比最大的;

  3. 除上述情况的其他情况:计算每个特征对应的IG(信息增益),并选择最大IG 的特征Ag

  4. 如果Ag的信息增益小于ε,那么就建立单节点,将样例中个数最多的分类作为类名,并停止。

  5. 如果Ag的信息增益大于ε,分支分成了n个子集,根节点确定,再建立分支。如果分支是同一类,那么形成叶子节点,否则划分成子树;

  6. 按照上述算法递归划分子树。

关键步骤: 3,4,5

****停止条件:****没有特征,小与ε

例题:

 

总结: ID3算法的基本思想是,以信息熵为度量,用于决策树节点的属性选择,每次优先选取信息量最多的属性,亦即能使熵值变为最小的属性,以构造一颗熵值下降最快的决策树,到叶子节点处的熵值为0。此时,每个叶子节点对应的实例集中的实例属于同一类。

****ID3建树的问题:****倾向于特征多的,生成树容易过拟合,从而引入了IGR算法,他的选择标准是IGR

五、决策树的剪枝(Decision tree pruning)

===============================

1. 理想的决策树


(1)叶子结点数最少;

(2)叶子结点深度最小;

(3)叶子结点数最少且叶子结点深度最小。

然而,洪家荣等人已经证明了要找到这种最优的决策树是NP难题。因此,决策树优化的目的就是要找到尽可能趋向于最优的决策树。

2. 决策树面临的问题


过度拟合

决策树算法增长树的每一个分支的深度,直到恰好能对训练样例比较完美地分类。实际应用中,当数据中有噪声或训练样例的数量太少以至于不能产生目标函数的有代表性的采样时,该策略可能会遇到困难。

在以上情况发生时,这个简单的算法产生的树会过渡拟合训练样例(过渡拟合:Over Fitting).

对学习算法是否成功的真正测试是看它对于训练中未见到的数据的执行性能。训练过程应该包含训练样本和验证样本。验证样本用于测试训练后的性能。如果验证结果差,则需要考虑采用不同的结构重新进行训练,例如使用更大的样本集,或者改变从连续值到离散值得数据转换等。通常应该建立一个验证过程,在训练最终完成后用来检测训练结果的泛化能力。

一般可以将分类模型的误差分为:

1、训练误差(Training Error);训练误差是在训练记录上误分类样本比例;

2、泛化误差(Generalization Error);泛化误差是模型在未知记录上的期望误差;

一个好的模型不仅要能够很好地拟合训练数据,而且对未知样本也要能够准确地分类。

一个好的分类模型必须具有低的训练误差和泛化误差。因为一个具有低训练误差的模型,其泛化误差可能比具有较高训练误差的模型高。(训练误差低,泛化误差高,称为过渡拟合)

3. 解决方法:剪枝


****剪枝的方法:****从已生成的树上裁掉一些子树或叶子节点,并将其根节点或者父节点作为新的叶子节点,从而简化分类树模型.

4. 判断剪枝的好坏


极小化决策树损失函数/代价函数

|T| : 树上节点的个数

t : 树的叶子节点

Nt :  叶子节点中的样例个数

Ht( T ) : 节点的经验熵

其中:求和项是模型对训练数据的误差,|T|表示模型复杂度,

因此a控制了两项的影响,如果a大,树简单,如果a小,只用考虑模型与数据的拟合,

所以找到合适的a就很关键

另一方面:树越大,拟合越好,数越小,拟合越差

5. 决策树剪枝算法


输入:生成树T,参数a

输出:剪枝之后的子树

  1. 计算每个节点的熵

  2. 从叶子节点向上回溯,若叶子回溯到父节点得到的子树损失小与原树,就将其剪枝;否则就不动当前节点

  3. 重复上述过程得到损失最小的树。

6. CART算法


不仅可以分类还可以回归

决策树生成: 根据训练数据集生成决策树,尽可能大;

决策树修剪: 用已验证的数据集对树进行修剪,选择最优的子树。最小损失函数是剪枝的准则。

决策树的生成: 递归构造二叉决策树的过程。

分类树: 基尼系数Gini最小的标准

回归树: 最小二乘误差准则

Gini越大,不确定性越大

总结

==

1. 决策树概念:  一系列if-then规则;类的条件概率分布

2. 学习算法 三个步骤:

特征选择: 信息增益(ID3算法)信息增益比(C4.5算法)Gini指数(CART算法)

最后

如果你已经下定决心要转行做编程行业,在最开始的时候就要对自己的学习有一个基本的规划,还要对这个行业的技术需求有一个基本的了解。有一个已就业为目的的学习目标,然后为之努力,坚持到底。如果你有幸看到这篇文章,希望对你有所帮助,祝你转行成功。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】