算法基础:
1.有一个具有缺失值的数据集,其沿着中位数的1个标准偏差扩散。有多少数据不受影响?
答: 因为,数据分布在中位数,我们假设它是正态分布。
我们知道,在正态分布中,约68%的数据位于与平均值(or mode, median)1个标准差,这使得大约有32%的数据不受影响。因此,约32%的数据不会受到缺失值的影响。
2.为什么Naive Bayes是‘朴素’的?
答: 因为它假设数据集中的所有特征是同等重要的,并且相互独立。
3.在Naive Bayes算法下,解释先验概率、似然性、边际似然性?P(Y|X)
答:
先验概率P(X):是因变量在数据集中的比例。没有进步一信息的情况下,这是对类别的最接近的猜想。例如:在数据集中,因变量是二进制(1和0)。1(垃圾邮件)的比例为70%,0(非垃圾邮件)的比例为30%。因此,我们可以估计有70%的可能性将任何新电子邮件归类为垃圾邮件。
似然性P(Y|X):Likelihood是在给定的其他变量存在下将给定观测值分类为1的概率。例如:在以前的垃圾短信中使用“免费”一词的可能性是可能的。
边际似然性:Marginal likelihood是,“免费”一词在任何消息中使用的概率,P(Y|X1) + P(Y|X2) + P(Y|X3) + ... + P(Y|XN);
4.k-NN与k-Means聚类有什么不同?
答:kmeans是无监督的,而kNN是有监督的。kmeans是聚类算法,而kNN是一种分类(回归)算法。
kmeans算法:将数据集划分为簇,并且簇中的点是同类的并且彼此接近。该算法试图在这些簇之间保持足够的可分离性。由于无监督的性质,簇没有标签。
kNN算法:试图基于其k个邻居对未标记的实例进行分类。kNN也属于“懒惰学习”。因此,它不使用训练数据对未知数据集进行分类。
5.TPR和Recall有什么关系?
答:TPR就是Recall。TPR = Recall = TP/(TP + FN), FPR = FP/(FP + TN)。
TPR:将正样本划分为正样本的概率;
FPR:将负样本划分为正样本的概率;
6.在处理数据集时,如何选择重要变量?解释你的方法。
答:
1). 在选择重要变量之前删除相关变量(PCA之前也要做);
2). L1正则化技术;
3). 测量可用特征集的信息增益,并相应地选择top-n;
4). 使用随机森林,Xgboost,绘制变量重要性图表;
5). 使用线性回归并根据p值选择变量;
7.协方差和相关性有什么区别?
答:相关性是协方差的标准化形式。
协方差很难比较。例如:如果我们计算工资($)和年龄(年)的协方差,我们将得到不同的协方差,因为它们具有不等的尺度而无法进行比较。为了对抗这种情况,我们计算相关性以获得介于-1和1之间的值,而不管它们各自的比例。
8.两者都是基于树的算法,随机森林与GBM有何不同?
答:随机森林是bagging策略,而GBM是boosting。
Bagging:使用随机采样,将数据集分成n个样本集。然后每个模型使用独立的学习算法,在所有样本上构建模型。之后,使用投票或平均来组合结果预测。Bagging是并行的。
Boosting:算法每一轮结束,给误分类的样本赋予更高的权重,以便于他们在下一轮能够被纠正。算法一直执行,直到达到预定步数或达到预定的准确度为止。
- a. 随机森林通过降低方差,来提高模型的准确度。树之间是不相关的,使方差减少程度最大化;
- b. GBM通过降低模型中的偏差和方差,来提高模型的精度;
9.运行二分类树算法很容易。您知道树分裂是如何发生的,即树如何决定在根节点和后续节点分割哪个变量?
答:可以通过“信息增益”,“信息增益率”,“Gini指数”来决定根节点的分割变量。选择能让子节点纯度最高的属性作为切分变量。
ID3: g(D,A) = H(D) - H(D|A)
C4.5: gr(D,A) = g(D,A) / HA(D)
CART: gini(p) = ∑pk(1-pk) = 1 - ∑pk^2
10.考虑到众多的机器学习算法,给定一个数据集,您如何决定使用哪一个?
答:机器学习算法的选择完全取决于数据类型。
1. 如果给出的数据集具有线性,则线性回归将是最佳算法;
2. 如果您决定使用图像,音频,那么神经网络将帮助您构建一个强大的模型;
3. 如果数据包含非线性相互作用,那么应该选择boosting或bagging算法;
4. 如果业务需求是构建可以部署的模型,那么我们将使用回归或决策树模型(易于解释和解释)而不是像SVM,GBM等黑盒算法。
线性 or 非线性:
1.在处理时间序列数据时,如何构建高精度模型?您从决策树算法开始,因为您知道它在各种数据上都能很好地工作。之后,您尝试了时间序列回归模型,并且比决策树模型具有更高的准确性。这会发生吗?为什么?
答: 因为时间序列数据具有线性关系,而决策树更适合处理具有非线性关系的数据,不能很好地处理线性关系。
时间序列数据已知具有线性。另一方面,决策树算法是能够最好地检测非线性相互作用的。决策树之所以不能提供robust的预测,是因为它不能像回归模型一样很好的映射出线性关系。因此,我们知道,在给定数据集满足线性假设的条件下,一个线性的回归模型可以提供稳健的预测结果。
2.在分析模型后,您的经理已经告知您的回归模型正在遭受多重共线性。你该如何检查这个问题?在不丢失任何信息的情况下,可以构建更好的模型吗?
答:为了检查多重共线性,可以计算方差膨胀因子来检查多重共线性的存在,或者使用相关矩阵来识别变量之间的相关性【设阈值】。
我们可以创建一个相关矩阵来识别和删除相关性超过75%的变量(确定阈值是主观的)。另外,我们可以使用计算VIF(方差膨胀因子)来检查多重共线性的存在。
VIF <= 4,表明没有多重共线性;
VIF >= 10,表示存在严重的多重共线性;
此外,我们可以使用容差作为多重共线性的指标。
但是,删除相关变量可能会导致信息丢失。为了保留这些变量,我们可以使用带惩罚项的回归模型,如Ridge或Lasso回归。此外,我们可以在相关变量中添加一些随机噪声,以使变量彼此不同。但是,添加噪声可能会影响预测精度,因此应谨慎使用此方法。
3.如果特征维度大于样本数,为什么最小二乘不适用?哪种技术最好用?为什么?
答:在高维数据中,我们不能使用经典回归技术,因为它们的假设往往会不成立【存在完全共线性,多重共线性问题】。
我们不能再计算唯一的最小二乘系数估计,方差变为无穷大,因此“普通最小二乘法”无法使用。
为了对抗这种情况,我们可以使用像Lasso,LARS,Ridge这样的惩罚回归方法,它可以缩小系数以减少方差。准确地说,Ridge Regression在最小二乘估计具有较高方差的情况下效果最佳。
数据降维:
1.您将获得一个包含1000列和100万行的训练数据集。数据集基于分类问题。经理要求您减少此数据的维度,以便减少模型计算时间。您的机器有内存限制。你会怎么做?(你可以自由地做出实际的假设)
答: 在有限的记忆机器上处理高维数据是一项艰巨的任务,你的面试官会充分意识到这一点。以下是可用于解决此类情况的方法:
1. 由于我们有较低的RAM,我们应该关闭我们机器中的所有其他应用程序;
2. 对数据集进行随机抽样,创建一个较小的数据集;
3. 数据降维,我们可以分离数值和分类变量,并删除具有相关性的变量。
a. 对于数值变量,我们将使用相关性;
b. 对于类别变量,我们将使用卡方检验;
4. 使用PCA选择可以解释数据集中最大方差的主成分【方差最大的方向】;
5. 使用在线学习算法进行预测,例如Vowpal Wabbit;
6. 使用随机梯度下降SGD;
7. 应用我们的业务理解来估计所有的预测因子都会影响的响应变量。但是,这是一种直观的方法,未能识别有用的预测因子可能会导致信息的重大损失;
2.数据集包含许多变量,其中一些变量高度相关且您对此有所了解。您的经理要求您运行PCA。你会先删除相关变量吗?为什么?
答: 丢弃相关变量对PCA有显著的影响。因为在相关变量的存在下,由特定成分解释的方差会膨胀。
例如:在数据集中有3个变量,其中2个变量是相关的。如果在这个数据集上运行PCA,第一主分量将表现两倍的方差(相比于删去相关变量的数据集)。
此外,增加相关变量,使PCA将更加关注这些变量,这是误导性的。
过拟合处理:
1.你的模型正遭受低偏差和高方差。您应该使用哪种算法来解决它?为什么?
答: 低偏差、高方差说明模型在训练数据上产生了过拟合的现象,模型泛化能力很差。
在这种情况下,我们可以使用bagging算法(如随机森林)来解决高方差的问题。Bagging方法通过重复随机采样,将一个数据集分割成多个子集,然后,单个学习算法使用这些子集生成一组模型。之后,使用投票(分类)或平均(回归)方法来组合模型预测。
此外,为了处理高方差,可以通过以下几种方式:
1. 使用regularization正则化技术,使较高的模型参数受到惩罚,降低模型复杂性【避免过拟合】;
2. 对数据降维,可能是数据维度太高,模型无法找到有用的特征;
*基于偏差的误差*:所谓基于偏差的误差是,我们模型预期的预测与我们将要预测的真实值之间的差值。偏差是用来衡量我们的模型的预测同真实值的差异。
*基于方差的误差*:基于方差的误差描述了一个模型对给定的数据进行预测的可变性。比如,当你多次重复构建完整模型的进程时,方差是,在预测模型的不同关系间变化的多少。
- 方差:是形容数据分散程度的,算是“无监督的”,客观的指标;
- 偏差:形容数据跟我们期望的中心差得有多远,算是“有监督的”,有人的知识参与的指标。
- 越复杂的模型偏差越小,而方差越大。
2.你现在急于建立一个高精度的模型。因此,您构建了5个GBM模型,认为增强算法可以达到预期目标。不幸的是,这些模型的表现都不如基线分数。最后,您决定将这些模型组合在一起。虽然,已知整体模型会恢复高精度,但您很遗憾。你在哪里错过的?
答: 模型之间可能存在相关性,所有模型对分类提供了相同的信息,导致准确率没有提升。
正如我们所知,集成学习是将弱学习器组合成强分类器。但是,只有当分类器间不相关时才会显示出良好的性能。因为我们使用了5个GBM模型,但准确度并没有改进,说明这些模型是具有相关性的。如果模型间存在相关性,则这些模型提供了相同的信息,所以对分类贡献相同。
因此,集成学习是建立在弱分类器之间是不相关的前提下。
3.什么情况下Ridge Regression要比Lasso Regression更适合?
答:在存在少量具有中/大影响的变量的情况下,使用Lasso Regression。在存在许多具有中/小效应的变量的情况下,使用Ridge Regression。
从概念上讲,Lasso同时进行特征选择和参数收缩,而Ridge回归只进行参数收缩。此外,Ridge回归在最小二乘估计具有较高方差的情况下效果最佳。
数据处理问题:
1.在有关癌症检测的数据集,已经构建了一个分类模型,准确率达到了96%。为什么你不应该对你的模特感到满意?你还能做什么?
答: 因为癌症检测是类别不均衡问题,类别不均衡问题不能用“准确率”评价模型性能。
因为96%可能只能正确地预测没得病的人,但是我们实际关注的是少数的4%(真正被诊断患有癌症的人)。
因此,为了评估模型性能,我们应该使用Sensitivity(真正例率),Specificity(真假例率),F度量来确定分类器的类别性能。如果发现少数类别表现不佳,我们可以采取以下步骤:
1. 使用欠采样,过采样,或者SMOTE来使得数据平衡;
2. 利用AUC-ROC曲线进行概率校准,寻找最优阈值来改变预测阈值;
3. 为类别分配权值,使得少数类得到权值更大;
4. 使用数据异常检测,剔除异常值;
2.在时间序列【数据集】上,应该使用怎样的交叉验证?k-fold还是LOOCV?
答:这两个都不行。
在时序数据集中,k-fold很麻烦,因为有些模式可能存在于第4年、第5年,但是不存在于第3年,重新采样数据集会分离这些趋势,然而我们可能是用后续的数据作为验证,这是不正确的。
但是,我们可以采用前向链策略的5-fold:
- fold 1: training [1], test[2]
- fold 2: training [1, 2], test[3]
- fold 3: training [1, 2, 3], test[4]
- fold 4: training [1, 2, 3, 4], test[5]
- fold 5: training [1, 2, 3, 4, 5], test[6]
3.您获得的数据集包含超过30%缺失值的变量?比方说,在50个变量中,8个变量的缺失值高于30%。你将如何处理它们?
答:可以通过如下手段处理缺失值:
1. 为缺失值指定一个唯一类别,谁知道缺失值可能会破译某些趋势;
2. 直接移除有缺失值的变量;
3. 基于距离的替换,kNN;
4. 基于密度的积累,密度聚类、变色龙等;
5. 基于重数的替换;
6. 对缺失值进行回归预测;
4.您正在处理分类问题。出于验证目的,您已将训练数据集随机抽样到训练和验证中。由于您的验证准确性很高,因此您确信您的模型能够在看不见的数据上工作得非常好。但是,在测试精度不佳后会感到震惊。什么地方出了错?
答:在分类问题中,应该使用分层抽样,而不是随机抽样。随机抽样无法保证类别均衡。
5.在k-means或kNN中,我们使用欧氏距离来计算最近邻居之间的距离。为什么不用曼哈顿距离?
答:我们不使用曼哈顿距离,因为它只计算水平或垂直距离,它有尺寸限制。
另一方面,欧几里德度量可用于任何空间来计算距离。由于数据点可以存在于任何维度,因此欧几里德距离是更可行的选择。
6.什么时候在机器学习中需要regularization?
答:当模型开始过拟合/欠拟合时,正规化变得必要。
该技术引入了用于引入具有目标函数的更多特征的成本项。因此,它试图将许多变量的系数推到零,从而减少成本项。这有助于降低模型复杂性,以便模型可以更好地预测(泛化)
7.您对Bias Variance的trade off有何看法?
答:任何模型出现的错误都可以用数学方法分解为三个部分。
以下是这些组件:
error = bias² + variance + irreducible_error
偏差误差:量化预测值与实际值的不同。高偏差误差意味着我们有一个表现欠佳的模型;
方差误差:量化了对同一观察的预测如何彼此不同。高方差=过拟合,并且在训练之外的任何观察中都表现不佳。