前言

总结了2017年找实习时,在头条、腾讯、小米、搜狐、阿里等公司常见的机器学习面试题。

支持向量机SVM

关于min和max交换位置满足的 d* <= p* 的条件并不是KKT条件

Ans:这里并非是KKT条件,要让等号成立需要满足strong duality(强对偶),之后有学者在强对偶下提出了KKT条件。KKT条件成立需要满足constraint qualifications,而constraint qualifications之一就是Slater条件——即:凸优化问题,如果存在一个点x,使得所有等式约束都成立(即取严格不等号,不包括等号),则满足Slater条件。SVM中此处,满足Slater条件,等号可以成立

核函数是从高维空间构造超平面,是否会带来高维计算代价的问题?

Ans:并不会。在线性不可分的情况下,SVM首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高纬度空间中构造出最优分离超平面。

高斯核函数在方差参数δ上选取有什么影响?

Ans:如果δ选的很大,高次特征上的权重会衰减的非常快,此时相当于一个低维度的子空间;如果δ选的很小,则可以将任意的数据映射为线性可烦,但可能带来非常严重的过拟合问题。

核函数的本质是什么?

Ans:①解决线性不可分问题 ②在低维上先进行计算,将实质的分类效果在高维上呈现,巧妙地避免了高维计算复杂性的问题。

在目标函数中,拉格朗日的参数α的取值有什么特点?

机器学习常见面试题—支持向量机SVM-LMLPHP

Ans:对于远离平面的点为0;在边缘线的值在 [0, 1/N]之间;对于outlier数据的值为1/N

KNN

如何理解kNN中的k的取值?

Ans :①选取较小的k值时,相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例很相近的样本才会对预测结果起作用。但是,“学习”的估计误差会增大,整体模型会变得复杂,容易过拟合

②选取较大的k值是,相当于用较大的领域中的训练实例进行预测,可以减少学习的估计误差,但是近似误差会增大,因为离输入实例较远的样本也对预测结果起作用,容易使预测发生错误。k过大导致模型变得简单。

③在选取k上,一般取比较小的值,并采用交叉验证法进行调优。

在kNN的样本搜索中,如何进行高效的匹配查找?

Ans :①线性扫描(数据多时,效率低)

②构建数据索引——Clipping和Overlapping两种。前者划分的空间没有重叠,如k-d树;后者划分的空间相互交叠,如R树。

那什么是KD树?怎么构建的?

Ans:kd树是对数据点在k维空间中划分的一种数据结构,主要用于多维空间关键数据的搜索。本质上,kd树就是一种平衡二叉树。

思想:先对计算各个维度的方差,选取最大方差的维度作为候选划分维度(方差越大,表示此维度上数据越分散);对split维度上的值进行排序,选取中间的点为node-data;按照split维度的node-data对空间进行一次划分;对上述子空间递归以上操作,直到空间只包含一个数据点。分而治之,且循环选取坐标轴

能简单介绍一下KD树的查找,以及增、删、改的实现流程吗?

Ans:先二叉查找,找到候选最近点;沿着路径进行回溯,画圆,是否父节点平面交割,以判断是否需要进入另一个平面进行查找;依次回溯,画圆,寻找最近点。

KD树更适合用于训练实例数远大于空间维数时的k近邻搜索。当维数超过20维时,KD数的检索效率急剧下降,几乎接近贪婪的线性扫描。因此出现对KD树的改进——BBF算法,M树,VP树,MVP树等高维空间索引树。

逻辑斯谛回归

LR为什么可以用来做CTR预估?

Ans:若把点击的样本作为正例,未点击的样本作为负例,则样本的CTR就是样本为正例的概率,LR可以输出样本为正例的概率,故可以解决此类问题。此外,LR相对于其他模型,求解简单,可解释强,方便并行

LR相对于线性回归有什么优势?

Ans:LR本质上还是线性回归,但多了最后一层sigmoid函数的非线性映射。正是这这种映射,解决了线性回归在整个实数域内敏感度一致的缺点。在分类任务中,需要控制在[0,1]之间。逻辑回归曲线在z=0处很敏感,在z>>0和z<<0处,都不敏感。

LR与最大熵模型MaxEnt有什么关系?

Ans本质上没有区别。LR是最大熵对应类别为二类时的特殊情况,也就意味着,当逻辑回归类别扩展到多分类时,就是最大熵模型。

