【入门必读】40个 机器学习/数据科学创业公司的面试问题
本文提到的40个问题需三思而后答,它将直接检验你在机器学习/数据科学方面的基础功。
BigQuant 人工智能量化投资平台 涵盖众多机器学习深度续学习优质资源帖,集成了众多深度学习/机器学习开源框架,是一站式的python+机器学习+量化投资平台,更多内容可以前往BigQuant进一步查看
目前看来,机器学习是下一次工业革命的驱动力。这意味着有许多创业公司正在寻找数据科学家。还有什么比这个职位称得上是一个更好的职业开端呢?
然而,成为数据科学家并非易事。显然你需要为自己的想法、团队和公司的梦想感到激动不已,你也需要知道在前路上需要解决的困难技术问题。你需要先询问:这个创业公司做什么,他们提供咨询吗?他们做机器学习产品吗?在准备面试前找出这些问题的答案。
为帮助你准备下一次面试,我准备了也许会在面试中遇到的40个问题的列表,如果你能回答并理解这些问题,你会在面试中打一个漂亮仗。
注意:回答这些问题的关键是-对机器学习和相关统计概念有坚固扎实的理解
机器学习的面试问题
Q1:某训练数据集拥有1000列和1百万行,该数据集基于一个分类问题。你的经理要求你对数据集进行降维处理以减少计算时间。电脑也具有内存限制。你会怎么做?你可以自由做出实际假设。
回答:在有限的内存中处理高维数据是一个费力的工作,你的面试官对此应该有深刻的认识。依照以下方式,你可以解决这个问题:
1. 因为RAM比较小,电脑上其他应用程序应该关闭,包括浏览器,以便大多数内存可以得到应用。
2. 随机抽取一些数据集样本,得到一个更小的数据集,例如,1000列和30万行的大小,以此进行计算。
3. 为了降维,数值变量和分类变量可以被分开,然后移除相关变量。对于数值变量,进行关联性分析;对于分类变量,做卡方检验。
4. 使用PCA,挑选可以解释最大方差的成分。
5. 使用在线学习算法,比如Vowpal Wabbit (在Python中可用)是一个可行的选项。
6. 构造一个使用随机梯度下降的线性模型也很有用。
7. 利用商业理解去估计哪些预测器可以影响到因变量。但是这依赖于直觉,如果不能找到有用的预测器,能会造成信息的大量丢失。
Q2:在PCA中,转置是必要的吗?如果是,为什么?如果你不转置,会发生什么?
回答:是的,转置(正交)是必须的,因为可以最大化成分方差的差值,使得成分更容易解释。PCA的目的就在于此:选择更少的成分或者特征来解释数据集的最大方差。通过转置,成分之间的相对位置不改变,只改变数据点的实际坐标。
如果不转置成分,PCA的效果减弱,我们需要选择更多的成分来解释数据集中的方差。
学习更多PCA知识。
Q3:现有数据集,里面有遗失数据,处于平均值左右1个标准差范围。请问多少百分比数据未受影响,为什么?
回答:本题提供了足够的线索。数据围绕着均值分布。假设为正态分布,在该分布中,68%左右的数据分布在1个标准差范围内,其余32%数据未受影响。所以32%的数据未受影响。
Q4:分析一个癌症检测的数据集,你已经建立了分类模型,达到96%的精度,你为何对你的模型性能不满意?你可以做什么?
回答:如果已经处理了足够的数据集,你应该能够从非均衡数据中推论出癌症结果。在非均衡数据集中,精度不应该是性能的评判标准。因为96%可能仅仅是预测多数类的准确度,但我们感兴趣的是少数类(4%),人们实际被确诊为癌症的那部分类。因此,为了评估模型的性能,我们应该使用灵敏度(真正率)、特效度(真负率),F 指标来衡量分类器的分类性能。如果少数类效果被认为不好,我们可以采取以下措施:
1. 使用欠采样,过采样或者SMOTE使数据均衡。
2. 通过做可能性校准调整预测的临界值,通过AUC-ROC曲线找到最优临界值。
3. 对类加权重所以少数类可以获取更大的权重。
4. 使用异常检测。
学习更多非均衡分类知识
Q5: 为什么朴素贝叶斯这么“简单幼稚”?
回答:朴素贝叶斯这么“幼稚”是因为假设所有数据集中的特征都一样重要且相互独立。但在实际生活中假设不成立。
Q6:解释朴素贝叶斯算法中的先验概率,似然和边际似然
回答:先验概率是数据集中相关变量(两个之间)比率。这是不依靠其他信息,对类做出的最可能猜想,比如,在一个数据集中,相关数据是成对的(1或者0),1(垃圾邮件)的百分比是70%,0(不是垃圾邮件)的百分比是30%。因此,我们可以估算有70%概率新的邮件会被标记为垃圾邮件,这就是先验概率。
似然是指在其他一些参数存在条件下,将给定观察分类为1 的可能性。例如,似然是指单词“Free”在垃圾邮件中被使用的概率。边际似然是指单词“Free”在任何邮件中被使用的概率。
Q7:处理一个时间序列数据,你的经理要求你构造一个高精度的模型。你从决策树算法开始,因为它可以在多种数据上工作非常好。然后尝试了一个时间序列回归算法,得到了比决策树模型更高的精度。这可能吗,为什么?
回答:时间序列数据已知包含线性关系。从另一个方面来说,一个决策树算法已知在检测非线性关系上工作效果最好。决策树不能提供稳定预测的原因是不能像回归模型那样描述线性关系。因此我们知道:如果事先告知一个数据集满足线性假设,那么线性回归模型可以提供稳定的预测。
学习更多 线性假设知识
Q8: 目前你需要完成一个项目,帮助食品公司节省更多的资金。问题是食品公司的物流系统不能按时送到食物,因此使得顾客不满意。为了提高满意度,他们决定免费运输食物,请问哪种算法可以帮助他们?
回答:你或许已经在脑海中默默浏览机器算法的列表,但请稍等,这些问题是来衡量你机器学习的基础的。
这不是一个机器学习问题,这是一个路径优化问题。一个机器学习算法包含三个要素:
1. 该系统存在一个模式。
2. 你不能用数学解决它(即便使用指数方程)。
3. 你拥有相关的数据
在考虑机器学习是否能够解决问题的时候,确定这三个因素。
Q9:你的模型拥有低偏差但高方差,应该用什么算法解决这一问题?
回答:低偏差是指模型预测值与实际值相近。换句话说,模型拥有足够的弹性来模拟训练数据分布。当这听起来似乎很成功时,请不要忘记,一个弹性的模型没有泛化性。这意味着当这个模型在未知数据上测试时,结果令人失望。
在这样的情况下,我们利用Bagging 算法(例如随机森林)来处理高方差问题。Bagging算法利用放回随机抽样将数据集分为多个子集,这些样例使用学习算法生成一系列模型。模型使用投票(分类)或平均(回归)用于组合预测。
同样,为了与高方差做斗争,我们可以:
1. 使用正则化技术,较高模型系数被惩罚,降低模型复杂度。
2. 使用变量重要性图表中前n个特征。也许使用数据集中的所有变量,算法很难识别出有意义的信号。
Q10:一个数据集包含很多变量,其中一些高度相关。你的经理让你做PCA,你会先移除关联的变量吗,为什么?
回答:或许,你会说NO。但是那可能不正确。移除关联变量对PCA有一个重大的影响,由于关联变量的存在,由某个成分解释的方差会膨胀。
例如,数据集中有3个变量,其中2个之间是相关的。如果你使用PCA,相比较于不相关变量,主要成分之间会显示2倍方差。同样,相关变量的相加让PCA对于相关变量更加重视,这具有误导性。
Q11: 经过几个小时的工作,你非常希望得到一个高精度的模型。目前你已构造5个GBM模型,认为Boosting算法可以达到效果,但是没有一个模型可以比基准指标高。因此你决定组合这些模型,虽然组合模型被认为可以得到高精确度,但是你又失败了,你忘记了什么?
回答:组合学习模型的基本思想为组合低质量学习模型来构造高质量学习模型。但这些学习模型可以产生更好的结果是因为各个模型不相关。因为我们使用的5个GBM模型,没有任何精度的改进,意味着模型之间是相关的。对于相关的模型来说,所有的模型提供相同的信息。
例如,如果模型1将User1122分类为1,有很大几率模型2和3也这样做,即便真实值是1。因此,组合学习模型是建立在组合不相关的模型以获得更好的预测前提下的。
Q12: kNN为什么与kmeans 聚类不一样?
回答:不要被命名中的’k’所迷惑。这两个算法的基本差异:kmeans本质上是无监督的,kNN本质上是有监督的。kmeans是一个聚类算法,kNN是一个分类或者回归算法。
kmeans算法分割一个数据集为不同类,每个类由相同性质数据构成,数据点紧密相邻。该算法尝试在不同类之间创造足够的分割性。因为无监督本质,类没有标记。
kNN算法尝试基于k个(可以是任何数值)相邻数据分类没有标记的观察。这也是个很懒惰的模型因为涉及的模型训练最少。因此,该算法不通过训练数据来获取未知数据的泛化模型。
Q13: 真正率 和 召回率 如何相关?写出公式
回答:真正率 = 召回率。两个定义公式都是:
T P / ( T P + F N ) TP/(TP+FN) TP/(TP+FN)
Q14: 一个多重回归模型,模型 R 2 R^2 R2 并不如你想的那样好,为了改进,你移除了截距项,模型的 R 2 R^2 R2 从0.3变为0.8,这可能吗,为什么?
回答:有可能。我们需要理解在回归模型中截距项的重要性。截距项表明了不依赖任何独立变量下的模型预测即平均预测。公式:
R 2 = 1 – ∑ ( y – y ´ ) 2 / ∑ ( y – y m e a n ) 2 , y ’ 是 预 测 值 R^2= 1 – \sum(y – y´ )^2/\sum(y – y_{mean})^2 ,y’是预测值 R2=1–∑(y–y´)2/∑(y–ymean)2,y’是预测值
当截距项存在, R 2 R^2 R2 的数值评估模型相比较于平均模型的差距。当截距项不存在, y m e a n y_{mean} ymean不存在,模型不能做出这样的判断。因为分母变大, R 2 R^2 R2 值就变大。
Q15: 在分析模型后,你的主管认为模型存在多重共线性,如何证明他是对的?在不损失任何信息的条件下,可以构造一个更好的模型吗?
回答:为检查多重共线性,我们可以构造一个相关系数矩阵来检验,然后移除含有75%以上相关性的变量(需设置一个主观的阈值)。另外,可以通过计算VIF(方差膨胀因子)来检测多重共线性的存在。VIF值<=4 意味着没有多重共线性,VIF>=10暗示严重的多重共线性。同样,我们可以使用公差作为多重共线性的指标。
但是,移除相关联的变量可能会丢失信息。为了保留这些变量,我们可以使用惩罚回归模型比如岭回归或者Lasso回归。同样地,我们可以将一些随机噪音添加到相关变量中因此两个变量变得不一样,但添加噪音可能会降低预测精确度,这个方法必须被谨慎使用。
Q16:为什么岭回归比Lasso回归更加好用?
回答:引用ISLR的作者 Hastie,Tibshirani所宣称的:在少数几个变量有大型或者中型影响的情况下,使用Lasso回归。在很多变量有小型或者中型的影响时,使用岭回归。
概念上,Lasso回归(L1)会挑选变量,收缩参数;而岭回归只做参数收缩,结果包含模型中的所有系数。当相关变量存在时,岭回归也许是更好的模型,同样地,岭回归在最小二乘估计拥有更大方差时工作得最好。
因此,选用哪个回归算法,取决于模型的目标。
Q17: 全球气候问题的上升导致了全球海盗数量的下降,这是否意味着海盗数量的下降导致了温度的改变?
回答:这是一个典型的“因果关系和相关性”的问题。我们不能得出结论,海盗的减少导致了气候的变化,因为这里面可能有其他因素(潜在或者混淆的因素)影响这个现象。
因此,这里可能存在全球平均气温和海盗数量的相关性,但是基于目前信息,我们不能说海盗死亡是因为全球气温升高。
Q18:你如何从数据集中挑选重要的变量,解释你的方法?
回答:以下是可以使用的一些变量挑选的方法:
1. 移除相关变量优先于挑选重要变量。
2. 使用线性回归,基于p值挑选变量。
3. 使用前向选择,后向选择和逐步选择法。
4. 使用随机森林,Xgboost算法和绘制变量重要性图。
5. 使用Lasso回归。
6. 衡量可使用特征包含的信息,选择最优的n个特征。
Q19:在协方差和相关性的差别是什么?
回答:相关性是协方差的标准化表达。
协方差难以比较,比如:计算工资和年龄的协方差,我们会得到难以比较的协方差,因为度量不同。为解决这个问题,我们计算相关性,得到分布范围-1和1之间的某个值,不需要考虑度量。
Q20:在连续和分类变量之间能获取相关性吗?如果可以,怎么做?
回答:可以使用 ANCOVA(协方差分析)技术来提取绝对和分类变量的相关性。
Q21:都是基于树算法,随机森林(Random Forest)和GBM算法有什么不一样?
回答:基本差异在于,随机森林算法使用Bagging技术做预测,GBM使用Boosting技术来做预测。
在Bagging算法中,数据集使用返回随机抽样被分为n个样本集,然后使用学习算法在所有样本上建立模型,得出的预测结果由投票或者平均机制组合。Bagging是平行进行的。
在Boosting算法中,在第一轮的预测之后,算法将未分类的预测权重加大,因此该预测可以在接下来的回合中被纠正。这种有序流程,不断将未分类的预测权重加大直到触发停止准则。
随机森林(主要)通过降低方差改进模型的精确度,已生成树不能帮助减少方差。GBM算法通过降低模型中的偏差和方差提高精确度。
Q22:使用二叉分类树算法是很简单的。你知道树分裂怎样发生,或树是怎样决策哪个变量在根部分裂,哪些变量在后继节点分裂?
回答:分类树在做决策时主要基于基尼系数和节点熵。简而言之,树算法会找到最可能的特征,可以将数据集分到最纯净的子节点。
基尼系数表示:如果随机从纯净群体中挑选2个样本,他们同一个类的可能性为1。我们可如下计算基尼系数:
-
为子节点计算基尼系数:使用公式为成功和失败可能性的平方和
p 2 + q 2 p^2+q^2 p2+q2 -
为分离计算基尼系数:使用分离的每个节点的加权基尼系数。
熵是对不纯度的衡量,公式如下(对于二叉树类型):
E n t r o p y = − p l o g 2 p − q l o g 2 q Entropy=-plog_2p-qlog_2q Entropy=−plog2p−qlog2q
p和q是该节点的成功和失败的可能性。当一个节点是中性时,Entropy为0。当该节点的两种可能性分别为50%-50%,该值最大。较小的Entropy是较好的。
Q23:使用10000个树来建立随机森林模型,你很满意得到0.00的训练误差,但是验证误差为34.23,为什么?你没有很好地训练你的模型吗?
回答:模型过拟合。训练误差0.00意味着分类器模仿训练数据模式到一定程度,而该模式在未知数据上不可用。因此当该分类器在未知数据上运行,不能找到对应模式,只能得到高误差的预测。在随机森林中,这往往因为使用超过必需数量的树。为了避免这个问题,需要通过交叉验证调整树的数量。
Q24.目前数据集,p(变量数量)大于n (观察样本数量),为什么OLS(普通最小二乘法)是一个不好的选择,哪种方式会是比较好的?
回答:在高维数据集上,我们不能使用传统回归方式,因为其假设是错误的。当p>n时,最小二次系数无法计算,方差是无限大。OLS不能被使用。
为了解决这个问题,我们可以使用惩罚回归方式比如:Lasso, LARS, 岭回归,这些算法可以缩减参数,降低方差。更明确地,岭回归在最小二乘估计有更高的方差的情况下工作最好。
其他的算法还包括子集回归和前向逐步回归。
Q25: 什么是凸包(联系SVM考虑)?
回答:在线性分离数据中,凸包代表两个数据点集外部边界。一旦凸包被建立,我们可以得到最大间隔超平面(MMH),即两个凸包的垂直平分线。MMH试图创建两个数据集中最大分离线。
Q26: 为什么一位有效编码增大数据集的维度,但是标签编码不会?
回答:不要被这个问题迷惑。这是个简单的问题,考察两个编码方式的不同。
使用一位有效编码,数据集维度(特征)增加,因为编码为分类变量的每个层次都建立一个新的变量。比如,有一个变量为颜色,这个变量有3个层次:红色,蓝色和绿色。一位有效编码’Color’会生成三个新的变量,Color.Red,Color.Blue和Color.Green,包含0和1值。
在标签编码中,分类变量选项被编码为0和1,所以没有新的变量生成。标签编码主要用于一位二进制变量。
Q27: 在时间序列数据集上使用交叉验证方式可行吗?k-fold或者LOOCV?
回答:都不行。
在时间序列问题中,K 折交叉验证会有一些问题,因为在第4年或者第5年会存在一些模式而第3年不会。数据抽样会分离这些趋势,我们会止步于在过去年份的错误验证。相反,我们可以使用正向推理策略,分为5折,如下所示:
-
fold 1 : 训练集 [1], 测试集 [2]
-
fold 2 : 训练集 [1 2], 测试集 [3]
-
fold 3 : 训练集 [1 2 3], 测试集 [4]
-
fold 4 : 训练集 [1 2 3 4], 测试集 [5]
-
fold 5 : 训练集 [1 2 3 4 5], 测试集[6]
其中1,2,3,4,5代表年份。
Q28:数据集丢失了30%以上的数值,比如50个变量,8个变量的数值丢失了30%以上,你会如何处理?
回答:我们可以使用以下方法:
-
为丢失的数据设置一个新类别,丢失的数据也许能解释一些趋势;
-
移除他们
-
联系目标变量,细致检查这些数值分布。如果发现任何模式,保留这些丢失的数值,赋予新的类别同时移除其他的数值。
Q29:“顾客购买了这个,也会购买另外一个……”作为亚马逊上的推荐,是哪种算法的结果?
回答:这种推荐引擎的基本理念是协同过滤。
协同过滤算法将“用户行为”作为推荐选项,分析其他用户的行为和事件,包括交易历史,排序,选择和付款信息。其他用户的行为和偏好在该项的表现被用于推荐给新的用户。在这个例子中,该行为的特征未知。
Q30:你如何理解类型1(type I) 和类型2(type II) 错误?
回答:类型1的错误:原假设为真,我们拒绝承认,也被称为:假正;类型2错误:原假设为假,我们接受了,也被称为:假负。
在混淆矩阵中,类型1的错误:将值分类为1,实际值为0;类型2错误:将数值分类为0,实际值为1。
Q31:处理一个分类问题,为了验证,随机抽样训练数据进行训练和验证。你很自信自己的模型能在未训练数据上工作非常好因为你的验证精度特别高。然而,你验证后发现精度特别低?为什么?
回答:在分类问题中,我们应该使用分层抽样而不是随机抽样。随机抽样并不考虑目标类的百分比,另外,分层抽样帮助保留目标变量在抽取样本中的分布。
Q32: 评估一个回归模型,可选用 R 2 R^2 R2,校正 R 2 R^2 R2和公差,你会选取哪一个?
回答:公差(1/VIF)被用作多重共线性指标,表示预测器方差无法被其他预测器所解释的百分比。公差大是较好的.
我们会考虑使用校正 R 2 R^2 R2而不是 R 2 R^2 R2来评估模型拟合性能。因为当加入更多的变量时, R 2 R^2 R2提高与预测精确度的改进无关。但校正 R 2 R^2 R2只有在额外变量提高模型精度时才会提高,否则不会改变。为校正 R 2 R^2 R2设定一个阈值很困难因为每个数据集都不一样。例如:基因突变数据集会有较低的校正 R 2 R^2 R2,而且预测性能不错。与股票市场数据相比较,较低校正 R 2 R^2 R2暗示这个模型并不好。
Q33: 在k-means或者kNN中,使用欧几里得距离来计算最近邻之间的距离,为什么不用mahattan距离?
回答:曼哈顿距离只计算水平或者垂直距离,具有维度限制。而欧几里得度量可以用于任何空间计算距离。因为数据点会在任意维度上显示,欧几里得度量是切实可行的选择。
举例:想象棋盘(国际围棋)上,大主教或者车所行进的距离可以用曼哈端距离计算,因为移动方向是水平和垂直的。
Q34: 像对待5岁小孩一样向我解释机器学习(machine learning)。
回答:这很简单。这就像宝宝学习走路一样,每次他们跌倒,他们学习(无意识地)& 明白到他们的腿应该伸直而不是弯曲。下一次他们跌倒,他们会感觉到疼,哭泣,但学会不要那样站。为了避免那样的疼痛,他们更加痛苦地尝试。为了成功,他们甚至寻求门和墙或者身边其他事情的帮助,这样他们能站稳。
这是一个机器在它所处的环境中如何工作和发展的感性描述。
注意:这个面试问题考察将复杂问题用简单的语言表达出来的能力。
Q35: 一个线性回归模型经常用校正 R 2 R^2 R2或者F值来评价,如何评价一个逻辑回归模型?
回答:我们可以使用下面这些方式:
-
逻辑回归被用于预测可能性,可以使用AUC-ROC曲线,结合混淆矩阵去评估。
-
同样的,校正 R 2 R^2 R2的意义相对于逻辑回归是AIC。AIC是拟合的度量值,以模型参数的数量作为惩罚项,因为我们倾向于拥有最小AIC值的模型。
-
Null Deviance 表示模型截距项能够预测的结果。该值越小,模型越好。Residual Deviance表示添加不相关的变量,模型预测的结果。该值越小,模型越好。
学习更多知识:逻辑回归
Q36:如何为数据集挑选合适的算法?
回答:机器学习算法的选择仅仅依靠数据的类型。如果数据集有线性关系,则线性回归是最好的算法。如果你需要进行图像方面的工作,神经网络将帮助你建立一个稳固的模型。
如果数据由非线性关系组成,那么Boosting或者Bagging算法就是选择之一。如果商业需求是构造可部署的模型,那倾向于使用回归或者决策树模型(很方便解释)而不是黑箱算法比如SVM,GBM等等。
简而言之,没有任何情境下都适用的算法。我们必须足够谨慎并理解可以使用哪个算法。
Q37: 将一个分类变量对待为连续变量,可以得到一个更好的预测模型吗?
回答:为了更好地预测,分类变量可以被考虑为连续变量:当变量本质上是有序的。
Q38: 什么时候正则化是机器学习中的必须步骤?
回答:当模型过拟合或者欠拟合时,正则化是必须的。这个方式包含为目标函数引进更多特征的成本,因此倾向于使很多变量的参数为零,以降低成本。这帮助减少模型复杂度,模型能够得到更好的预测结果(泛化性)。
Q39:如何理解朴素贝叶斯中的偏差-方差均衡?
回答:模型产生的误差可以分解为三个部分,如下列所示:
E r r ( x ) = ( E [ f ^ ( x ) ] − f ( x ) ) 2 + E [ f ^ ( x ) − E [ f ^ ( x ) ] ] 2 + σ e 2 Err(x)=(E[\hat{f}(x)]-f(x))^2+E[\hat{f}(x)-E[\hat{f}(x)]]^2+\sigma^2_e Err(x)=(E[f^(x)]−f(x))2+E[f^(x)−E[f^(x)]]2+σe2
E r r ( x ) = B i a s 2 + V a r i a n c e + I r r e d u c i b l e E r r o r Err(x)=Bias^2+Variance+Irreducible Error Err(x)=Bias2+Variance+IrreducibleError
偏差误差(Bias):可以帮助衡量平均水平上预测的数值与实际值的差别。高偏差误差意味着模型表现欠佳,会错过重要趋势。
方差误差(Variance):衡量在同一预测结果之间的差异。高方差的模型意味着在训练数据上过拟合,但在训练数据之外的数据上表现很差。
Q40:普通最小二乘法( OLS)是线性回归,最大似然是逻辑回归。解释这句话。
回答:概括地说,普通最小二乘法和最大似然是使用不同回归方式的方法去接近未知参数值。
普通最小二乘法用在线性回归中,以获得真实值与预测值之间的最小距离的方式接近未知参数值。最大似然方式是帮助选择参数值,该值能够使模型能够最大可能输出观察样本。
结语
你也许能够回答所有的问题,但是真正的价值在于理解然后应用。如果你对这些问题有困难,现在是学习而不是表现的时候。你应该一丝不苟地关注这些问题。
这些问题本意是想帮助你对不同类型问题加深了解,我相信这些问题可以让你有足够的好奇心去追寻更深层次的回答。如果你正在计划这件事,那就是一个很好的信号。
原文链接:《【入门必读】40个 机器学习/数据科学创业公司的面试问题 》