机器学习面试-常见题目

一、框架问题

1. 监督学习和无监督学习有什么不同?

监督学习用于训练有标记(label)的数据,主要实现分类、回归等任务;无监督学习训练无标记的数据,主要实现聚类的任务。

  • 有标记的数据:Y=X1+X2+X3+…+Xn;Y是分类、是标记label、是“监督者”
  • 无标记的数据:X1, X2, X3,…,Xn;变量在同一水平,没有“首领”

2. 什么是深度学习,它与机器学习算法之间有什么联系?

深度学习是与神经网络有关的机器学习的一个子集:如何使用反向传播和神经科学中的某些原理来更精确地建模大量未标记或半结构化数据。从这个意义上说,深度学习是一种无监督的学习算法,它通过使用神经网络来学习数据的表示。

3. 如何评估机器学习模型的有效性?

首先需要将数据分成训练集和测试集,或者使用给交叉验证方法分割。然后需要选择度量模型表现的metrics,如F1数、准确率、混淆矩阵等。更重要的是,根据实际情况你需要理解模型度量的轻微差别,以便于选择正确的度量标准。

4. 如何确保模型没有过拟合?

过度拟合的训练数据以及数据携带的噪音,对于测试数据会带来不确定的推测。有如下三种方法避免过拟合:

  1. 保持模型尽可能地简单:通过考量较少的变量和参数来减少方差,达到数据中消除部分噪音的效果。
  2. 使用交叉检验的手段如:k折交叉验证。
  3. 使用正则化的技术如:如果某些模型参数可能导致过度拟合,可以使用 LASSO 等正则化技术来惩罚这些参数。

5. 什么是核技巧,有什么用处?

核技巧指的是使用核函数后,在高维空间中不需要明确计算点的坐标,只需要计算数据的特征空间中的内积。核技巧有一个很有用的属性:让高维空间中点坐标的计算变得更容易。

许多算法都可以表示成这样的内积形式,使用核技巧可以保证低维数据在高维空间中运用算法进行计算。

二、评价指标问题

1. 什么是偏差(bias)、方差(variable)之间的均衡?

Bias 是由于使用过于简单的或者错误的算法模型导致的错误。它反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度,即算法本身的拟合能力。Bias 过大反应出模型可能欠拟合,难以具有较高的预测准确性,也很难将模型从训练集推广到测试集。

Variance 是由于算法过于复杂而产生的错误。它反映的是模型每一次输出结果与模型输出期望之间的误差,即模型的稳定性。反应预测的波动情况。Variance 过高会导致算法对训练数据的高纬度变化过于敏感,这样会导致模型过度拟合数据。从而模型会从训练集里带出太多噪音,这会对测试数据有一定的干扰。

Bias-Variance 的分解,本质上是通过添加偏差、方差和一点由噪声引起的不可约误差,来分解算法上的学习误差。从本质上讲,如果模型更复杂、且有更多变量,便将会失去一些 Bias,但会获得一些 Variance,这就是我们所说的权衡(trade-off)。这也是为什么我们在建模的过程中,很难使模型的偏差和方差同时降低。

2. 定义精度、召回率和准确率

有混淆据矩阵如下:
在这里插入图片描述

  • 召回率(recall)也称为查全率、真阳性率(真正率),它衡量的是在全部实际阳性事件中(Actual为positive的列和),正确预测结果所占的比例。 r = T P T P + F N = T P P r=\frac{TP}{TP+FN}=\frac{TP}{P} r=TP+FNTP=PTP
  • 精度(precision)也称为查准率,它衡量的是在全部阳性预测中(predicted为positive的行和),正确预测结果所占的比例。 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
  • 准确率(accuracy)就是在全部预测中,正确预测结果所占的比例。 a = T P + T N T P + T N + F P + F N a=\frac{TP+TN}{TP+TN+FP+FN} a=TP+TN+FP+FNTP+TN

3. 什么是ROC曲线和AUC值?

