AI算法面试题总结一(机器学习)

AI算法面试题总结一

机器学习

仅供学习使用,侵删
参考链接
https://mp.weixin.qq.com/s/1GavvCY7wUetMvC61gxkLg
https://zhuanlan.zhihu.com/p/190223015
1 - 为什么 LR (Logistic Regression)用交叉熵损失而不是平方损失?

一些定义:Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题,利用Logistic函数(Sigmoid函数)来回答该样本是正类的概率。
解答:若采用平方损失,求得的梯度会受到simoid函数导数的影响,当当前模型的输出接近0或是1时,simoid函数导数会接近于0,使得梯度非常小,进而导致损失函数收敛非常慢;
而使用交叉熵损失时,梯度并没有受到sigmoid函数导数的影响,且真实值与预测值差别越大,梯度越大,更新的速度也就越快,这正是我们想要的。
参考链接https://zhuanlan.zhihu.com/p/124757082

2 - 为什么SVM要引入核函数?

一些定义:支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化
解答:在现实世界中,不是所有的样本都是线性可分的,有时候我们也会遇到线性不可分的样本;对于这样的问题,可以将样本从原始空间映射到一个更高维的特征空间中,使得样本在这个特征空间中线性可分。若原始空间是有限维,即属性数有限,那么就一定存在一个高维特征空间能够将样本分开。通过将输入空间映射到了高维的特征空间,可以把平面上不好区分的非线性数据很好地区分开。但是对于映射后的对偶问题,如果 直接去计算的话会较为难算,为了解决这个问题,才引入了核函数(目的:为了解决映射后难以计算的问题,方法:设想在原始样本空间中能找到一个函数满足映射后需要计算的两个样本间的特征空间内积)
参考链接https://zhuanlan.zhihu.com/p/31886934
https://cloud.tencent.com/developer/article/1489227

3 - SVM核函数有哪些??

一些定义:SVM核函数的选择对于其性能的表现有至关重要的作用,尤其是针对那些线性不可分的数据,因此核函数的选择在SVM算法中就显得至关重要。对于核技巧我们知道,其目的是希望通过将输入空间内线性不可分的数据映射到一个高纬的特征空间内使得数据在特征空间内是可分的。
解答
1 - 线性核函数: κ ( x , x i ) = x ⋅ x i \kappa\left(x, x_{i}\right)=x \cdot x_{i} κ(x,xi)=xxi; 线性核,主要用于线性可分的情况;
2 - 多项式核函数: κ ( x , x i ) = ( ( x ⋅ x i ) + 1 ) d \kappa\left(x, x_{i}\right)=\left(\left(x \cdot x_{i}\right)+1\right)^{d} κ(x,xi)=((xxi)+1)d; 多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但当多项式的阶数比较高时,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。
3 - 高斯(RBF)核函数 κ ( x , x i ) = exp ⁡ ( − ∥ x − x i ∥ 2 δ 2 ) \kappa\left(x, x_{i}\right)=\exp \left(-\frac{\left\|x-x_{i}\right\|^{2}}{\delta^{2}}\right) κ(x,xi)=exp(δ2xxi2) 高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,未知情况时,优先使用。
4 - sigmoid核函数 κ ( x , x i ) = tanh ⁡ ( η < x , x i > + θ ) \kappa\left(x, x_{i}\right)=\tanh \left(\eta<x, x_{i}>+\theta\right) κ(x,xi)=tanh(η<x,xi>+θ) 采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。
注意:核函数选择时,通常根据先验知识来选择符合数据分布的核函数;未知时,通常使用交叉验证的方法,来试用不同的核函数,误差最小的即为效果最好的核函数,或者也可以将多个核函数结合起来,形成混合核函数。
参考链接https://blog.csdn.net/batuwuhanpei/article/details/52354822

4 - GBDT 和 AdaBoost 区别

一些定义:GBDT(Gradient Boosting Decision Tree,梯度提升决策树)一种常用的 Ensemble Learning 算法; 本质也就是融合多个弱分类器进行决策, GBDT 使用的弱分类器就是 Decision Tree,而融合的方法叫做 Gradient Boosting。Adaboost算法是一种提升方法,也是Boosting 方法的代表,将多个弱分类器,组合成强分类器。
解答
关于GBDT与Adaboost的区别与联系,它们都属于boosting提升方法,只是损失函数不同:AdaBoost 是通过提升错分数据点的权重来定位模型的不足,而Gradient Boosting是通过梯度的计算来定位模型的不足。
参考链接https://zhuanlan.zhihu.com/p/31639299

5 - XGBoost 和 GBDT 的区别

