机器学习面试题

 

Q1:给定一个大小为1000列,100,000,000行的基于分类问题的训练集。你的经理要求你通过降低数据的维度来减少模型计算时间。你的计算机内存有限。你应该如何做?(你可以做一些实际的假设)

Answer:

  1. 由于计算机内存有限,首先应该关闭计算机上的所有应用,包括浏览器,使机器可用内存最大化。
  2. 对数据集进行随机采样。这意味着可以得到一个更小的数据集,比如,有1000个变量和300000行,然后进行计算。
  3. 为了降低维度,可以把数字变量和类别变量分开,并去除相关变量。对于数字变量,使用相关系数,对于类别变量,使用卡方检验(chi-square test)。
  4. 利用PCA方法挑选出可以解释数据集中最大方差的成分。
  5. 可以使用在线学习算法,如Vowpal Wabbit。
  6. 利用随机梯度下降算法建立一个线性模型。
  7. 我们也可以利用经验来估计哪一个预测器(predictors)可以影响因变量。然而,这是一个直观的方法,错误的估计出有用的预测器将导致严重的信息损失。

Q2:在PCA中旋转变换是必要的吗?如果有必要,为什么?如果不旋转这些成分,将会发生什么?

Answer:有必要。需要旋转变换(正交的)是因为它能够最大化了变量之间的差异。主成分分析的初衷就是选择更少的成分(而不是特征)使得原始空间的数据投影到变换后的空间具有较大的方差。通过旋转,成分之间的相对位置不变,而仅仅是改变了点的坐标。

如果不旋转,PCA的作用就减弱了,我们也需要选择更多的成分来解释方差。

Q3:假设有一个癌症检测的数据集。你建立了一个分类模型,并且得到了96%的精度。为什么你不应该为此模型的表现感到高兴?你还可以做些什么改进?

Answer:癌症检测结果是一种不平衡的数据(Imbalance data)。在一个不平衡的数据集中,不应该把精度作为衡量性能好坏的指标,因为96%的精度可能意味着正确预测多数类别,但是我们感兴趣的类别是少数类别(4%),这些代表了实际被检测为患有癌症的人群。因此,为了评估模型的性能,我们应该使用TP(True Positive Rate)、TN(True Negative Rate)和F等指标衡量模型分类精度。如果少数类别分类性能表现的很差,可以采取以下措施:

  1. 使用欠采样、过采样和SMOTE算法是数据平衡化;
  2. 通过Probability Calibration方法选择合适的预测阈值,并且使用AUC-ROC曲线寻找最优阈值;
  3. 对类别添加权重,以保证少数类别具有更大的权重;
  4. 也可以使用异常检测方法。

Q4:为什么朴素贝叶斯是“朴素”的?

Answer:“朴素”是因为它假设了数据集中的所有特征是同等重要的并且是条件独立的。然而,这是一个很强的假设,在实际情况中,这个假设通常很难严格成立。

Q5:解释朴素贝叶斯算法中的先验概率、似然和边缘似然概念?

Answer:先验概率代表了数据集中因变量的比例,它是指你不依靠额外的信息能做出最有可能的类别猜测。比如,在一个垃圾邮件分类的数据集中,因变量是二进制的(0和1),1(垃圾邮件)的比例是70%而0(非垃圾邮件)的比例是30%,据此,我们可以估计一个新的邮件有70%的可能是垃圾邮件。

似然是指存在其他变量的情况下,把一个给定的观测分类为1的概率。比如,“FREE”这个词出现在垃圾邮件中的概率就是似然。边缘似然是“FREE”出现在任何邮件中的概率。

Q6:你在处理一个时间序列数据集。你的经理要求你建立一个高精度模型,开始你是用了决策树算法,因为你知道他在所有的数据上表现的还算不错。可是后来你尝试了一个时间序列回归模型并且得到了比决策树更高的精度。可能发生上面的情况吗?为什么?

Answer:时间序列数据是线性的。然而,决策树算法在非线性的情况下具有最好的表现。决策树不具有鲁棒性是因为它不能够像回归模型那样很好的映射线性关系。因此,我们知道线性回归模型对于具有线性假设的数据集有着更好的预测效果。

Q7:现在有一个项目是要帮助一家食品快递公司赚更多的钱。问题是,公司的快递团队无法按时配送食物,结果客户很不高兴,为了让他们高兴,他们决定终止免费配送服务。那种机器学习算法可以帮助他们?

Answer:你一定在大脑中快速搜寻机器学习算法的列表,但是请等等,这个问题考察的是机器学习的基本原理。

这不是一个机器学习的问题,这是一个路径优化问题。机器学习问题需要包含3件事:

  1. 要有一个模式;
  2. 你不能通过数值方法解决它(即使是写出一个多项式);
  3. 你需要有数据。

记得通过这三个要素来判定是否可以使用机器学习方法解决一个实际问题。

Q8:你的模型现在表现出低偏差和高方差。你应该使用什么方法解决?为什么?

Answer:当模型的预测值接近实际值时会出现低偏差的情况,换言之,模型对训练集合的分布拟合的很好,这看起来很不错,但是实际上这样的模型泛化能力很弱。这意味着,当把这个模型用在一个它从未“看到”过的数据上时,它的表现会让人很失望。

在这种情况下,我们可以使用Bagging算法(类似随机森林)来解决高方差的问题。Bagging算法把一个数据集分成若干个通过随机采样得到的子集,然后,在每个自己上训练一个基分类器,最后对训练过的分类器进行投票,将测试样本指派到得票最高的类中。

此外,也可以通过如下手段解决高方差的问题:

  1. 使用正则化方法降低模型复杂度;
  2. 使用变量重要性最高的n个特征。使用数据集中的所有变量可能导致算法很难找到有意义的信号。

你可能感兴趣的:(机器学习,机器学习面试题)