ROC曲线(Receiver Operating Characteristic Curve,接收者操作特征曲线),是一种用于衡量分类模型性能的图形工具,它通常用作代表模型灵敏度(真阳性)与触发误报特异度(假阳性)的概率。ROC曲线显示了真正例率(True Positive Rate,TPR)随假正例率(False Positive Rate,FPR)变化的情况,横轴是FPR,纵轴是TPR。

真正例率 T P R = T P T P + F P = T P P TPR=\frac{TP}{TP+FP}=\frac{TP}{P} TPR=TP+FPTP=PTP; 假正例率 F P R = F P T P + F P = F P P FPR=\frac{FP}{TP+FP}=\frac{FP}{P} FPR=TP+FPFP=PFP

ROC曲线越靠近左上角,说明模型的性能越好;而位于左下角的模型则表现为随机猜测,性能很差。
在这里插入图片描述

ROC应用:1. 模型评估:ROC曲线是评价二分类模型性能的重要标准,可以帮助比较不同模型在给定阈值下的表现。2. 阈值选择:通过ROC曲线下面积(AUC)来评估模型的整体性能,AUC越接近1,模型性能越高。选择合适的阈值使得FPR和TPR之间的权衡最理想。3. 模型调优:通过调整模型参数或使用不同的算法,优化ROC曲线的位置,提高模型的区分能力。4. 模型融合:在集成学习中,可以结合多个模型的ROC曲线来决定最终决策,提高整体性能。

AUC(ROC曲线下面积)评价参考

  • AUC = 1,是完美分类器,采用这个预测模型时,存在至少一个阈值能得出完美预测。但在绝大多数预测的场合,不存在完美分类器。
  • 0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC = 0.5,跟随机猜测一样(例:抛硬币),模型没有预测价值。
  • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

4. 什么是 F 1 F_1 F1数,怎么使用它?

F 1 F_1 F1分数是衡量模型性能的指标,它是精确率和召回率的调和平均数。 F 1 F_1 F1最大为1,最小为0,结果趋向于1是最好的,结果趋向于0是最差的。一些多分类问题的机器学习竞赛,常常将 F 1 s c o r e F_1score F1score作为最终测评的方法。
F 1 = 2 p r e c i s i o n ⋅ r e c a l l p r e c i s i o n + r e c a l l = 2 T P T P + F P ⋅ T P T P + F N T P T P + F P + T P T P + F N F_1=2\frac{precision\cdot recall}{precision+recall}=2\frac{\frac{TP}{TP+FP}\cdot \frac{TP}{TP+FN}}{\frac{TP}{TP+FP}+ \frac{TP}{TP+FN}} F1=2precision+recallprecisionrecall=2TP+FPTP+TP+FNTPTP+FPTPTP+FNTP

三、算法思路问题

1. KNN和 k-means 聚类由什么不同?

关键区别在于,KNN是一种监督分类算法(除了特征向量 X i X_i Xi外,还有标签 Y Y Y),而 k-means聚类是一种无监督的聚类算法(只有特征向量 X i X_i Xi)。

KNN(K-Nearest Neighbors)
训练数据包括样本的特征向量 X X X和标签 y y y k k k是由用户定义的常数,表示模型给新数据做分类时参考的样本数量。当一个没有标签的样本进入算法后,首先找到与它距离最近的 k k k个样本,根据这 k k k个样本出现最多的标签定义这个新样本的标签(多数表决法)。

距离的定义有很多方式,常见的为:

  1. 欧氏距离(两点间连线长度): d ( x , y ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + . . . + ( x n − y n ) 2 d(x, y) = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2 + ... + (x_n - y_n)^2} d(x,y)=(x1y1)2+(x2y2)2+...+(xnyn)2
  2. 曼哈顿距离(沿坐标轴方向移动距离之和): d ( x , y ) = ∣ x 1 − y 1 ∣ + ∣ x 2 − y 2 ∣ + . . . + ∣ x n − y n ∣ d(x, y) = |x_1 - y_1| + |x_2 - y_2| + ... + |x_n - y_n| d(x,y)=x1y1+x2y2+...+xnyn