一些定义:GBDT(Gradient Boosting Decision Tree,梯度提升决策树)一种常用的 Ensemble Learning 算法; 本质也就是融合多个弱分类器进行决策, GBDT 使用的弱分类器就是 Decision Tree,而融合的方法叫做 Gradient Boosting。XGBoost是GBDT算法的改进版,XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X (Extreme) GBoosted,两者都是boosting方法。
解答
1- 基分类器的选择:传统GBDT以CART(CART(classification and regression tree)分类回归树算法,既可用于分类也可用于回归。 分类树的输出是样本的类别, 回归树的输出是一个实数。)作为基分类器,XGBoost还支持线性分类器,这个时候XGBoost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。https://blog.csdn.net/AugustMe/article/details/111245004
2 - 二阶泰勒展开:传统GBDT在优化时只用到一阶导数信息,XGBoost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数;另外,XGBoost工具支持自定义损失函数,只要函数可一阶和二阶求导。
3 - 方差-方差权衡:XGBoost在目标函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出分数的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是XGBoost优于传统GBDT的一个特性。
4 - Shrinkage(缩减):相当于学习速率(xgboost中的)。XGBoost在进行完一次迭代后,会将叶子节点的权重乘上该系数,主要是为了削弱每棵树的影响,让后面有更大的学习空间。实际应用中,一般把eta设置得小一点,然后迭代次数设置得大一点。(补充:传统GBDT的实现也有学习速率)
参考链接https://cloud.tencent.com/developer/article/1387682
https://zhuanlan.zhihu.com/p/139523931

6 - K-Means 的迭代循环停止条件

一些定义:K-Means (k-平均算法)是发现给定数据集的 K 个簇的聚类算法, 之所以称之为 K-均值 是因为它可以发现 K 个不同的簇, 且每个簇的中心采用簇中所含值的均值计算而成.簇个数 K 是用户指定的, 每一个簇通过其质心(centroid), 即簇中所有点的中心来描述;聚类与分类算法的最大区别在于, 分类的目标类别已知, 而聚类的目标类别是未知的。
算法流程:
输入:聚类个数k,以及包含 n个数据对象的数据库。 输出:满足方差最小标准的k个聚类。
(1)从n个数据对象任意选择k个对象作为初始聚类中心
(2)计算每个对象与聚类中心的距离;并根据最小距离重新对相应对象进行划分
(3)重新计算每个聚类的均值作为新的聚类中心
(4)循环(2)到(3)直到每个聚类不再发生变化为止
解答
K-Means迭代循环停止条件可以有如下几个:
· 每个聚类内部元素不在变化,这是最理想的情况了。
· 前后两次迭代,J的值相差小于某个阈值。
· 迭代超过一定的次数。
参考链接https://www.cnblogs.com/pangxiaodong/archive/2011/08/23/2150183.html

7 - Bagging 和 Boosting 的区别

一些定义:Bagging(bootstrap aggregating 装袋算法)和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。
解答
Bagging和Boosting的区别:
1)样本选择上:Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的;Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重上:Bagging:使用均匀取样,每个样例的权重相等;Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数上:Bagging:所有预测函数的权重相等;Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算上:Bagging:各个预测函数可以并行生成;Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
参考链接https://blog.csdn.net/u013709270/article/details/72553282

8 - 为什么朴素贝叶斯被称为“朴素”?

一些定义:朴素贝叶斯(Naive Bayes)是一种简单但是非常强大的线性分类器:
P ( y i ∣ x 1 , x 2 , ⋯   , x d ) = P ( y i ) ∏ j = 1 d P ( x j ∣ y i ) ∏ j = 1 d P ( x j ) P\left(y_{i} \mid x_{1}, x_{2}, \cdots, x_{d}\right)=\frac{P\left(y_{i}\right) \prod_{j=1}^{d} P\left(x_{j} \mid y_{i}\right)}{\prod_{j=1}^{d} P\left(x_{j}\right)} P(yix1,x2,,xd)=j=1dP(xj)P(yi)j=1dP(xjyi)
解答
之所以被称为朴素,是因为它假设特征之间是相互独立的,但是在现实生活中,这种假设基本上是不成立的。那么即使是在假设不成立的条件下,它依然表现的很好,尤其是在小规模样本的情况下。但是,如果每个特征之间有很强的关联性和非线性的分类问题会导致朴素贝叶斯模型有很差的分类效果。
参考链接https://blog.csdn.net/xlinsist/article/details/51236454

9 - 决策树的ID3和C4.5介绍一下 ”?

