机器学习面试题整理-决策树系列+逻辑回归
- 一般的矩阵不一定能够对角化,但是对称矩阵一定可以对角化。特别是对称正定矩阵,得到的λ都是正数。
- 正定矩阵压缩的表示最小是n+1.注意对角化的公式,正定对称矩阵对角化之后得到的矩阵是对称正定矩阵。
- 如果不是对称矩阵,可以进行SVD分解,得到对角元素。它的压缩存储最小需要m+n+1,当然,这个是有损压缩。
- 伪逆矩阵,一般来说不是可逆矩阵。伪逆矩阵如果要变成可逆矩阵可以加正则化。
- 无约束优化:梯度下降,牛顿法。牛顿法适合在接近于极值点的时候使用收敛比较快。牛顿法是二次收敛,但是如果优化的点距离最低点比较远,很可能会发散。牛顿法:计算出某点的梯度,然后通过这个梯度斜率计算出这个直线和x轴的焦点,得到xn+1,然后继续计算这个x和损失函数的焦点,重复以上步骤。
- kkt条件:有等是约束和不等式约束,默认不等式约束全部是大于等于0,不等式约束那一项为0,系数都是大于等于0.
- 什么是学习:学习就是一个模型M在某个任务T上有一个验证好坏的量化方法P,当M在对样本进行拟合的时候会通过量化方法P得到经验E,在E的帮助下模型在量化评估的结果便好了就是学习。
- 超参= 在开始机器学习之前,就人为设置好的参数。 模型参数=通过训练得到的参数数据。
决策树系列:
-
LR模型和决策树模型算法的根本区别:LR模型是吧所有特征一股脑塞进去学习,决策树更像是条件分支结构,做条件判断。
-
决策树在所有样本都是同一个类别的时候就停止生长了。或者是划分的属性就只有一种就没得划分了,再者是当前节点包含的样本是空就不能划分了。
-
树是通过信息熵来判断是否要生长的。就是先判断根节点那个属性能够让信息增益最大,就用那个属性进行划分。ID3是信息增益,就是两个熵的差。对可取值数目较多的属性有所偏好,例如:考虑将“编号”作为一个属性。为了解决这个问题,引出了另一个 算法C4.5。信息增益率偏向取值较少的特征。
-
CART最小化基尼指数,表示在样本集合中一个随机选中的样本被分错的概率。举例来说,现在一个袋子里有3种颜色的球若干个,伸手进去掏出2个球,颜色不一样的概率,这下明白了吧。**Gini(D)越小,数据集D的纯度越高。**最小化不纯度,而不是最大化信息增益。
-
为什么树不需要进行归一化:
- 数值缩放并不会影响分裂点的位置变化,因为分裂是通过信息增益或者是基尼指数,信息增益比等等确定的,而且树并不需要进行梯度下降,而是通过寻找最优分裂点进行分裂的。所以,并不需要归一化。
- 既然树形结构(如决策树、RF)不需要归一化,那为何非树形结构比如Adaboost、SVM、LR、Knn、KMeans之类则需要归一化。
- 对于线性模型,特征值差别很大时,运用梯度下降的时候,损失等高线是椭圆形,需要进行多次迭代才能到达最优点。 但是如果进行了归一化,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要的迭代次数较少。
-
分类决策树和回归决策树的区别:
- CART能够创建回归树,其他的树不能创建回归树。CART树是回归树,不断进行特征分裂。所以我们只要遍历所有特征的的所有切分点,就能找到最优的切分特征和切分点。最终得到一棵回归树。
-
预剪枝 (Pre-Pruning) 和 后剪枝 (Post-Pruning):
- 其中的核心思想就是,在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分;如果可以就继续递归生成节点。
- 后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。
随机森林:
-
Bagging:
-
思想就是从总体样本当中随机取一部分样本进行训练,通过多次这样的结果,进行投票获取平均值作为结果输出,这就极大可能的避免了不好的样本数据,从而提高准确度。因为有些是不好的样本,相当于噪声,模型学入噪声后会使准确度不高。这个能够减小方差。boosting减小偏差。
-
-
而同一批数据,用同样的算法只能产生一棵树,这时Bagging策略可以帮助我们产生不同的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在所有样本上,对这n个样本建立分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,获得m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。
-
每棵树的按照如下规则生成:
- 如果训练集大小为N,对于每棵树而言,随机且有放回地从训练集中的抽取N个训练样本,作为该树的训练集;
- 如果每个样本的特征维度为M,指定一个常数m<<M,随机地从M个特征中选取m个特征子集,每次树进行分裂时,从这m个特征中选择最优的;
- 每棵树都尽最大程度的生长,并且没有剪枝过程。
- 一开始我们提到的随机森林中的“随机”就是指的这里的两个随机性(对特征进行分类,对样本进行随机可放回采样分类)。两个随机性的引入对随机森林的分类性能至关重要。由于它们的引入,使得随机森林不容易陷入过拟合,并且具有很好得抗噪能力(比如:对缺省值不敏感)。
-
-
随机森林分类效果影响因素:
- 森林中任意两棵树的相关性:相关性越大,错误率越大;
- 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。
- 减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯一的一个参数。
-
随机森林优点:
- 它能够处理很高维度(feature很多)的数据,并且不用做特征选择(因为特征子集是随机选择的)。
- 在训练完后,它能够给出哪些feature比较重要。得到特征重要性。
- 训练速度快,容易做成并行化方法(训练时树与树之间是相互独立的)。
- 在训练过程中,能够检测到feature间的互相影响。
- 对于不平衡的数据集来说,它可以平衡误差。
- 如果有很大一部分的特征遗失,仍可以维持准确度。
-
随机森林缺点:
- 随机森林已经被证明在某些噪音较大的分类或回归问题上会过拟合。
- 对于有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,所以随机森林在这种数据上产出的属性权值是不可信的。
-
随机森林如何处理缺失值:
- 首先,给缺失值预设一些估计值,比如数值型特征,选择其余数据的中位数或众数作为当前的估计值
- 然后,根据估计的数值,建立随机森林,把所有的数据放进随机森林里面跑一遍。记录每一组数据在决策树中一步一步分类的路径.
- 判断哪组数据和缺失数据路径最相似,引入一个相似度矩阵,来记录数据之间的相似度,比如有N组数据,相似度矩阵大小就是N*N
- 如果缺失值是类别变量,通过权重投票得到新估计值,如果是数值型变量,通过加权平均得到新的估计值,如此迭代,直到得到稳定的估计值。
-
OOB?和OOB的计算:
- 构建随机森林的关键问题就是如何选择最优的m(也就是特征自己数目),这个主要根据OOB error计算
- 当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。
- 袋外数据(oob)误差的计算方法如下:
- 对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类
- 因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O
- 这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。
GBDT算法:
-
Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。Bagging与Boosting的串行训练方式不同,Bagging方法在训练过程中,各基分类器之间无强依赖,可以进行并行训练。
-
GBDT原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的残差,在弱分类器的表现形式就是各棵树。
-
在实际工程中GBDT是计算负梯度,用负梯度近似残差。
-
为什么GBDT能够用负梯度近似残差呢?
- 在回归任务下,GBDT在每一轮迭代时对每个样本都会有一个预测值,此时的损失函数为均方差损失函数:
-
l
(
y
i
,
y
i
)
=
1
2
(
y
i
−
y
i
)
2
l\left(y_{i}, y^{i}\right)=\frac{1}{2}\left(y_{i}-y^{i}\right)^{2}
l(yi,yi)=21(yi−yi)2
那此时的负梯度是这样计算的
− [ ∂ l ( y i , y i ) ∂ y i ] = ( y i − y i ) -\left[\frac{\partial l\left(y_{i}, y^{i}\right)}{\partial y^{i}}\right]=\left(y_{i}-y^{i}\right) −[∂yi∂l(yi,yi)]=(yi−yi) - 所以,当损失函数选用均方损失函数是时,每一次拟合的值就是(真实值 - 当前模型预测的值),即残差。此时的变量是 y i y^{i} yi,即“当前预测模型的值”,也就是对它求负梯度。
- 所以,GBDT需要将多棵树的得分累加得到最终的预测得分,且每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差。
-
梯度提升和梯度下降的区别和联系是什么?
- 下表是梯度提升算法和梯度下降算法的对比情况。可以发现,两者都是在每 一轮迭代中,利用损失函数相对于模型的负梯度方向的信息来对当前模型进行更新,只不过在梯度下降中,模型是以参数化形式表示,从而模型的更新等价于参 数的更新。而在梯度提升中,模型并不需要进行参数化表示,而是直接定义在函 数空间中,从而大大扩展了可以使用的模型种类。梯度提升更新的是一个函数或者是一棵树,更新的东西更多,可以使用的模型更多
-
GBDT优点和局限性:
-
优点:
- 预测阶段的计算速度快,树与树之间可并行化计算。
- 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
- 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系。
-
缺点:
- GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
- GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
- 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。
-
RF和GBDT:
-
相同点:
- 都是用多棵树拟合模型,用CART树时,可以是分类树或者是分类树
-
不同点:
- 随机森林在训练的时候可以并行生成,GBDT则是串行生成
- 随机森林是通过投票得到结果,GBDT是大家一起得到结果
- 随机森林对异常值不敏感,GBDT会比较敏感
- 随机森林能够减小方差,GBDT减小偏差
- 随机森林不用进行特征归一化,GBDT要。
逻辑回归:
-
什么是逻辑回归:
- 就是将线性回归的结果代入到一个非线性变换的SIgmoid中。注意sigmoid公式 S ( t ) = 1 1 + e − t S(t)=\frac{1}{1+e^{-t}} S(t)=1+e−t1
- 逻辑回归的损失函数是 log loss,也就是对数似然函数,函数公式如下:
- Cost ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) if y = 1 − log ( 1 − h θ ( x ) ) if y = 0 \operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned}-\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\-\log \left(1-h_{\theta}(x)\right) & \text { if } y=0 \end{aligned}\right. Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
-
逻辑回归可以进行多分类:
- 可以一类样本当成正样本,其他当成负样本,得到模型概率p1。之后不断重复。以此循环,我们可以得到该待预测样本的标记类型分别为类型class i时的概率pi,最后我们取pi中最大的那个概率对应的样本标记类型作为我们的待预测样本类型。
- 逻辑回归的应用:CTR预估,搜索引擎,购物推荐,银行风控模型等等。
-
逻辑回归的优化方法:
- SGD那些的
- 牛顿法,拟牛顿法等
- 牛顿法其实就是通过切线与x轴的交点不断更新切线的位置,直到达到曲线与x轴的交点得到方程解。在实际应用中我们因为常常要求解凸优化问题,也就是要求解函数一阶导数为0的位置,而牛顿法恰好可以给这种问题提供解决方法。实际应用中牛顿法首先选择一个点作为起始点,并进行一次二阶泰勒展开得到导数为0的点进行一个更新,直到达到要求,这时牛顿法也就成了二阶求解问题,比一阶方法更快。我们常常看到的x通常为一个多维向量,这也就引出了Hessian矩阵的概念
- 牛顿法是定长迭代,没有步长因子,所以不能保证函数值稳定的下降,严重时甚至会失败。还有就是牛顿法要求函数一定是二阶可导的。而且计算Hessian矩阵的逆复杂度很大。
- 拟牛顿法: 不用二阶偏导而是构造出Hessian矩阵的近似正定对称矩阵的方法称为拟牛顿法。拟牛顿法的思路就是用一个特别的表达形式来模拟Hessian矩阵或者是他的逆使得表达式满足拟牛顿条件。
-
为什么要对特征进行离散化:
- 非线性!非线性!非线性!逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合; 离散特征的增加和减少都很容易,易于模型的快速迭代;
- 速度快!速度快!速度快!稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
- 鲁棒性!鲁棒性!鲁棒性!离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 稳定性:特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
- 简化模型:特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
-
One-hot作用是什么?为啥不直接用数字表示?
- 它的作用是避免因将类别用数字作为表示而给函数带来抖动。直接使用数字会将人工误差而导致的
假设引入到类别特征中,比如类别之间的大小关系,以及差异关系等等。
- 它的作用是避免因将类别用数字作为表示而给函数带来抖动。直接使用数字会将人工误差而导致的
-
###逻辑回归的目标函数中增大L1正则化会是什么结果
- 所有参数变成0
-
线性回归要求因变量服从正态分布?
我们假设线性回归的噪声服从均值为0的正态分布。 当噪声符合正态分布N(0, σ 2 σ^2 σ2)时,因变量则符合正态分布N(ax(i)+b, σ 2 σ^2 σ2),其中预测函数y=ax(i)+b。这个结论可以由正态分布的概率密度函数得到。也就是说当噪声符合正态分布时,其因变量必然也符合正态分布。
在用线性回归模型拟合数据之前,首先要求数据应符合或近似符合正态分布,否则得到的拟合函数不正确。