k-means K均值聚类
k-means的核心是把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定。K代表的是K类,means代表的是中心。K-means的本质就是确定类别数K、和K类的中心点,当找到了这些中心点也就完成了k-means聚类。

k-means算法思路

  • step1 设置K个种子点(根据分布的先验概率估计K的值,种子之间距离尽量远)
  • step2 遍历每个点,将其归属为与之距离最近的种子点,这就是它的簇;
  • step3 遍历结束后,重新计算K个种子点的位置(簇中心点)
  • step4 重复 step2-3,直到K个种子点的位置不再改变

2. 生成模型与判别模型有什么区别?

生成模型将学习数据类别,而判别模型将简单地学习不同类别数据之间的区别。 举例说明:

任务:识别一个语音属于哪种语言。现在一个人和你说了一句话,你需要识别出他说的到底是汉语、英语还是法语等。
生成模型:学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你说话,你就可以知道他的语言对应什么语言;

判别模型:不去学习每一种语言,只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。

所以生成模型带的信息要比判别模型丰富,研究单类问题比判别模型灵活性强,模型可以通过增量学习得到,能用于数据不完整(missing data)情况。但是对于分类任务,判别模型通常优于生成模型。

  • 经典生成模型:朴素贝叶斯、混合高斯模型Gaussians、隐马尔可夫模型HMM、贝叶斯网络、马尔科夫随机场Markov random fields、深度信念网络DBN、隐含狄利克雷分布LDA、多专家模型、生成对抗网络。
  • 经典判别模型:感知机、决策树、逻辑回归、KNN、最大熵模型、SVM、Boosting、高斯过程、条件随机场CRF、CART(Classification and Regression tree)

3. 决策树的基本原理及如何剪枝?

决策树的学习目的是生成一课泛化能力强,处理未见示例能力强的分类树。其关键技术在于,在每一个当下如何选择最优分类属性,随着划分不断进行,我们希望每个节点包含的样本尽可能属于同一类别,即节点的纯度越来越高。关于最优属性的选择:

  • ID3决策树认为信息增益最大的的是最优属性

    信息熵 E n t ( D ) = − ∑ k = 1 ∣ K ∣ p k ⋅ l o g 2 p k Ent(D)=-\sum\limits_{k=1}^{{|K|}}p_k\cdot log_2p_k Ent(D)=k=1Kpklog2pk E n t ( D ) Ent(D) Ent(D)越小纯度越高
    信息增益 G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a)=Ent(D)-\sum\limits_{v=1}^{{V}}\frac{|D^v|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv) G a i n ( D , a ) Gain(D,a) Gain(D,a)越大说明用属性 a a a划分后的节点纯度越高
    信息增益对可取值数目较多的属性有所偏好,C4.5可以减少这种偏好可能带来的不利影响。

  • C4.5决策树从候选划分属性中找出信息增益高于平均水平的属性,再从其中选择信息增益率最高的作为最优属性(如果直接选取信息增益率最高的属性,会对可取值数目少的属性有所偏好)。

    G a i n r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain_ratio(D,a)=\frac{Gain(D,a)}{IV(a)} Gainratio(D,a)=IV(a)Gain(D,a),其中属性 a a a的固有值 I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ l o g 2 ∣ D v ∣ ∣ D ∣ IV(a)=-\sum\limits_{v=1}^{{V}}\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv

  • CART决策树认为基尼系数最小的是最优属性。

    数据集D的基尼系数 G i n i ( D ) = ∑ k = 1 ∣ K ∣ ∑ k ′ ≠ k p k p k ′ Gini(D) = \sum\limits^{|K|}_{k=1}\sum\limits_{k'\neq k}p_kp_{k'} Gini(D)=k=1Kk=kpkpk
    属性a的基尼系数 G i n i ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini(D,a)=\sum\limits_{v=1}^{V}\frac{|D^v|}{|D|}Gini({D^v}) Gini(D,a)=v=1VDDvGini(Dv)