LR和SVM的区别和联系?

Ans:①LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(改进后,可处理多分类)

②都可以增加不同的正则化项,如L1、L2,在很多实验中,算法结果很相近。(区别:LR是参数模型,SVM是非参数模型)

③从目标函数上看,LR采用logisticcal loss;SVM采用Hinge Loss。两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重

④SVM仅考虑support vectors,去学习分类器。LR是通过非线性映射,大大减少了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重

⑤LR的模型更加单,好理解,可解释性抢,适合并行。SVM的理解和优化比较复杂,但是可以支持核函数,进行高维映射。

LR能做的,SVM也能做,但可能在准确率上有问题;SVM能做的,LR有的做不了

概括一下LR的思想

Ans: 逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,达到将数据二分类的目的。

朴素贝叶斯

怎么理解朴素贝叶斯中的“朴素”?

因为它假定所有的特征在数据集中的作用是独立同分布的,但这个假设在现实生活中很不真实,因此很“朴素”。

网页搜索中的拼写检查可以基于贝叶斯实现,你怎么理解?

P(c)表示正确词出现的概率,P(w)拼写错误的词。对大文本进行P(c)和P(w|c)的统计,对当前拼写错误词w的所有候选正确词ci,取最大的排序列表。

决策树

请问(决策树、随机森林,Boosting、Adaboot)GBDT和XGBoost的区别是什么?

Ans:①首先,随机森林是一个包含多个决策树的分类器;AdaBoost——即Adaptive Boosting(自适应增强),经典的AdaBoost算法只能处理采用指数损失函数的二分类学习任务,对异常点outlier比较敏感;GBDT指梯度上升决策树算法,相当于融合决策树和梯度上升的Boosting算法。

②xgboost类似gbdt的优化版,在精度和效率上都有了提升,具体优点包括:1.损失函数是用泰勒展开式二项逼近,而非gbdt的一阶导数;2.对树的结构进行了正则化约束,防止模型过度复杂,降低过拟合的可能性;3.节点分裂的方式不同,gbdt用的gini系数,xgboost是经过优化推导后的。

为什么梯度提升方法倾向选择决策树 (通常是CART树) 作为基学习器?

Ans:这与决策树自身的优点有关系:①决策树可以认为是if-then规则集合,易于理解,可解释性强,预测速度快。②相对于其他算法更少的特征工程,如可以不用做特征标准化,可处理缺失值,不用关心特征之间是否相互依赖。③决策树能自动组合多个特征,轻松处理特征之间的交互关系,并且是非参数化的,不必担心异常值或是否线性可分。

在GBDT中,如何抑制单棵决策树的过拟合问题?

Ans:剪枝、限制树的最大深度,限制叶子节点的最少样本数量、限制几点分裂时的最少样本数量,吸收bagging思想对训练样本采样、在学习单棵决策树时只使用一部分样本、借鉴随机森林的思路在学习时只采样一部分特征、在目标函数中添加正则项。

为什么xgboost要用泰勒展开,优势在哪里?

Ans:xgboost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准,使用泰勒展开取得二阶导数形式,可以再不选定损失函数具体形式的情况下,用于算法优化分析。本质上把损失函数的选取和模型算法优化/参数选择分开了,这种去耦合增加了xgboost的适用性。

Xgboost如何寻找最优特征?是有放回的,还是无放回的?

Ans:xgboost在训练的过程中,给出各个特征的评分,以表明每个特征对模型训练的重要性。xgboost利用梯度优化模型算法,样本是不放回的。但xgboost支持子采样——即每轮计算可以不使用全部样本。

ID3和C4.5有什么区别?

Ans:①ID3采用信息熵的增益作为切分依据,倾向于选取特征值较多的属性进行划分;C4.5采用信息熵的增益比作为切分依据,对较少特征数目的属性有所偏好。

7.请谈一谈决策树剪枝有哪些方法?

Ans:剪枝的作用是为了防止决策树过拟合,有两种思路:预剪枝(Pre-Pruning)后剪枝(Post-Pruning)

①预剪枝——指在构造决策树的同时进行剪枝。在创建分支的过程中,为了避免过拟合,可以设定一个阈值,熵减少小于阈值时,则停止继续创建分支。实际效果并不好