一些定义:决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。
解答
ID3 算法是建立在奥卡姆剃刀(用较少的东西,同样可以做好事情)的基础上:越是小型的决策树越优于大的决策树。其核心思想就是以信息增益来度量特征选择,选择信息增益最大的特征进行分裂。算法采用自顶向下的贪婪搜索遍历可能的决策树空间(C4.5 也是贪婪搜索)。 其大致步骤为:
1) 初始化特征集合和数据集合;
2) 计算数据集合信息熵和所有特征的条件熵,选择信息增益最大的特征作为当前决策节点;
3) 更新数据集合和特征集合(删除上一步使用的特征,并按照特征值来划分不同分支的数据集合);
4) 重复 2,3 两步,若子集值包含单一特征,则为分支叶子节点。
ID3的缺点:
1)ID3 没有剪枝策略,容易过拟合;
2)信息增益准则对可取值数目较多的特征有所偏好,类似“编号”的特征其信息增益接近于 1;
3)只能用于处理离散分布的特征;
4)没有考虑缺失值。
C4.5 相对于 ID3 的缺点对应有以下改进方式:
1)引入悲观剪枝策略进行后剪枝;
2)引入信息增益率作为划分标准;
3)将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均4)数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作5)为该连续特征的二元离散分类点;
6)对于缺失值的处理可以分为两个子问题:
问题一:在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
问题二:选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
针对问题一,C4.5 的做法是:对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
针对问题二,C4.5 的做法是:将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
C4.5缺点
1)剪枝策略可以再优化;
2)C4.5 用的是多叉树,用二叉树效率更高;
3)C4.5 只能用于分类;
4)C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
5)C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。
参考链接https://zhuanlan.zhihu.com/p/85731206

10 - 随机森林处理缺失值的方法?

一些定义随机森林,指的是利用多棵树对样本进行训练并预测的一种分类器;简单来说,随机森林就是由多棵CART(Classification And Regression Tree)构成的。
相似度矩阵是指任意两个观测实例间的相似度矩阵,原理是如果两个观测实例落在同一棵树的相同节点次数越多,则这两个观测实例的相似度越高。
参考链接:https://www.cnblogs.com/hrlnw/p/3850459.html
解答:1) 暴力填补 :Python中的na.roughfix包提供简单的缺失值填补策略:
对于训练集中处于同一个类别下的数据,如果是类别变量缺失,则用众数补全,如果是连续变量,则用中位数。2) 相似度矩阵填补:RF的Python实现中,有一个rfImpute包,可以提供更加高层的缺失值填补。首先先用暴力填补法进行粗粒度填充。然后使用上述填补后的训练集来训练随机森林模型,并统计相似度矩阵(proximity matrix),然后再看之前缺失值的地方,如果是分类变量,则用没有缺失的观测实例的相似度中的权重进行投票;如果是连续性变量,则用相似度矩阵进行加权求均值。
上述投票方案迭代进行4~6次。
参考链接:https://www.jianshu.com/p/a4bf9224d66c

11 - 机器学习中的分类、回归和聚类模型有哪些

一些定义分类方法是一种对离散型随机变量建模或预测的且输出为类别的监督学习算法。
许多回归算法都有与其相对应的分类算法,分类算法通常适用于预测一个类别(或类别的概率)而不是连续的数值。
回归方法是一种对数值型连续随机变量进行预测和建模的监督学习算法;回归任务的特点是标注的数据集具有数值型的目标变量。也就是说,每一个观察样本都有一个数值型的标注真值以监督算法。
聚类是一种无监督学习任务,该算法基于数据的内部结构寻找观察样本的自然族群(即集群);因为聚类是一种无监督学习(即数据没有标注),并且通常使用数据可视化评价结果。如果存在「正确的回答」(即在训练集中存在预标注的集群),那么分类算法可能更加合适。
解答:分类方法: 1) Logistic 回归(正则化)2)分类树(集成方法)3)深度学习 4) 支持向量机 5) 朴素贝叶斯
回归方法:线性回归(正则化)2) 回归树(集成方法)3) 深度学习 4) 最近邻算法;
聚类方法:1) K 均值聚类 2) Affinity Propagation 聚类 3) 层次聚类(Hierarchical / Agglomerative)4) DBSCAN
参考链接:https://www.jiqizhixin.com/articles/2017-05-20-3

12 - CRF 的损失函数是什么?

一些定义:CRF(条件随机场)主要用于序列标注问题,可以简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将这个序列用CNN或者RNN进行编码后,接一个全连接层用softmax激活。
解答:CRF损失函数由真实路径得分和所有可能路径的总得分组成。在所有可能的路径中,真实路径的得分应该是最高的。
 Prob  RealPath  = P RealPath  P 1 + P 2 + … + P N \text { Prob }_{\text {RealPath }}=\frac{P_{\text {RealPath }}}{P_{1}+P_{2}+\ldots+P_{N}}  Prob RealPath =P1+P2++PNPRealPath 
参考链接:https://blog.csdn.net/u011984148/article/details/105154265/ https://www.cnblogs.com/callyblog/p/11284370.html

13 - 特征值和SVD的区别?