剪枝是指在决策树出现过拟合问题时,为了降低模型复杂度、提高预测精度,去除预测能力较弱的分支。
修剪可以自下而上或自上而下进行:

  • 自上而下,预剪枝,在决策树生成过程中,对每个节点在划分前进行估计,若划分后不能提升整体性能则不划分。能不划分就不划分,容易出现欠拟合问题。
  • 自下而上,后剪枝,在决策树生成后,自底向上对非叶节点进行考察,若将该节点对应的子树替换成叶节点能提升泛化能力,则将该子树替换成叶节点。能不剪就不剪,容易出现过拟合问题。
    方法包括减少错误修剪和成本复杂度修剪。

减少错误修剪可能是最简单的版本:替换每个节点。如果不降低预测精度,则保持修剪。虽然很简单,但这种启发式方法实际上非常接近于一种可以最大限度地优化准确性的方法。

四、经典统计问题

1. 概率和似然有什么区别?

概率和似然都是指可能性,但在统计学中,概率和似然有截然不同的用法。概率描述了已知参数时的随机变量的输出结果;似然则用来描述已知随机变量输出结果时,未知参数的可能取值。

例如,对于“一枚正反对称的硬币上抛十次”这种事件,我们可以问硬币落地时十次都是正面向上的“概率”是多少;而对于“一枚硬币上抛十次,我们则可以问,这枚硬币正反面对称的“似然”程度是多少。

概率(密度)表达给定 θ θ θ下样本随机向量 X = x X=x X=x的可能性,而似然表达了给定样本 X = x X=x X=x下参数 θ 1 θ_1 θ1(相对于另外的参数 θ 2 θ_2 θ2)为真实值的可能性。我们总是对随机变量的取值谈概率,而在非贝叶斯统计的角度下,参数是一个实数而非随机变量,所以我们一般不谈一个参数的概率,而说似然。

4. 第一类误差和第二类误差有什么区别?

第一类误差指的是失真错误,第二类指的是纳伪错误。两类错误的出现概率此消彼长,难以同时降低。
假设检验的 H 0 H_0 H0一般都假设事件为真(置信水平 α = 0.05 \alpha=0.05 α=0.05),如果:

  1. 事件实际为真,但是 p < α p<\alpha p<α,拒绝了原假设 H 0 H_0 H0,认为事件是假的。视真为假,与实际情况不符,故称作失真错误,这是第一类误差;
  2. 事件实际为假,但是 p > α p>\alpha p>α,没有拒绝原假设,认为无理由判定事件是假的。视假为真,与实际不符,故称纳伪错误,这是第二类误差。

2. 什么是贝叶斯定理?它在机器学习环境中如何有用?

贝叶斯定理描述了当我们不能准确知悉一个事物的本质时,便可以依靠与事物特定本质相关的事件出现的多少去判断其本质属性的概率。 它给出了已知先验知识下,事件的后验概率。

在数学上,它表示为条件样本的真阳性率除以总体的假阳性率和条件的真阳性率之和。假设你在流感测试后有60%的机会真的感染了流感,但是在感染了流感的人中,50%的测试都是错误的,总人口只有5%的机会感染了流感。在做了阳性测试后,你真的有60%的机会患上流感吗?

贝叶斯定理说不,它说有一个(0.60.05)(条件样本的真阳性率)/(0.60.05)(条件样本的真阳性率)+(0.5*0.95)(人群的假阳性率)= 5.94%的机会感染流感。

贝叶斯理论是机器学习一个分支的幕后操纵大佬,所以在考虑要准备一个机器学习的面试的时候一定不能忽略这个知识点。

3. 为什么我们要称“朴素”贝叶斯?

尽管 Naive Bayes 具有实际应用,特别是在文本挖掘中,但它被认为是“天真的”,因为它假设在实际数据中几乎不可能看到:条件概率被计算为组件个体概率的纯乘积。 这意味着特征的绝对独立性 – 这种情况在现实生活中可能永远不会遇到。