②后剪枝——指在决策树构建完成之后回溯,进行剪枝。对拥有相同父节点的一组节点进行检查,判断如果将其合并,熵增加量是否小于某一阈值?是,则合并为一个节点,其中包含了所有可能的结果。后剪枝是删除一些子树,然后用叶子节点代替。此叶子节点的类别通过多数原则确定——用子树中大多数训练样本所属的类别来标识。算法包括Reduced-Error Pruning、Pessimistic Error Pruning(悲观剪枝)

③预剪枝可能产生欠拟合的风险,后剪枝由于需要先生成完整的树,再自底向上进行剪枝,因此花费的时间要久的多。

8. 决策树怎么处理连续值和缺失值?

Ans:①连续值处理——采用连续属性离散化技术,最简答的方法是采用二分法进行处理(C4.5采用的机制)。对特征值进行升序排序,取两个特征值之间的中点作为可能的分裂点,以此离散化。

缺失值处理——包含两个待解决的问题:1. 如何在属性值缺失的情况下,进行划分属性的选择?显然,仅课根据在各属性上没有缺失值的样本来选择。2.给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?若样本x在属性A上的取值已知,则将x划入与其取值对应的子节点,且样本权重在子节点中保持为Wx;若样本x在属性A上取值未知,则将x划入所有子节点,且样本权重与属性值Av对应的子节点中,调整为Rv*Wx。直观上,就是让同一个样本以不同的概率划入到不同的子节点去。

Adaboost的集成效果为什么会比单个学习器效果好?怎么最大化其优势?

Ans:①首先介绍一下boost的理论依据。假设单个学习器的错误率为:

机器学习常见面试题—支持向量机SVM-LMLPHP

假设错误率相互独立,由Hoeffding不等式可以得到整体学习器的错误率:

机器学习常见面试题—支持向量机SVM-LMLPHP

由不等式右边可知:如果学习器的数目T逐渐增大,那么整个学习器的错误率将指数级下降,甚至最终趋向于0

最大化优势的核心在于:如何生成准确性又不是很差,并能保证多样性的个体学习器?(保证错误率假设成立)。两种方式:Boosting——个体学习器间存在强依赖关系,必须串行生成;Bagging——个体之间不存在强依赖关系,并行生成(如 随机森林)

正则化

L1范数和L2范数的区别是什么?

机器学习常见面试题—支持向量机SVM-LMLPHP

Ans:①L1范数——指向量中各个元素的绝对值之和,又叫“稀疏规则算子”(Lasso regularization)。它可以实现特征的自动选择,一般,大部分特征xy没有多大关系,在最小化目标函数时,考虑这些额外的特征虽然能减少训练误差,但是在预测新样本时,会干扰模型对正确结果的预测。L1算子可以学习去掉这些没有信息的特征,让其对应的权重为0。

L2范数——在回归里面,又称“岭回归”(Ridge Regression),有时也被称为“权值衰减”(weight decay)。它可以解决过拟合,使得w的每个元素都很小(接近0),但不会置为0.

③加入正则相当于加入了一种先验L1相当于加入了Laplacean先验;L2相当于加入了Gaussian先验。

机器学习中,为何要常对数据进行归一化?

1. 归一化能够提高梯度下降的最优解求解速度。

机器学习常见面试题—支持向量机SVM-LMLPHP

如上图所示,蓝色线代表特征等高线,X1和X2的特征区间相差很大,当使用梯度下降法求解时,很可能走“之字型”路线(垂直等高线),从而需要迭代很多次才能收敛;

归一化后,等高线显得很圆,梯度下降能很快收敛。

2. 归一化,有可能提高精度

一些分类器需要计算样本之间的距离(如kNN中的欧式距离)。如果一个特征值范围非常大,那么距离计算就主要取决于这个特征。

  • 线性归一
  • 标准化归一
  • 非线性归一化

    经常用在数据分化比较大的情况,如log2,log10

哪些机器学习算法不需要做归一化

概率模型(或树形模型),如决策树,随机森林

为什么树形结构不需要归一化?

数值缩放,不影响分裂点的位置。

因为第一步都是按照特征值进行排序,排序不变,所属的分支和分裂点就不会不同。一般树形结构不能进行梯度下降

因为树模型是阶跃的,阶跃点不可导,所以树模型寻找最优点是通过寻找最优分裂点完成的。

04-28 09:48