前言
如果你能找到这里,真是我的幸运~这里是蓝白绛的学习笔记,本集合主要针对《百面机器学习——算法工程师带你去面试》这本书。主要记录我认为重要的知识点,希望对大家有帮助。
第三章 经典算法
0、写在前面
这一章我看了之后的感觉是,需要和《统计学习方法》——李航的书配合着一起看。这一章总共20页,讲了三个经典机器学习算法,而在统计学习方法中少则有50页去讲这三个算法。所以这本书叫做“算法工程师带你去面试”是有道理的,主要是由面试问题引出的对算法知识的整理和延伸,需要在看过统计学习方法,有一定的基础之后再去看这一部分。例如SVM的部分,虽然以一个非常有趣的故事开头,让人觉得原来SVM也不是很复杂嘛,但是后面的面试题引出的知识点,是需要先弄懂SVM算法的推导过程的。
这章同时也给统计学习方法做了非常非常好的补充,例如SVM的部分,给出的面试题是我从来没有想过的,这样的题会让我们对算法原理有更近一步的认识;在逻辑回归的部分,讲了逻辑回归和线性回归的一些延伸知识;在决策树的部分,利用一个例子将后剪枝的算法讲得非常清楚,这个部分我在统计学习方法中没有看懂,在这里就可以看得很明白。
1、支持向量机
- 在空间上线性可分的两类点,分别向SVM超平面上做投影,这些点在超平面上的投影仍然是线性可分的吗?
答案是,对于任意线性可分的两组点,它们在SVM分类超平面上的投影都是线性不可分的。 - 是否存在一组参数使SVM训练误差为0?
答案是,一个使用高斯核()训练的SVM中,若训练集中不存在两个点在同一位置,则存在一组参数
以及参数
使得该SVM的训练误差为0。
- 训练误差为0的SVM分类器一定存在吗?
答案是,一定存在。具体可以去看看这本书。 - 加入松弛变量的SVM的训练误差可以为0吗?
答案是,并不一定能得到训练误差为0的模型。如果使用SMO算法来训练一个加入松弛变量的线性SVM模型,则我们的优化目标改变了,并不再是使训练误差最小。考虑带松弛变量的SVM模型优化的目标函数所包含的两项为:和
。当我们的参数
选取较小的值时,后面的正则项将占据优化的较大比重。这样,一个带有训练误差,但是参数较小的点将成为更优的结果。当
取0时,
也取0时即可达到优化目标。
2、逻辑回归
- 逻辑回归和线性回归的异同:
- 区别:最本质的区别是,逻辑回归处理的是分类问题,线性回归处理的是回归问题。逻辑回归中,因变量取值是一个二元分布,模型学习得出的是
,即给定自变量和超参数后,得到因变量的期望,并基于此期望来处理预测分类问题。而线性回归中实际上求解的是
,是对我们假设的真实关系
的一个近似,其中
代表误差项,我们使用这个近似项来处理回归问题。
还有一个很大的区别是,逻辑回归中的因变量是离散的,线性回归中的因变量是连续的。并且在自变量与超参数
确定的情况下,逻辑回归可以看作广义线性模型在因变量
服从二元分布时的一个特殊情况;而使用最小二乘法求解线性回归时,我们认为因变量
服从正态分布。
- 相同:两者都使用了极大似然估计来对训练样本进行建模。线性回归使用最小二乘法,实际上就是自变量
与超参数
确定,因变量
服从正态分布的假设下,使用极大似然估计的一个化简;而逻辑回归中通过对似然函数
的学习,得到最佳参数
。
在求解参数的过程中,都可以使用梯度下降的方法。
- 多项逻辑回归:
- 一个样本只对应一个标签时,可以假设每个样本属于不同标签的概率服从几何分布,使用多项逻辑回归(Softmax Regression)来进行分类(存在一个Softmax)。
- 一个样本可能属于多个标签时,可以训练
个二分类的逻辑回归分类器,第
个分类器用以区分每个样本是否可以归为第
类。
3、决策树
- 决策树常用的启发函数:
- ID3:最大信息增益
对于样本集合,类别数为
,数据集
的经验熵为
其中
是样本集合
属于第
类的样本子集,
表示该子集的元素个数,
表示样本集合的元素个数。
注:简言之,数据集的经验熵为,根据
的类别分的
个类的信息熵的和。
然后计算某个特征对于数据集
的经验条件熵
为
其中
表示
中特征
取第
个值的样本子集,
表示
中属于第
类的样本子集。
注:简言之,特征对于数据集
的经验条件熵
为,根据特征
分类之后,
的每个类分别求该小数据集的经验熵
,再根据
每个类的占比对经验熵
加权平均。
于是信息增益可以表示为两者之差,可得
注:简言之,信息增益就是根据特征划分之后,每个划分
中
的类别是不是更集中了,也就是给定条件以后不确定性减少的程度。
- C4.5:最大信息增益比
特征对于数据集
的信息增益比定义为
其中
,
称为数据集
关于
的取值熵。
- CART树:最大基尼指数(Gini)
Gini描述的是数据的纯度特征
的Gini指数定义为
注:Gini指数的计算方法是,选取特征的某一个取值,如果特征
有三个取值1、2、3,那么选取
为1这个值,将2、3全看作非1,计算将数据集分成两个部分之后,每个部分数据集的Gini指数的加权平均。数据集的Gini指数是1减根据
划分的标签占比平方和的差。
- 三种决策树构造准则的比较:
- ID3采用信息增益作为评价指标,会倾向于取值较多的特征。因为,信息增益反映的是给定条件以后不确定性减少的程度。C4.5实际上是对ID3的优化,通过引入信息增益比,一定程度上对取值比较多的特征进行惩罚,避免ID3出现过拟合的特征,提升决策树的泛化能力。
- 从样本类型的角度,ID3只能处理离散型变量,而C4.5和CART树都可以处理连续型变量。C4.5会排序找到切分点,将连续变量转换为多个取值区间的离散型变量,CART每次会对特征进行二值划分,适用于连续变量。
- 从应用角度,ID3和C4.5只能用于分类,CART树可以用于分类和回归。
- 从实现细节、优化过程等角度,ID3对样本特征缺失值比较敏感,而C4.5和CART树都可以对缺失值进行不同方式的处理。
ID3和C4.5可以产生多叉分支,且每个特征在层级之间不会复用。CART树是二叉树,每个特征可以被重复利用。
ID3和C4.5通过剪枝来权衡树的准确性和泛化性能,CART树枝节利用全部数据发现所有可能的树结构进行对比。
- 前剪枝:在生成决策树的过程中提前停止树的增长。核心思想是在树中节点进行扩展之前,先计算当前的划分是否能带来模型泛化性能的提升,如果不能则不再继续生成子树。
- 前剪枝停止决策树生长的几种方法:
(1) 当树达到一定深度时停止生长。
(2) 当到达当前节点的样本数量小于某个阈值时停止生长。
(3) 计算每次分类对测试集的准确率提升,当小于某个阈值时停止生长。 - 前剪枝的优缺点:
优点:简单高效,适合解决大规模问题。
缺点:
(1) 深度和阈值这些值很难准确估计,针对不同问题会有很大差别。
(2) 前剪枝存在一定局限性,有欠拟合的风险,虽然当前的划分会导致测试集准确率下降,可能在后面会有显著上升。
- 后剪枝:在已生成的过拟合决策树上进行剪枝。核心思想是让算法生成一棵完全生长的决策树,然后从底层向上计算是否剪枝。(剪枝是将子树删除,用一个叶子节点代替,节点类别按多数投票)如果剪枝之后准确率有提升,则剪枝。
- 后剪枝的优缺点:
优点:通常可以得到泛化能力更强的决策树。
缺点:时间开销大。 - 常用的后剪枝方法:
(1) 错误率降低剪枝(Reduced Error Pruning,REP)
(2) 悲观剪枝(Pessimistic Error Pruning,PEP)
(3)代价复杂度剪枝(Cost Complexity Pruning,CCP)
(4)最小误差剪枝(Minimum Error Pruning,MEP)
(5)CVP(Critical Value Pruning)
(6)OOP(Optimal Pruning) - 代价复杂度剪枝CCP的步骤。
(1) 从完整决策树开始,生成一个子树序列
,其中
由
生成,
为根节点。(也就是说计算剪枝之后误差增加率,选最小的节点剪枝代替,一直剪枝,直到最后只剩下根节点,记录下这个过程中所有的树的样子)
(2)在子树序列中,根据真实误差选择最佳的决策树。CCP对于从子树序列中选最优树有两种方法:1.从子树序列中选择最佳决策树。由于不是在所有可能的子树中寻找,性能上会有一定不足。2.基于折交叉验证,将数据集分成
份,前
份用于生成决策树,最后一份用于剪枝。重复进行
次,再从
个子树中选择最优子树。
小结
这一章的推导并不多,如果要看详细的算法推导还是要看下《统计学习方法》。这章在讲得非常通俗易懂的同时,对知识点也挖得很深,例如SVM,对统计学方法有很好的补充。这章让我很深刻的就是“在空间上线性可分的两类点,分别向SVM超平面上做投影,这些点在超平面上的投影仍然是线性可分的吗?”这个问题,超出了我目前的知识范围,还是要多熟悉原理才行。
结尾
如果您发现我的文章有任何错误,或对我的文章有什么好的建议,请联系我!如果您喜欢我的文章,请点喜欢~*我是蓝白绛,感谢你的阅读!