正如 Quora 上一些评论者所说的那样,Naive Bayes 分类器发现你喜欢泡菜和冰淇淋之后,可能会天真地推荐你一个泡菜冰淇淋。

4. L1、L2正则之间有什么不同?

L2正则,对应的是加入2范数,使得对权重进行衰减,从而达到惩罚损失函数的目的,防止模型过拟合。保留显著减小损失函数方向上的权重,而对于那些对函数值影响不大的权重使其衰减接近于0。相当于加入一个gaussian prior。

L1正则 对应得失加入1范数,同样可以防止过拟合。它会产生更稀疏的解,即会使得部分权重变为0,达到特征选择的效果。相当于加入了一个laplacean prior。

五、应用及主观问题

1. 如何处理一个不平衡的数据集?

例如,当有一个分类测试,并且90%的数据都在一个类中时,就会产生一个不平衡的数据集。这就导致了问题:如果对其他类别的数据没有预测能力,那么90%的精度然而可能会出现偏差!下面是一些克服困难的策略:

  1. 收集更多数据,甚至数据集中的不平衡。
  2. 对数据集重新取样以纠正不平衡。
  3. 在你的数据集中尝试一个不同的算法。
    这里重要的是,对不平衡数据集可能造成的损害以及如何平衡具有敏锐的感知。

2. 举个例子,说明使用集成学习会很有用。

集成学习通过组合一些基学习算法来优化得到更好的预测性能,通常可以防止模型的过拟合使模型更具有鲁棒性。

可以列举一些集成学习的例子,如bagging、boosting、stacking等,并且了解他们是如何增加模型预测能力的。

3. 如何处理数据集中丢失或损坏的数据?

可以在数据集中找到丢失/损坏的数据,然后删除这些行或列,或者决定用另一个值替换它们。

在pandas中,有两种非常有用的方法:isNull()和dropna(),这两种方法可以帮助查找缺少或损坏数据的数据列,并删除这些值。如果要用占位符值(例如0)填充无效值,可以使用fillna()方法。

4. 你在机器学习方面有研究经验吗?

与最后一点相关的是,大多数为机器学习职位招聘的组织都会寻找在该领域的正式经验。由该领域的先行者共同撰写或监督的研究论文,可以使你在被雇佣和不被雇佣之间产生差异。要确保已经准备好了一份关于研究经验和论文的总结,如果不准备的话,还要对的背景和缺乏正式研究经验做出解释。

5. 你最喜欢的机器学习模型的用例是什么?

这里我们拿 Quora 上面的一个帖子为例,帖子在这里:https://bit.ly/2MGYyQY

上面的 Quora 帖子里包含一些示例,例如决策树,它根据智商分数将人们分类为不同的智力层次。确保心里有几个例子,并描述产生共鸣的地方。重要的是要对机器学习的实现方式表现出兴趣。

6. 您通常在哪里寻找数据集?

真正热衷于机器学习的人将会独自完成侧面项目,并且很清楚那些伟大的数据集是什么。 如果遗失任何内容,请查看 Quandl 获取的经济和财务数据,以及 Kaggle 的数据集集合,以获取其他优秀列表。

7. 模型的精度和模型的性能哪个对你更重要?

这个问题考察对机器学习模型性能细微差别的理解,机器学习面试往往着眼于细节。有些模型具有更高的准确度,而在预测能力方面表现较差,这有什么意义?

好吧,这一切都与模型的准确性仅仅是模型性能的一个子集有关,在这一点上,有时是一个误导。例如,如果想在一个拥有数百万样本的海量数据集中检测欺诈行为,那么一个更准确的模型很可能会预测,如果只有极少数的案例是欺诈行为,那么根本就不会有欺诈行为。然而,对于预测模型来说,这是无用的——一个旨在发现声称根本没有欺诈的欺诈的模型!这样的问题可以说明我们已经理解模型的准确性并不是模型性能的全部。.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值