面试经验(机器学习)
- 常见分类模型( svm,决策树,贝叶斯等)的优缺点,适用场景以及如何选型
解决过拟合的方法有哪些? - KNN(分类与回归)
- 分类模型可以做回归分析吗?反过来可以吗?
- 分类模型和回归模型的区别
机器学习:几种树模型的原理和对比,朴素贝叶斯分类器原理以及公式,出现估计概率值为 0 怎么处理(拉普拉斯平滑),缺点; k-means 聚类的原理以及缺点及对应的改进; - 各个模型的Loss function,牛顿学习法、SGD如何训练。
- 激活函数的选择(sigmoid->ReLu->LReLU->PReLU)
逻辑回归
- L1 与 L2 的区别以及如何解决 L1 求导困难。
范数是衡量某个向量空间(或矩阵)中的每个向量以长度或大小。范数的一般化定义:对实数p>=1, 范数定义如下:
范数公式定义
L1范数:表示某个向量中所有元素绝对值的和。
L2范数: 表示某个向量中所有元素平方和再开根, 也就是欧几里得距离公式。
L1追求的是稀疏,可以理解为变量个数少,L2主要用于处理过拟合问题,让每个权重参数值小?!
L1范数是指向量中各个元素绝对值之和,用于特征选择;
L2范数 是指向量各元素的平方和然后求平方根,用于 防止过拟合,提升模型的泛化能力
L1与L2区别:使用L1可以得到稀疏的权值;用L2可以得到平滑的权值,L2能加速训练?!
- L1正则为什么可以把系数压缩成0,坐标下降法的具体实现细节
如下图:L1就是按绝对值函数的“坡”下降的,而L2是按二次函数的“坡”下降。所以实际上在0附近,L1的下降速度比L2的下降速度要快。所以会非常快得降到0。不过我觉得这里解释的不太中肯,当然了也不知道是不是自己理解的问题。
- LR为什么用sigmoid函数。这个函数有什么优点和缺点?为什么不用其他函数?
我们在建模预测 Y|X,并认为 Y|X 服从bernoulli distribution,所以我们只需要知道 P(Y|X);其次我们需要一个线性模型,所以 P(Y|X) = f(wx)。接下来我们就只需要知道 f 是什么就行了。而我们可以通过最大熵原则推出的这个 f,就是sigmoid。
- LR和SVM有什么区别。
第一,本质上是其loss function不同。
image.png 逻辑回归的损失函数
image.png 支持向量机的目标函数
不同的loss function代表了不同的假设前提,也就代表了不同的分类原理,也就代表了一切!!!简单来说,逻辑回归方法基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值,具体细节参考 参考2。支持向量机基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面,具体细节参考 参考2
第二,支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。
当你读完上面两个网址的内容,深入了解了LR和SVM的原理过后,会发现影响SVM决策面的样本点只有少数的结构支持向量,当在支持向量外添加或减少任何样本点对分类决策面没有任何影响;而在LR中,每个样本点都会影响决策面的结果。
第三,在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。
第四,线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。
第五,SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!
有关Liblinear和Libsvm各自的优势可以归纳如下:
1.libsvm用来就解决通用典型的分类问题
2.liblinear主要为大规模数据的线性模型设计
-
Logistics与随机森林比较
-
Logistic回归的推导,怎么得到objective function。
最大释然函数
-
逻辑回归估计参数时的目标函数,如果加上一个先验的服从高斯分布的假设,会是什么样。
取log后就成了正则化(不确定没查到)
- 逻辑回归的值表示概率吗?
不是,表示可能性,值越大可能性越大(因为用最大似然函数估计逻辑回归参数,其表示事件发生的最大可能性)
- 逻辑回归(损失函数及更新方式推导)
-
梯度下降牛顿拟牛顿原理
-
梯度下降的优缺点。
优点:
是求解无约束优化问题简单
缺点:
靠近极小值时收敛速度减慢。
直线搜索时可能会产生一些问题。
可能会“之字形”地下降。
-
牛顿法、随机梯度下降算法和直接梯度下降算法的区别?
-
牛顿法推导
-
主要问最优化方面的知识,梯度下降法的原理以及各个变种(批量梯度下降,随机梯度下降法,mini 梯度下降法),以及这几个方法会不会有局部最优问题,
-牛顿法- 原理和适用场景,有什么缺点,如何改进(拟牛顿法)
SVM
- SVM与随机森林比较
- SVM为什么要引入拉格朗日的优化方法。
题转化为对偶问题求解
具体做法是:(1)将约束融入目标函数中,得到拉格朗日函数;(2)然后对模型参数w和b求偏导,并令之为零;(3)得到w后,将其带入拉格朗日函数中,消去模型参数w和b;(4)这样就得到了原问题的对偶问题,对偶问题和原问题等价,同时对偶问题也是一个凸优化问题,使用SMO算法求解拉格朗日乘子;(5)得到拉格朗日乘子后,进一步可以得到模型参数w和b,也就得到了我们想要的划分超平面。
- SVM原问题和对偶问题关系
-
SVM在哪个地方引入的核函数, 如果用高斯核可以升到多少维。
-
SVM怎么防止过拟合
-
SVM的目标函数。常用的核函数。
-
SVM的过程,讲了推导过程
-
手撕svm硬软间隔对偶的推导
-
KKT条件用哪些,完整描述
聚类
(划分法、层次法、基于密度方法、基于网格方法、基于模型方法)
法1:(轮廓系数)在实际应用中,由于Kmean一般作为数据预处理,或者用于辅助分聚类贴标签。所以k一般不会设置很大。可以通过枚举,令k从2到一个固定值如10,在每个k值上重复运行数次kmeans(避免局部最优解),并计算当前k的平均轮廓系数,最后选取轮廓系数最大的值对应的k作为最终的集群数目。
法2:(Calinski-Harabasz准则)
其中SSB是类间方差, ,m为所有点的中心点,mi为某类的中心点;
SSW是类内方差, ;
(N-k)/(k-1)是复杂度;
比率越大,数据分离度越大.
- k-means算法初始点怎么选择?你的项目里面推荐算法是怎么实现的?
初始点选择方法:
思想,初始的聚类中心之间相互距离尽可能远.
法1(kmeans++):
1、从输入的数据点集合中随机选择一个点作为第一个聚类中心
2、对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
3、选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4、重复2和3直到k个聚类中心被选出来
5、利用这k个初始的聚类中心来运行标准的k-means算法
从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:
1、先从我们的数据库随机挑个随机点当“种子点”
2、对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。
3、然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。
4、重复2和3直到k个聚类中心被选出来
5、利用这k个初始的聚类中心来运行标准的k-means算法
法2:选用层次聚类或Canopy算法进行初始聚类,然后从k个类别中分别随机选取k个点,来作为kmeans的初始聚类中心点
优点:
1、 算法快速、简单;
2、 容易解释
3、 聚类效果中上
4、 适用于高维
缺陷:
1、 对离群点敏感,对噪声点和孤立点很敏感(通过k-centers算法可以解决)
2、 K-means算法中聚类个数k的初始化
3、初始聚类中心的选择,不同的初始点选择可能导致完全不同的聚类结果。
- kmeans的原理,优缺点以及改进。
初始点选择方法:
思想,初始的聚类中心之间相互距离尽可能远.
法1(kmeans++):
1、从输入的数据点集合中随机选择一个点作为第一个聚类中心
2、对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
3、选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
4、重复2和3直到k个聚类中心被选出来
5、利用这k个初始的聚类中心来运行标准的k-means算法
从上面的算法描述上可以看到,算法的关键是第3步,如何将D(x)反映到点被选择的概率上,一种算法如下:
1、先从我们的数据库随机挑个随机点当“种子点”
2、对于每个点,我们都计算其和最近的一个“种子点”的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。
3、然后,再取一个随机值,用权重的方式来取计算下一个“种子点”。这个算法的实现是,先取一个能落在Sum(D(x))中的随机值Random,然后用Random -= D(x),直到其<=0,此时的点就是下一个“种子点”。
4、重复2和3直到k个聚类中心被选出来
5、利用这k个初始的聚类中心来运行标准的k-means算法
法2:选用层次聚类或Canopy算法进行初始聚类,然后从k个类别中分别随机选取k个点,来作为kmeans的初始聚类中心点
优点:
1、 算法快速、简单;
2、 容易解释
3、 聚类效果中上
4、 适用于高维
缺陷:
1、 对离群点敏感,对噪声点和孤立点很敏感(通过k-centers算法可以解决)
2、 K-means算法中聚类个数k的初始化
3、初始聚类中心的选择,不同的初始点选择可能导致完全不同的聚类结果。
(4)只能发现球状簇。
改进方法
- 手写k-means的伪代码和代码。(Code)
决策树
- 决策树原理
决策树的学习本质上是从训练集中归纳出一组分类规则,得到与数据集矛盾较小的决策树,同时具有很好的泛化能力。决策树学习的损失函数通常是正则化的极大似然函数,通常采用启发式方法,近似求解这一最优化问题。
-
信息熵公式
image.png -
决策树处理连续值的方法。
-
决策树如何防止过拟合
过拟合原因:样本噪声数据干扰过大、样本抽取错误、构建时使用样本中太多无关的输入变量
先剪枝:通过提前停止构建而对树“剪枝”,一旦停止,节点就成为树叶。(停止生长的方法:定义高度、达到某个节点实例具有相同的特征向量、定义阈值)
先剪枝方法相对简单,效率高,而且不需要生成整个决策树,适合解决大规模问题。但是何时停止不好确定,阈值不好确定,高阈值可能导致过分简化的树,而低阈值可能使得树的简化太少。
后剪枝:它首先构造完整的决策树,允许过树过度拟合训练数据,然后对那些置信度不够的节点子树用叶子节点来代替。
-
决策树过拟合哪些方法,前后剪枝
-
接着写一下信息增益的公式。
-
Boost算法
就是"三个臭皮匠顶个诸葛亮"。将若干个弱分类器(base learner)组合起来,变成一个强分类器。大多数boosting方法都是通过不断改变训练数据的概率(权值)分布,来迭代训练弱学习器的。所以总结而言,boosting需要回答2个问题:。
(1)如何改变训练数据的概率(权值)分布
(2)如何将弱分类器组合起来
-
CART(回归树用平方误差最小化准则,分类树用基尼指数最小化准则)
-
GBDT与随机森林比较。
-
GBDT(利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值,拟合一个回归树)
-
绍SVD、SVD++
- 随机梯度下降,标准梯度
- 随机森林和GBDT的区别?LR的参数怎么求解?有没有最优解?
- 随机森林(Bagging+CART)
让我一步一步地构造决策树,怎么计算信息熵、信息增益、然后C4.5 ID3 CART的区别,还说了一下优缺点
在ID3决策树中,也使用信息增益作为特征选择的方法,在C4.5决策树中,使用信息增益比作为特征选择的方法,在CART中,使用基尼指数作为特征选择的方法
详细讨论了样本采样和bagging的问题
说一下Adaboost,权值更新公式。当弱分类器是LR时,每个样本的的权重是w1,w2...,写出最终的决策公式。
说了一下bagging跟boosting。
-
bagging、adaboost、boosting
-
em 与 kmeans 的关系;
-
randomforest,GBDT
-
rf, gbdt, xgboost的区别。
-
什么情况下一定会发生过拟合?
-
什么是贝叶斯估计
-
在平面内有坐标已知的若干个点P0...Pn,再给出一个点P,找到离P点最近的点。
-
在模型的训练迭代中,怎么评估效果。
-
如何减少参数(权值共享、VGG的感受野、GoogLeNet的inception)
-
如何防止过拟合(增加数据,减少模型复杂度->正则化)
-
对于同分布的弱分类器,求分类器均值化之后的分布的均值跟方差。
改变随机森林的训练样本数据量,是否会影响到随机森林学习到的模型的复杂度。
是否了解mutual infomation、chi-square、LR前后向、树模型等特征选择方式。
是否了解线性加权、bagging、boosting、cascade等模型融合方式
有哪些常见的分类器,简单介绍下原理 -
解释 word2vec 的原理以及哈夫曼树的改进。
深度学习
- 假设面试官什么都不懂,详细解释 CNN 的原理;
- softmax公式
- 问了RNN,LSTM。
- 推一下bp算法
- 深度学习和普通机器学习有什么不同?
- 深度学习有很大部分是CNN,给他用通俗的语言解释下卷积的概念,解释下CNN中的优势及原因
特征选择
由数据引申到数据不平衡怎么处理(10W正例,1W负例,牛客上有原题)
聊聊SVM,这段说了好久,从基本的线性可分到不可分,相关升维,各种核函数,每个是如何实现升。以及出现了XX问题,分析是样本的原因还是其他原因。针对不同情况,采取什么解决方案较好。
问了很多数据挖掘的基础知识,包括SVM,逻辑回归、EM、K-means等,然后给我很多场景问我遇到这些情况我要怎么来处理数据,怎么进行建模等等,问得很细
解释一下过拟合和欠拟合,有哪些方法防止过拟合。
- 介绍LR、RF、GBDT ,分析它们的优缺点,是否写过它们的分布式代码
- 为什么要做数据归一化?
- 归一化方式
过拟合
说明L1L2正则的效果与为什么形成这种情况(L1正则稀疏,L2正则平滑,之后说明就是画图说明正则化)
过拟合的解决方法;
-
k折交叉验证中k取值多少有什么关系
-
l2惩罚项是怎么减小Overfitting的?l1,l2等范数的通式是什么?他们之间的区别是什么?在什么场景下用什么范数?l1在0处不可导,怎么处理?
-
判别模型,生成模型