本文是在学习《百面机器学习 算法工程师带你去面试》过程中的学习笔记,将面试问题进行记录以方便查阅,根据目录分成系列。持续更新中…
三、经典算法
深度学习日趋火热,但是深度学习是基于数据驱动的,没有数据,深度学习也无的放矢。本章介绍监督学习中几种经典的分类算法。
1. 支持向量机Support Vector Machines,SVM:
SVM是一个二分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机。支持向量机还包括核技巧,使它成为实质上的非线性分类器。
-
在空间上线性可分的两类点,分别向SVM分类超平面上做投影,这些点在超平面上的投影仍然是线性可分吗?
对于任意线性可分的两组点,在SVM分类的超平面上的投影都是线性不可分的。
-
是否存在一组参数使SVM训练误差为0?
标签y为[-1,1],当训练样本为正例时,预测结果 f ( x ) > 0 f(x)>0 f(x)>0 ,样本被预测为正例。训练样本为负例,预测结果 f ( x ) < 0 f(x)<0 f(x)<0 ,样本被预测为负例。所有样本都被正确预测,训练误差为0.
-
不加入松弛变量,训练误差为0的SVM分类器一定存在吗?
存在。
-
加入松弛变量的SVM分类器训练误差可以为0吗?
不一定能达到0。带有松弛变量的SVM模型有话目标包含两项 C ∑ i = 1 m ζ i C\sum_{i=1}^{m}\zeta _{i} C∑i=1mζi 和 1 2 ∥ w ∥ 2 \frac{1}{2}\left \| w \right \|^2 21∥w∥2 ,当C取较小的值时,正则项将占据较大比重。这样,一个带有训练误差,但是参数较小的点将成为更优的结果。
2. 逻辑回归:
-
逻辑回归与线性回归有何异同?
首先逻辑回归处理的是分类问题,线性回归处理的是回归问题。其次,逻辑回归的因变量是离散的,线性回归的因变量是连续的。在自变量x和超参数确定的情况下,逻辑回归可以看作广义线性模型在因变量y服从二元分布时的一个特殊情况;在使用最小二乘法求解线性回归时,认为y服从正态分布。
相同之处,可以认为二者都使用了极大似然估计来对训练样本建模。在求解超参数的过程中都可以使用梯度下降法。
-
在使用逻辑回归处理多标签的分类问题时,有哪些常见做法,分别应用于哪些场景,之间又有怎样的关系?
如果样本只对应一个标签,可以假设每个样本属于不同标签的概率服从几何分布,可以使用多项逻辑回归(softmax regression)来分类。
当存在样本可能属于多个标签时,可以训练k个二分类的逻辑回归分类器。第i个分类器区分样本是否归为第i类,该分类器的标签就是第i类与非第i类标签。
3. 决策树:
决策树是一种自上而下,对样本数据进行树形分类的过程,由结点和有向边组成。结点分为内部结点和叶结点,内部结点表示一个特征或属性,叶结点表示类别。从顶部根节点开始,所有样本聚在一起,根据跟结点的划分,样本被分到不同的子结点中。再根据子结点的特征进一步划分,直到所有样本都被归到某一类别中。
决策树是一种基础、常见的监督学习模型,常用于分类和回归问题中。决策树的生成以便包含特征选择、树的构造、树的剪枝三个过程。
-
决策树有哪些常用的启发函数?
从若干不同的决策树中选取最优的决策树是一个NP完全问题,在实际中通常采用启发式学习的方法构建一棵满足启发式条件的决策树。
-
ID3—最大信息增益
对于样本集合D,类别数K,数据集D的经验熵表示为
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D)=-\sum_{k=1}^{K}\frac{|C_k|}{|D|}log_2 \frac{|C_k|}{|D|} H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
C k C_k Ck 是样本集合D中属于第k类的样本子集, ∣ C k ∣ |C_k| ∣Ck∣ 表示该子集的元素个数, ∣ D ∣ |D| ∣D∣ 表示样本集合元素个数。
计算某个特征A对于数据集D的经验条件熵
H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = ∑ i = 1 n ∣ D i ∣ D ( − ∑ k = 1 K ∣ D i k ∣ ∣ D i ∣ l o g 2 ∣ D i k ∣ ∣ D i ∣ ) H(D|A)=\sum_{i=1}^{n}\frac{|D_i|}{|D|}H(D_i)=\sum_{i=1}^{n}\frac{|D_i|}{D}(-\sum_{k=1}^{K}\frac{|D_{ik}|}{|D_i|}log_2 \frac{|D_{ik}|}{|D_i|}) H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=i=1∑nD∣Di∣(−k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣)
D i D_i Di 表示D中特征A取第i个值的样本子集, D i k D_{ik} Dik 表示 D i D_i Di 中属于第k类的样本子集。
信息增益 g ( D , A ) g(D,A) g(D,A) 可以表示为二者之差,可得
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)−H(D∣A)
ID3采用信息增益作为评价标准,会倾向于取值较多的特征。信息增益反映的是给定条件以后不确定性减少的程度,特征取值越多意味着确定性更高,也就是条件熵越小,信息增益越大。缺陷就是如果引入特征“DNA“,每个人的DNA都不同,ID3按照DNA特征进行划分一定是最优的(条件熵为0),但这种分类的泛化能力非常弱。所以C4.5对ID3进行了优化。
-
C4.5—最大信息增益比
特征A对于数据集D的信息增益比定义为:
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^{n}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣
这里的i指的是特征。
通过引入信息增益比,一定程度上对取值较多的特征进行惩罚,避免ID3出现过拟合的特性,提升决策树的泛化能力。
-
CART—最大基尼指数(Gini)
Gini描述的是数据纯度,与信息熵含义类似。
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
CART在每一次迭代中选择基尼指数最小的特征及其对应的切分点进行分类。与ID3,C4.5不同的是,CART是一棵二叉树,采用二元分割法,每一步将数据按特征A的取值切成两份,分别进入左右子树。特征A的Gini指数定义为
G i n i ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ G i n i ( D i ) Gini(D|A)=\sum_{i=1}^{n}\frac{|D_i|}{|D|}Gini(D_i) Gini(D∣A)=i=1∑n∣D∣∣Di∣Gini(Di)
上述三者的异同:
从样本角度:ID3只能处理离散性变量,C4.5和CART能处理连续型变量。C4.5处理连续型变量时,通过对数据排序之后找到类别不同的分割线作为切分点,根据切分点把
连续属性转为布尔型,从而将连续变量转为多个取值区间的离散型变量。对于CART,由于其构建时每次都会对特征进行二值划分,可以很好的用于连续型变量。
从应用角度:ID3和C4.5只能用于分类,CART可以用于分类也能用于回归。
从实现细节和优化角度:ID3对样本特征缺失值比较敏感,C4.5和CART可以都缺失值进行不同方式的处理。ID3和C4.5可以在每个结点产生出多叉分支,并且每个特征在层级之间不会复用,CART每个结点只会产生两个分支,最会得到一棵二叉树,每个特征可以被重复使用;ID3和C4.5通过剪枝来权衡树的准确性和繁华能力,CART可以直接利用全部数据发现所有可能的树结构进行对比。
-
-
如何对决策树进行剪枝?
一棵完全生长的决策树会面临过拟合的问题,进行剪枝提高模型的泛化能力。剪枝通常有预剪枝(Pre-Pruning)和后剪枝(Post-Pruning)。
-
预剪枝是在生成决策树的过程中提前停止树的增长。核心思想是在结点进行扩展之前,计算当前划分是否能带来模型泛化能力的提升,如果不能,不再继续生长子树。此时可能存在不同类别的样本同时存在于结点中,按照多数投票的原则判断该结点所属类别。
预剪枝何时停止决策树的生长有一下几种方法:
- 树达到一定深度停止树的生长。
- 当达到当前结点的样本数量小于某个阈值,停止树生长。
- 计算每次分裂对测试集的准确度提升,小于某个阈值则不再扩展。
预剪枝思想直接,算法简单,效率高,适合解决大规模的问题。但是如何准确估计何时停止树生长,不同问题会有很大差别,需要一定经验判断。并且预剪枝存在欠拟合的风险,虽然当前划分会导致测试集准确率降低,但在之后的划分中,准确率可能会显著上升。
-
后剪枝是在已生成的过拟合的决策树上进行剪枝,得到简化版的决策树。核心思想是先得到一棵完全生长的决策树,从底层向上计算是否剪枝。剪枝过程将子树删除,用叶结点代替,结点类别按照多数投票的原则。同样,后剪枝也可以利用在测试集上的准确率来判断是否剪枝。相比于预剪枝,后剪枝得到的模型泛化能力更强,但时间开销更大。
常见的后剪枝方法有错误率降低剪枝(REP)、悲观剪枝(PEP)、代价复杂度剪枝(CCP)、最小误差剪枝(MEP)以及CVP、OPP等。
-
下一章传送门:百面机器学习–机器学习面试问题系列(四)降维