算法工程师-机器学习-分类回归模型面试常见题
title: 机器学习模型优缺点
tags: 机器学习,分类,回归
grammar_cjkRuby: true
1 机器学习分类模型
1.1 朴素贝叶斯的优缺点 NBM
原理及推导参考来源
https://www.cnblogs.com/jpcflyer/p/11069659.html
https://zhuanlan.zhihu.com/p/26262151
1.1.1 优点
- 算法逻辑简单,易于实现
- 分类过程中时空开销小
- 对缺失数据不太敏感,适合文本分类
- 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练
- 朴素贝叶斯对结果解释容易理解
1.1.2 缺点
- 对输入数据的表达形式很敏感(离散、连续,值极大极小之类的)。离散的类别之间统计频率即可,连续值就要估计概率分布(处理方法不同);
- 对于测试集中的一个类别变量特征,如果在训练集里没见过,直接算的话概率就是0了(训练集中没有的特征);
- 需要计算先验概率;
- 由于我们是通过先验和数据来决定后验的概率从而决定分类,分类决策存在错误率(分类的决策可能是错误的,先验可能是错误的)
- 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
1.1.3 朴素贝叶斯常见面试题
参考来源https://www.cnblogs.com/zhibei/archive/2004/01/13/9394758.html
-
朴素贝叶斯朴素在哪里?
简单来说:利用贝叶斯定理求解联合概率P(XY)时,需要计算条件概率P(X|Y)。在计算P(X|Y)时,朴素贝叶斯做了一个很强的条件独立假设(当Y确定时,X的各个分量取值之间相互独立,我们假设它们相互独立,这就是他的朴素之处,这个假设在现实生活中很不真实,所以朴素),即
P ( X 1 = x 1 , X 2 = x 2 , . . . X j = x j ∣ Y = y k ) = P ( X 1 = x 1 ∣ Y = y k ) ∗ P ( X 2 = x 2 ∣ Y = y k ) ∗ . . . ∗ P ( X j = x j ∣ Y = y k ) P(X1=x1,X2=x2,...Xj=xj|Y=yk) = P(X1=x1|Y=yk)*P(X2=x2|Y=yk)*...*P(Xj=xj|Y=yk) P(X1=x1,X2=x2,...Xj=xj∣Y=yk)=P(X1=x1∣Y=yk)∗P(X2=x2∣Y=yk)∗...∗P(Xj=xj∣Y=yk) -
朴素贝叶斯与LR的区别?
- 朴素贝叶斯是生成模型,根据已有样本进行贝叶斯估计学习出先验概率P(Y)和条件概率 P ( X ∣ Y ) P(X|Y) P(X∣Y),进而求出联合分布概率 P ( X Y ) P(XY) P(XY),最后利用贝叶斯定理求解 P ( Y ∣ X ) P(Y|X) P(Y∣X), 而LR是判别模型,根据极大化对数似然函数直接求出条件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X);
- 朴素贝叶斯是基于很强的条件独立假设(在已知分类Y的条件下,各个特征变量取值是相互独立的),而LR则对此没有要求;
- 朴素贝叶斯适用于数据集少的情景,而LR适用于大规模数据集。
- 相比之下,LR不关心样本中类别的比例及类别下出现特征的概率,它直接给出预测模型的式子。设每个特征都有一个权重,训练样本数据更新权重w,得出最终表达式,然后梯度法求解损失。
-
为什么属性独立性假设在实际情况中很难成立,但朴素贝叶斯仍能取得较好的效果?
- 对于分类任务来说,只要各类别的条件概率排序正确、无需精准概率值即可导致正确分类;
- 如果属性间依赖对所有类别影响相同,或依赖关系的影响能相互抵消,则属性条件独立性假设在降低计算开销的同时不会对性能产生负面影响(P(xy) = P(y)值特别接近)。
- 由于在现实世界中,大多数特征虽不能独立,但大多呈现弱相关性,所以对于模型即使有影响也不是很大
-
算法问题-数值过小问题
实际项目中,概率值往往是很小的小数,连续微小小数相乘容易造成下溢出使乘积为0。
解决方法:对乘积取自然对数,将连乘变为连加。
另外需要注意:给出的特征向量长度可能不同,这是需要归一化为通长度的向量(这里以文本分类为例),比如说是句子单词的话,则长度为整个词汇量的长度,对应位置是该单词出现的次数。 -
先验条件概率的计算方法:
- 离散分布时:统计训练样本中每个类别出现的频率。若某一特征值的概率为0,会使整个概率乘积变为0(称为数据稀疏),这破坏了各特征值地位相同的假设条件。
- 解决方法一:采用贝叶斯平滑(λ=1 时称为拉普拉斯平滑):分子分母同时加一个数字,一般分子加1,分母加的是分类数。
- 解决方法二:通过聚类将未出现的词找出系统关键词,根据相关词的概率求平均值。
- 连续分布时:假定其值服从高斯分布(正态分布)。即计算样本均值与方差。
- 离散分布时:统计训练样本中每个类别出现的频率。若某一特征值的概率为0,会使整个概率乘积变为0(称为数据稀疏),这破坏了各特征值地位相同的假设条件。
-
主要的应用:
文本分类,电子邮件垃圾过滤、新闻分类- 在训练朴素贝叶斯分类器之前,要处理好训练集,文本的清洗还是有很多需要学习的东西;
- 根据提取的分类特征将文本向量化,然后训练朴素贝叶斯分类器。
- 去高频词汇数量的不同,对结果也是有影响的的。
- 拉普拉斯平滑对于改善朴素贝叶斯分类器的分类效果有着积极的作用。
1.2 逻辑回归LR
原理推导参考来源
https://www.jianshu.com/p/dce9f1af7bc9
https://zhuanlan.zhihu.com/p/74874291
1.2.1 需注意的知识点
- 在线学习算法:LR属于一种在线学习算法,可以利用新的数据对各个特征的权重进行更新,而不需要重新利用历史数据训练。
- L1 正则的本质其实是为模型增加了“模型参数服从零均值拉普拉斯分布”这一先验知识。
- L2 正则化:Ridge 回归,相当于为模型添加了这样一个先验知识:模型参数服从零均值正态分布。
1.2.2 优点
- 模型清晰,背后的概率推导经得住推敲。
- 输出值自然地落在0到1之间,并且有概率意义,并非实际的概率
- 参数代表每个特征对输出的影响,可解释性强。
- 适用于在线学习,不需要重新利用历史数据训练。
- 实施简单,非常高效(计算量小、存储占用低),可以在大数据场景中使用
- 可以有效的解决过拟合问题
1.2.3 缺点
- 特征相关情况:因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况(但特征相关对结果影响不大)。
- 特征空间:特征空间很大时,性能不好。
- 精度容易欠拟合,精度不高。
- 对非线性相关的数据不宜处理
- 很难处理数据不平衡的问题
- 形式简单,准确率不高
- 本身无法筛选特征,需要用到其他模型来筛选
1.2.4 概括
逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。这里面其实包含了5个点
- 逻辑回归的假设,
- 逻辑回归的损失函数,
- 逻辑回归的求解方法,
- 逻辑回归的目的,
- 逻辑回归如何分类。
1.2.5 逻辑回归的两个基本假设
- 样本服从伯努利分布:以抛硬币为例,每次试验中出现正面的概率为P,那么出现负面的概率为1-P。那么如果假设hθ(x)为样本为正的概率,1-hθ(x)为样本为负的概率。
- 假设概率函数为Sigmoid函数,用sigmoid函数拟合概率
1.2.6 逻辑回归的损失函数
1.2.7 逻辑回归损失函数为什么使用最大似然估计而不用最小二乘法
- 最小二乘法的误差符合正态分布,而逻辑回归的误差符合的是二项分布,所以不能用最小二乘法来作为损失函数,那么能够用最大似然预计来做。从求最优解的角度来解释:
如果用最小二乘法,目标函数就是
E w , b = ∑ i = 1 m ( y i − 1 1 + e − ( w T x i + b ) ) 2 E_{w,b}=\sum_{i=1}^{m}\left ( y_{i}-\frac{1}{1+e^{-\left ( w^{T}x_{i}+b \right )}}\right )^2 Ew,b=∑i=1m(yi−1+e−(wTxi+b)1)2
函数是非凸的,不容易求解,会得到局部最优。如果用最大似然估计,目标函数就是对数似然函数:
l w , b = ∑ i = 1 m ( − y i ( w T x i + b ) + l n ( 1 + e w T x i + b ) ) l_{w,b}=\sum_{i=1}^{m}\left ( -y_{i}\left ( w^{T}x_{i}+b \right )+ln\left ( 1+e^{w^{T}x_{i}+b} \right ) \right ) lw,b=∑i=1m(−yi(wTxi+b)+ln(1+ewTxi+b))
函数是关于 ( w , b ) (w,b) (w,b)的高阶连续可导凸函数,可以方便通过一些凸优化算法求解,比如梯度下降法、牛顿法等。
最小二乘作为损失函数的函数曲线:
以及最大似然作为损失函数的函数曲线:
1.2.8逻辑回归求解
可参考:https://chenrudan.github.io/blog/2016/01/09/logisticregression.html#4.2
常用的三种梯度下降算法
- 批梯度下降会获得全局最优解,缺点是在更新每个参数的时候需要遍历所有的数据,计算量会很大,并且会有很多的冗余计算,导致的结果是当数据量大的时候,每个参数的更新都会很慢。
- 随机梯度下降是以高方差频繁更新,优点是使得sgd会跳到新的和潜在更好的局部最优解,缺点是使得收敛到局部最优解的过程更加的复杂。
- 小批量梯度下降结合了sgd和batch gd的优点,每次更新的时候使用n个样本。减少了参数更新的次数,可以达到更加稳定收敛结果,一般在深度学习当中我们采用这种方法。
1.2.9特征问题
1.2.9.1 特征相关性问题
-
逻辑回归在训练的过程当中,如果有很多的特征高度相关或者说有一个特征重复了100遍,会造成怎样的影响?
- 先说结论,如果在损失函数最终收敛的情况下,其实就算有很多特征高度相关也不会影响分类器的效果。
- 但是对特征本身来说的话,假设只有一个特征,在不考虑采样的情况下,你现在将它重复100遍。训练以后完以后,数据还是这么多,但是这个特征本身重复了100遍,实质上将原来的特征分成了100份,每一个特征都是原来特征权重值的百分之一。
- 如果在随机采样的情况下,其实训练收敛完以后,还是可以认为这100个特征和原来那一个特征扮演的效果一样。
-
为什么我们还是会在训练的过程当中将高度相关的特征去掉?
- 去掉高度相关的特征会让模型的可解释性更好
- 可以大大提高训练的速度。如果模型当中有很多特征高度相关的话,就算损失函数本身收敛了,但实际上参数是没有收敛的,这样会拉低训练的速度。其次是特征多了,本身就会增大训练的时间。
-
连续特征为什么要离散化
-
稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)
-
离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
-
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合
-
离散化后可以进行特征交叉,由M+N个变量变为M * N个变量,进一步引入非线性,提升表达能力
-
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问
-
总结:1)计算简单 2)简化模型 3)增强模型的泛化能力,不易受噪声的影响
-
-
特征组合又称特征交叉
参考来源https://segmentfault.com/a/1190000014799038- 特征组合的思想很简单,通过将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征。
比如属性A有三个特征,属性B有两个特征,笛卡尔积后就有六个组合特征,然后用one hot 或其他embedding方式给新的特征编码。
- 特征组合的思想很简单,通过将单独的特征进行组合(相乘或求笛卡尔积)而形成的合成特征。
-
在逻辑回归模型中,为什么常常要做特征组合(特征交叉)?
- 逻辑回归模型属于线性模型,线性模型不能很好处理非线性特征,特征组合可以引入非线性特征,提升模型的表达能力。另外,基本特征可以认为是全局建模,组合特征更加精细,是个性化建模,但对全局建模会对部分样本有偏,对每一个样本建模又会导致数据爆炸,过拟合,所以基本特征+特征组合兼顾了全局和个性化。
-
逻辑回归是线性模型吗?
- 逻辑回归是一种广义线性模型,它引入了Sigmod函数,是非线性模型,但本质上还是一个线性回归模型,因为除去Sigmod函数映射关系,其他的算法原理,步骤都是线性回归的。
- 逻辑回归和线性回归首先都是广义的线性回归,在本质上没多大区别,区别在于逻辑回归多了个Sigmod函数,使样本映射到[0,1]之间的数值,从而来处理分类问题。另外逻辑回归是假设变量服从伯努利分布,线性回归假设变量服从高斯分布。逻辑回归输出的是离散型变量,用于分类,线性回归输出的是连续性的,用于预测。逻辑回归是用最大似然法去计算预测函数中的最优参数值,而线性回归是用最小二乘法去对自变量因变量关系进行拟合
-
logistic Regression输出值是真实概率吗?
- 简介:逻辑回归模型之所以是sigmoid的形式,源于我们假设y服从伯努利分布,伯努利分布又属于指数分布族,经过推导,将伯努利分布变成指数分布族的形式后。我们发现伯努利分布的唯一参数Φ与指数分布族中的参数η具有sigmoid函数关系,于是我们转而求η与x的关系,此时,我们又假设η与x具有线性关系。(概率与数据有线性关系)至此,找到了我们要用的模型的样子,也就是逻辑回归。
- 结论:逻辑回归输出的到底是不是概率呢?答案是如果你的情况满足本文所说的两个假设,那么你训练模型的过程,就确实是在对概率进行建模。这两个假设并不是那么容易满足的。所以,很多情况下,我们得出的逻辑回归输出值,无法当作真实的概率,只能作为置信度来使用。
-
如何解决过拟合和欠拟合
- 欠拟合
- 从数据层面上考虑
可以增加新特征,例如,组合、泛化、相关性、高次特征,来增大假设空间等; - 从模型层面上考虑
增加模型的复杂度,例如SVM的核函数,决策树不进行剪枝、DNN等更复杂的模型,去掉正则化项或者减小正则化参数,加深训练轮数等。
- 从数据层面上考虑
- 过拟合
- 增加样本量,减少模型复杂度
- 减少特征数量,在实际使用中会用很多方法进行特征筛选,例如基于IV值的大小,变量的稳定性,变量之间的相关性等。
- 正则化是减少模型复杂度的常用方法,常用的有L1正则化和L2正则化。
- 欠拟合
-
应用场景
广告点击率预测、电商购物搭配推荐、股价预测、产品销量预测- 应用:
- 用于分类:适合做很多分类算法的基础组件。
- 用于预测:预测事件发生的概率(输出)。
- 用于分析:单一因素对某一个事件发生的影响因素分析(特征参数值)。
- 适用:
- 基本假设:输出类别服从伯努利二项分布。
- 样本线性可分。
- 特征空间不是很大的情况。
- 不必在意特征间相关性的情景。
- 后续会有大量新数据的情况。
- 应用:
1.3 SVM
SVM分为三类,线性可分SVM,线性SVM,非线性SVM
1.3.1 SVM原理
SVM是一种二类分类模型。它的基本模型是在特征空间中寻找间隔最大化的分离超平面的线性分类器。(间隔最大是它有别于感知机)
- 当训练样本线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;
- 当训练数据近似线性可分时,引入松弛变量,通过软间隔最大化,学习一个线性分类器,即线性支持向量机
- 当训练数据线性不可分时,通过使用核技巧及软间隔最大化,学习非线性支持向量机。
1.3.2 为什么使用间隔最大化
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。然后应该借此阐述,几何间隔,函数间隔,及从函数间隔—>求解最小化 1 2 ∣ ∣ w ∣ ∣ 2 \frac{1}{2} ||w||^2 21∣∣w∣∣2 时的w和b。即线性可分支持向量机学习算法—最大间隔法的由来。
1.3.3 为什么要将求解SVM的原始问题转换为其对偶问题?
- 对偶问题往往更易求解(当我们寻找约束存在时的最优点的时候,约束的存在虽然减小了需要搜寻的范围,但是却使问题变得更加复杂。为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点。)
- 自然引入核函数,进而推广到非线性分类问题。
1.3.4 为什么SVM要引入核函数?
- 当我们在解决线性不可分的问题时,我们需要通过一个映射函数,把样本值映射到更高维的空间或者无穷维。
- 在特征空间中,我们对线性可分的新样本使用前面提到过的求解线性可分的情况下的分类问题的方法时,需要计算样本内积,但是因为样本维数很高,容易造成“维数灾难”,所以这里我们就引入了核函数,把高维向量的内积转变成了求低维向量的内积问题。
- 内积也是可以衡量相似度的呀!分类问题就是一个找相似样本的过程,你跟我相似,你就属于我这个类,所以在求出的目标函数中会出现内积,可以用这个原理来理解。内积是可以衡量两个向量的相似度的,例如,我们常常可以通过两个相量的距离和夹角来表示相似度,这些属性都可以通过两个向量的内积值来获得.
- 所以从另外一个角度来分析,核函数的作用,其实就是计算了 &(x) 和 &(y)的相似度
1.3.5 核函数形式
Gauss径向基函数则是局部性强的核函数,其外推能力随着参数σ的增大而减弱。这个核会将原始空间映射为无穷维空间。不过,如果 σ 选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果 σ 选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数σ ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
1.3.6 对缺失数据敏感的模型
为什么SVM对缺失数据敏感?
- 基于特征采样的统计分布的方法对缺失值有更高的抗性。决策树能将缺失值尽量解释为其它特征,从而最适用于应对缺失值。其它基于统计分布的方法(如广义加性模型和KNN)能在尽量保证“缺失值是随机的”的前提下降低缺失值造成的负面影响,机理是预先填充缺失值并在训练中视其有值。
- 基于数据的值来定位边界的方法(如支持向量)对缺失值的抗性不好,不恰当的非随机缺失值可能导致模型出现意外。
1.3.7 SVM如何处理多分类问题?
一般有两种做法:一种是直接法,直接在目标函数上修改,将多个分类面的参数求解合并到一个最优化问题里面。看似简单但是计算量却非常的大。另外一种做法是间接法:对训练器进行组合。其中比较典型的有一对一,和一对多。
- 一对多,就是对每个类都训练出一个分类器,由SVM是二分类,所以将此而分类器的两类设定为目标类为一类,其余类为另外一类。这样针对k个类可以训练出k个分类器,当有一个新的样本来的时候,用这k个分类器来测试,那个分类器的概率高,那么这个样本就属于哪一类。这种方法效果不太好,bias比较高。
- SVM一对一法(one-vs-one),针对任意两个类训练出一个分类器,如果有k类,一共训练出C(2,k) 个分类器,这样当有一个新的样本要来的时候,用这C(2,k) 个分类器来测试,每当被判定属于某一类的时候,该类就加一,最后票数最多的类别被认定为该样本的类。
1.3.8 SVM 优点
- 基于结构风险最小化原则(自带正则化 线性SVM 和非线性SVM),这样就避免了过学习问题,泛化能力强
- 凸优化问题,因此局部最优解一定是全局最优解
- 有坚实理论基础的新颖的小样本学习方法
- 只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”
- 计算简单
- 少数支持向量决定了最终结果,这不但可以帮助我们抓住关键样本,“剔除”大量冗余样本,而且注定了该方法不但算法简单,而且具有较好的“鲁棒”性。这种“鲁棒”性主要体现在:
- 增、删非支持向量样本对模型没有影响;
- 支持向量样本集具有一定的鲁棒性;
- 有些成功的应用中,SVM 方法对核的选取不敏感
- 可用于线性/非线性分类,也可以用于回归,泛化错误率低,也就是说具有良好的学习能力,且学到的结果具有很好的推广性
- 可以解决小样本情况下的机器学习问题,可以解决高维问题,可以避免神经网络结构选择和局部极小点问题。
- SVM是最好的现成的分类器,现成是指不加修改可直接使用。并且能够得到较低的错误率,SVM可以对训练集之外的数据点做很好的分类决策
1.3.9 SVM缺点
- SVM算法对大规模训练样本难以实施,当m(样本)数目很大时该矩阵的存储和计算将耗费大量的机器内存和运算时间
- 用SVM解决多分类问题存在困难
- 基于最优化分界面,没有考虑概率模型
- 难以适应多分类问题(可以通过多个二类支持向量机的组合来解决)
优化主要原理是克服SVM固有的缺点,结合其他算法的优势,解决多类问题的分类精度。
1.3.10 SVM 适用
- 模式识别领域中的文本识别
- 中文分类
- 人脸识别
- 小样本训练集上能够得到比其它算法好很多的结果,其优秀的泛化能力,这是是因为其本身的优化目标是结构化风险最小,而不是经验风险最小,因此,通过margin的概念,得到对数据分布的结构化描述,因此减低了对数据规模和数据分布的要求。如SVM在邮件分类上,还不如逻辑回归、KNN、bayes的效果好。
1.4 决策树
1.4.1 基本原理
- 初始情况下生成一个根节点,所有的数据都在这一个节点之内。
- 寻找一个最能区分开不同类样本的最优划分属性,按照样本在该属性上取值的不同,分配到不同的下一级的子节点上。
- 如果某个节点上没有了样本或者可用来划分的属性或者样本都属于同一个类,则停止生成下一级节点,否则继续2中步骤生成更深的决策树。
- 每个叶节点被标记为该节点样本最多的那个类别,预测新样本时,从根节点开始判断新样本的各个属性值,最后落到的叶节点的类别就是预测得出的新样本类别
分类实例如下,每一次树的分裂在以分好的数据中继续进行
1.4.2 常见面试问题
1.4.2.1 信息增益
- 首先要理解熵这个概念。从概率统计的角度看,熵是对随机变量不确定性的度量,也可以说是对随机变量的概率分布的一个衡量。熵越大,随机变量的不确定性就越大。对同一个随机变量,当他的概率分布为均匀分布时,不确定性最大,熵也最大。对有相同概率分布的不同的随机变量,取值越多的随机变量熵越大。其次,要理解条件熵的概念。正如熵是对随机变量不确定性的度量一样,条件熵是指,有相关的两个随机变量X和Y,在已知随机变量X的条件下,随机变量Y的不确定性。当熵和条件熵中概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别为经验熵与经验条件熵。
- 所谓信息增益,也叫互信息,就是指集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D∣A)之差,越大代表不确定性降低的越好,ID3算法在每一次对决策树进行分叉选取最优特征时,会选取信息增益最高的特征来作为分裂特征。
- 信息增益准则的问题(ID3算法存在的问题)?信息增益准则对那些特征的取值比较多的特征有所偏好,也就是说,采用信息增益作为判定方法,会倾向于去选择特征取值比较多(如颜色有七种,人有男女)的特征作为最优特征.特征种类越多,其分到每个种类上的数据越少,带来的熵值越低,此时的信息增益将达到最大,但是这显然不是我们想要的分类结果,这样的分类结果就好像最终得到的每一个分类数据都是按照自己的规则得到的,而我们想要的是根据大部分数据都具有的特征分类,根据一些通用规则而不是特有规则。按照这样特有的规则分类的结果显然是最后再训练集上表现很好,但是泛化能力很差,无法适应新样本,这就产生了过拟合。所以解决方法有 CD4.5
- 采用信息增益率的算法C4.5为什么可以解决ID3算法中存在的问题呢?
- 信息增益率的公式如下:
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 H_A(D) = -\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}H HA(D)=−∑i=1n∣D∣∣Di∣log2∣D∣∣Di∣H,其中n是特征A取值的个数。 H A ( D ) H H_A(D)H HA(D)H表示的就是特征A的熵,如果A只含有少量的取值的话,那么A的熵就比较地, H A ( D ) H H_A(D)H HA(D)H就比较小;相反,如果A取值越多的话,那么A的熵就越高, H A ( D ) H H_A(D)H HA(D)H就比较大,混乱程度。这样就可以解决ID3算法中存在的问题了。
- 信息增益率的公式如下:
1.4.2.2 出现过拟合的原因及其解决办法.
对训练数据预测效果很好,但是测试数据预测效果较差的现象称为过拟合。
-
原因
在决策树构建的过程中,对决策树的生长没有进行合理的限制(剪枝);
样本中有一些噪声数据,没有对噪声数据进行有效的剔除; -
解决办法
选择合理的参数进行剪枝,可以分为预剪枝和后剪枝,我们一般采用后剪枝的方法;
利用K−folds交叉验证,将训练集分为K份,然后进行K次交叉验证,每次使用K−1份作为训练样本数据集,另外一份作为测试集; -
简单解释一下预剪枝和后剪枝,以及剪枝过程中可以参考的参数有哪些?
- 预剪枝:在决策树生成初期就已经设置了决策树的参数,决策树构建过程中,满足参数条件就提前停止决策树的生成。
- 后剪枝:后剪枝是一种全局的优化方法,它是在决策树完全建立之后再返回去对决策树进行剪枝。
参数:树的高度、叶子节点的数目、最大叶子节点数、限制不纯度。
1.4.3 优点
- 计算简单、速度快
- 可解释性强,决策树可以清晰的显示哪些字段比较重要, 即可以生成可以理解的规则.
- 比较适合处理有缺失属性的样本
- 适合高维数据
- 不需要任何领域知识和参数假设
1.4.4 缺点
- 对于各类别样本数量不一致的数据, 信息增益偏向于那些更多数值的特征
- 容易过拟合
- 忽略属性之间的相关性
- 对处理特征关联性比较强的数据时,表现的不是太好
- 准确度不够好,当类别较多时,错误可能增加的比较快
1.4.5 适用范围:
- 如果不强调绝对的解释度,尽量避免单棵决策树,用集成树模型
- 在集成数模型中,优先推荐使用xgboost
- 在中小数据集上,优先选择集成树模型。大数据集上推荐神经网络
- 在需要模型解释度的项目上,优先使用树模型
- 在项目时间较短的项目上,如果数据质量低(大量缺失值、噪音等),优先使用集成树模型
- 在硬件条件有限及机器学习知识有限的前提下,优先选择树模型
- 对于结构化较高的数据,尤其是语音、图片、语言,优先使用神经网络模型(