一些定义:矩阵的特征值分解考虑的是一个到自身的映射矩阵,奇异值分解考虑的矩阵对应的是到别的空间的映射;奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石;并且在PCA降维算法中也可以运用SVD,SVD的缺点是分解出的矩阵解释性往往不强。
解答:1)特征值是方阵所有,奇异值是所有矩阵。2)特征值可正可负可为0,奇异值是非负的。3)特征值对应着到自身空间的变换,及缩放尺度,而奇异值则表示着到另一个空间的变换
参考链接:https://www.jianshu.com/p/96572985c8ab
https://zhuanlan.zhihu.com/p/31386807

14 - L1和L2正则化的区别?

一些定义正则化(Regularization) 是机器学习中对原始损失函数引入额外信息,以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数+额外项,常用的额外项一般有两种,英文称作ℓ1−norm和ℓ2−norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数(实际是L2范数的平方)。
L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓惩罚是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归);下面是线性回归中的L1和L2正则项。
L 1 = min ⁡ w [ ∑ i = 1 N ( w T x i − y i ) 2 + λ ∥ w ∥ 1 ] L 2 = min ⁡ w [ ∑ i = 1 N ( w T x i − y i ) 2 + λ ∥ w ∥ 2 2 ] L1 = \min _{w}\left[\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2}+\lambda\|w\|_{1}\right] L2 = \min _{w}\left[\sum_{i=1}^{N}\left(w^{T} x_{i}-y_{i}\right)^{2}+\lambda\|w\|_{2}^{2}\right] L1=wmin[i=1N(wTxiyi)2+λw1]L2=wmin[i=1N(wTxiyi)2+λw22]
解答
1) L1正则化是指权值向量w中各个元素的绝对值之和,通常表示为 ∥ w ∥ 1 \|w\|_{1} w1;L2正则化是指权值向量w中各个元素的平方和然后再求平方根(可以看到Ridge回归的L2正则化项有平方符号),通常表示为 ∥ w ∥ 2 2 \|w\|_{2}^2 w22; 2) L1正则化可以使得参数稀疏化,即得到的参数是一个稀疏矩阵,可以用于特征选择(这相当于对模型进行了一次特征选择,只留下一些比较重要的特征,提高模型的泛化能力,降低过拟合的可能); L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合。
参考链接:https://www.cnblogs.com/zingp/p/10375691.html

15 - 为什么 L2 正则化可以防止过拟合?

一些定义:过拟合的时候,拟合函数的系数往往非常大,因为拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是抗扰动能力强。
解答:正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
参考链接:https://zhuanlan.zhihu.com/p/85630046
https://blog.csdn.net/jinping_shi/article/details/52433975

16 - 介绍一下KNN和Kmeans算法
解答KNN算法:监督学习中的一种分类算法,类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。;
而Kmeans算法则是非监督学习中的一种聚类算法,事先不知道数据会分为几类,通过聚类分析将数据聚合成几个群体,聚类不需要对数据进行训练和学习。
KNN原理:KNN算法是将预测点与所有点距离进行计算,然后保存并排序,选出前面K个值看看哪些类别比较多,则预测的点属于哪类。
KNN算法过程:
对未知类别属性的数据集中的每个点依次执行以下操作:
(1) 计算已知类别数据集中的点与当前点之间的距离;
(2) 按照距离递增次序排序;
(3) 选取与当前点距离最小的k个点;
(4) 确定前k个点所在类别的出现频率;
(5) 返回前k个点出现频率最高的类别作为当前点的预测分类。

其中,一般距离求解用欧氏距离,即 ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + … + ( x n − y n ) 2 \sqrt{\left(x_{1}-y_{1}\right)^{2}+\left(x_{2}-y_{2}\right)^{2}+\ldots+\left(x_{n}-y_{n}\right)^{2}} (x1y1)2+(x2y2)2++(xnyn)2 ;
而K的取值,一般是通过交叉验证(将样本数据按照一定比例,拆分出训练用的数据和验证用的数据,比如6:4拆分出部分训练数据和验证数据),从选取一个较小的K值开始,不断增加K的值,然后计算验证集合的方差,最终找到一个比较合适的K值。)、
K-Means算法原理:特点是类别的个数是人为给定的,如果让机器自己去找类别的个数,通过一次次重复这样的选择质心-计算距离后分类-再次选择新质心的流程,直到我们分组之后所有的数据都不会再变化了,也就得到了最终的聚合结果。
KNN算法过程:
(1)随机选取k个质心(k值取决于你想聚成几类)
(2)计算样本到质心的距离,距离质心距离近的归为一类,分为k类
(3)求出分类后的每类的新质心
(4)再次计算计算样本到新质心的距离,距离质心距离近的归为一类
(5)判断新旧聚类是否相同,如果相同就代表已经聚类成功,如果没有就循环2-4步骤直到相同

参考链接::https://zhuanlan.zhihu.com/p/122195108
https://zhuanlan.zhihu.com/p/30425907

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值