首页 / 资讯中心 / 文章详情

机器学习面试题汇总:SVM、逻辑回归与决策树避坑指南

机器学习面试题汇总:SVM、逻辑回归与决策树避坑指南 ★ FEATURED ARTICLE
简介这是一份面向机器学习面试准备的问答式复习文档目标读者是具备一定算法基础、正在备战算法岗面试的研发人员或数据科学家。内容系统梳理了有监督与无监督学习的区别深入讲解SVM、逻辑回归(LR)、决策树的工作原理与特性并展开SVM/LR/决策树对比、GBDT与随机森林差异、凸优化、类别不平衡处理、对偶问题、特征选择、过拟合原因、偏差方差、神经网络原理、CNN与DBN区别等高频考点同时涵盖EM算法、K-means的EM推导、DBSCAN密度聚类、聚类距离度量、朴素贝叶斯、L1/L2正则化、TF-IDF与余弦距离在文本处理中的应用覆盖面广既便于面试前系统复习也能为实际模型选型提供理论依据。资源为单个docx文档压缩包共1个文件、49KB问答形式很适合按需查阅。目前已有110人学习下载适合希望快速巩固核心知识、提升面试表现的读者。1. 机器学习常见面试题汇总别把算法题背成八股网上搜到的“机器学习常见面试题汇总”大多是问题清单加答案。我带候选人模拟面试时发现一个普遍问题SVM的拉格朗日对偶能背得一字不差但被问“同一份数据该选LR还是SVM”当场卡壳。面试官考算法原理不是考背诵是想确认两件事你知不知道这个算法为什么成立以及拿到真实数据时会不会选、会不会调。所以这篇文章把高频考点按监督与非监督学习、SVM、LR、决策树的顺序拆开每个算法先立概念再给可复现的最小实验最后集中讲踩坑。适合准备算法岗面试的人也适合期末复习阶段查漏补缺——西电、山大这类学校的机器学习期末题翻来覆去考的其实也是这几块。2. 监督与非监督学习先讲清任务边界再谈算法选型2.1 面试第一问“机器学习处理任务分为哪几类”怎么答当你被问到“机器学习处理任务分为哪几类”时不要只输出一个名词列表。分类、回归、聚类、降维属于任务类型而监督学习、非监督学习、半监督学习属于学习范式。面试官想听的是你如何把两者对应起来。任务类型回答“做什么”学习范式回答“怎么学”。有标签就用监督学习无标签就用非监督学习标签不完整就用半监督或自监督。比如经典例子我们已经有了一些电影的数据和分类现在新电影《唐人街探案》的分类是未知的。这不是聚类任务而是监督学习里的预测任务——老样本带着标签训练出模型再用模型去推断新样本的标签。很多人在这里翻车一看到“分类未知”就说“用聚类”其实聚类根本没有历史标签可用。吴恩达的机器学习课程里最早用这种例子区分两类学习面试时把这个例子原样讲出来比干背定义可信得多。另一个容易混的点是分类与回归分类输出离散类别回归输出连续数值。面试官可能会追问“预测房价”是什么任务——回归但“预测房价是否突破某个阈值”则是分类。同样是数字连续还是离散决定任务类型这个判断能力比背概念更值钱。2.2 先定任务再选算法一个最小可对比实验很多候选人急着讲算法却跳过“我凭什么选它”这一步。真实项目里的第一件事不是挑模型而是确认有没有标签。我面试别人时常让候选人当场跑一个8行代码的小实验用来验证他是否真的理解监督与非监督的流程差异import numpy as np from sklearn.datasets import make_blobs from sklearn.cluster import KMeans from sklearn.linear_model import LogisticRegression # 生成两类有标签数据演示监督与非监督的流程差异 X, y make_blobs(n_samples200, centers2, random_state42) # 监督学习用标签训练分类器 clf LogisticRegression().fit(X, y) # 非监督学习不用标签只做聚类 km KMeans(n_clusters2, random_state42).fit(X) # 输出对比 print(分类准确率:, clf.score(X, y)) print(聚类与标签吻合度:, np.mean(km.labels_ y))逻辑说明LogisticRegression能直接评估准确率因为模型在训练时用了y标签KMeans在拟合时根本没传入y它的labels_只是把样本分成两堆。由于聚类簇编号可能与真实类别编号相反这个吻合度可能接近0或1需要先做标签对齐。这个实验的核心结论是监督学习有“标准答案”可以打分非监督学习没有标准答案只能通过簇内紧密度或业务含义间接验证。参数说明n_samples200设置样本数centers2让数据形成两类random_state固定随机种子保证每次运行结果一致。KMeans的n_clusters必须显式指定这也暴露了非监督学习的典型痛点——你要预先告诉算法“分成几堆”但“几堆才合理”恰恰是建模者需要自己决定的事。常见做法是先画肘部曲线看簇内误差平方和随K值下降的拐点再结合业务确定K。维度监督学习非监督学习标签必须有没有任务分类、回归聚类、降维、异常检测评估准确率、F1、AUC轮廓系数、肘部法则、业务指标算法LR、SVM、决策树KMeans、DBSCAN、PCA面试难点损失函数与过拟合怎么选K、怎么验证聚类质量这张表可以当场背下来。回答“监督和非监督区别”时用一分钟讲完省得绕圈子。2.3 半监督与自监督近年面试的加分项面试题汇总里半监督和自监督的比重明显在上升。半监督学习的成立依赖两个“机器学习假设”聚类假设认为同一簇里的样本大概率共享标签流形假设认为高维空间里靠得近的样本在低维结构上也接近。自监督学习更激进它从数据自己生成标签比如把句子随机遮盖让模型去预测或者把图片旋转90度让模型判断角度。这两种都是“没有人为标注也能学习”的思路恰好补上监督与非监督学习的中间地带。回答这类问题时记住三个层次标签充分直接监督学习标签稀缺、无标签数据多先自监督预训练再用少量标签微调业务只关心分群、不关心类别语义用聚类。这三个层次能应对大部分追问。如果面试官问“这个模型在无标签数据上做预训练算监督还是非监督”你回答“从学习范式看是非监督从应用看是监督的前置步骤”基本就稳了。2.4 非监督学习的应用流程从聚类到业务落地许多候选人只背KMeans原理却答不出应用流程。一个完整的非监督应用流程是业务理解、特征构造、确定簇数、聚类、簇画像、业务验证。以用户分群为例先用肘部法则或轮廓系数定K然后跑KMeans再计算每个簇的平均客单价、购买频次、活跃时长等特征做画像。最后看业务指标比如不同簇的接受率、流失率是否有明显差异。差异越大聚类越有价值。这里的坑是聚类结果换了随机种子就变说明数据没有稳定的簇结构。此时要么减少特征要么改用DBSCAN这类允许噪声点的算法。面试时说出“我会用一个不依赖随机种子的聚类方法做交叉验证”这种话能明显拉开与其他候选人的差距。3. SVM 面试题详解从间隔最大化到核函数选型3.1 面试官问SVM其实在问三件事间隔、支持向量、C值SVM的核心是最大化几何间隔。函数间隔是y(wxb)但直接用它做目标函数有个问题w和b成倍缩放时函数间隔跟着变决策边界却不变。几何间隔把函数间隔除以||w||消除了缩放影响所以它才是真正的“点到超平面距离”。于是目标变成最大化几何间隔等价于最小化1/2||w||²。这里的1/2和平方都不是装饰平方为了求导方便1/2让导数是w而不是2w。面试时如果能说出这一层说明你不是临时背题。接下来是支持向量。支撑决策边界的是边界上的少数样本而不是全部样本。这带来两个工程性质SVM训练完成后远离边界的样本可以丢掉模型只保留支持向量对训练集里那些被正确分类且离边界远的点无论怎么变化都不影响模型。这也是SVM对异常值敏感的原因——一个落在错误一侧的样本很可能直接变成支持向量把边界拉偏。最后是C值。软间隔允许一部分样本被误分类C控制对误分类的惩罚力度。C越大越不想犯错边界越复杂趋近硬间隔容易过采样导致过拟合C越小越能接受错误边界更平滑但可能出现欠拟合。面试官还常问“SVM用什么优化”——不要回答梯度下降经典SVM使用SMO算法因为它把大优化问题拆成一个个两变量子问题效率高且能保证收敛性。这个细节经常成为翻车点硬间隔SVM的梯度下降这类说法本身就是错的。3.2 核函数选型线性、多项式、RBF不是越复杂越好核函数的思路是把低维的线性不可分数据映射到高维在高维空间做线性分割。但“用什么核”不是越高端越好。线性核适合特征维度高、样本量也比较大的情况比如文本分类因为高维稀疏空间里线性边界通常够用。多项式核表达能力有限且超参数多实际用得少。RBF核是默认首选它只有一个参数gamma能逼出很复杂的边界但代价是容易过拟合。RBF核里核心的一组超参数是C和gamma。C控制误分类惩罚gamma控制单个样本的影响半径。gamma太小时每个样本只能影响近邻决策边界平滑gamma太大时每个样本都争抢地盘边界沿样本点呈锯齿状典型过拟合。调参顺序我一般先用网格搜索粗定数量级再围绕表现最好的几个点细调。面试时如果能举出“把gamma从0.1调到10后训练集分数上升、测试集分数下降”这类现象比单纯背差别更能说服人。顺带说一句面试里常有人把SVM和CNN放到一起比。svm和cnn原理的差别在于SVM靠人工设计核函数来构造特征映射CNN靠大量数据自动学层次化特征。它们不是替代关系数据规模小时SVM反而更稳数据规模大到图像级别时CNN是默认选择。3.3 SVM与LR的对比一道高频面试题的答题结构几乎每家公司的算法面试题汇总里都有“LR和SVM有什么区别”。回答时建议先给结论LR是概率模型输出有概率含义SVM是几何模型输出是到超平面的距离。然后展开三个差异。第一损失函数不同。LR用log loss对样本施压即使是已经分类正确的样本只要距离边界不够远仍在损失。SVM用hinge loss只对间隔内的样本施压间隔外正确分类的样本损失为零。这决定了SVM的决策边界由支持向量决定LR则被全部样本影响。第二特征尺度敏感度。两者都对特征尺度敏感但SVM带核时更敏感特征量纲不一致会直接让距离计算失效。所以用SVM之前必须做标准化。LR在线性场景下不做标准化也能收敛只是迭代路径更曲折。第三适用场景。高维稀疏特征比如点击率预估的ID类特征用LR合适中小样本、存在复杂非线性边界时用SVM更稳。下面这张对比表可以提前背熟维度LRSVM输出概率距离或类别损失函数log losshinge loss样本影响所有样本仅支持向量特征尺度敏感很敏感高维稀疏优易过拟合3.4 一个可复现的RBF-SVM实验C和gamma怎么影响边界import numpy as np from sklearn.svm import SVC from sklearn.datasets import make_moons # 生成非线性二分类数据 X, y make_moons(n_samples200, noise0.15, random_state1) # RBF核SVMC和gamma先给中等值 model SVC(kernelrbf, C1.0, gamma0.5).fit(X, y) # 在网格上做预测生成决策区域 xx, yy np.meshgrid(np.linspace(-2, 3, 200), np.linspace(-2, 3, 200)) Z model.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)逻辑说明make_moons生成两个交错的半月形数据线性分类器无法直接分开。SVC换成rbf核后模型在特征空间里学出一条非线性边界。np.meshgrid构建覆盖样本区域的网格predict逐点给出类别最后reshape成与网格相同形状方便后面画分界线。参数说明C1.0是误分类惩罚项gamma0.5是RBF核的带宽。把C调到100会让模型更执着于把训练集全部分对边界变得复杂把gamma调到5会让边界沿着样本点出现锯齿。实操中先固定C1调gamma看边界形态之后再用交叉验证同时选C和gamma。不要指望默认参数在真实数据上直接好用这个实验只负责给你一个“边界长什么样”的直觉。4. LR 面试题详解损失函数、特征工程与对比边界4.1 为什么LR用交叉熵而不是均方误差逻辑回归虽然名字里有“回归”但它做的是分类。面试高频题是“LR的损失函数为什么用交叉熵”。最简单的原因是交叉熵损失是关于权重w的凸函数局部最优就是全局最优如果用均方误差经过sigmoid后的损失函数非凸梯度下降容易停在局部极值。但要答得更好还得提梯度形式。记z wxbsigmoid输出p 1/(1e⁻ᶻ)。MSE的梯度里含有p(1-p)当p接近0或1时这个因子趋近0梯度极小几乎学不动。交叉熵损失的梯度是(p-y)x它只与预测偏差相关没有p(1-p)这种衰减项。所以交叉熵不仅凸性好梯度消失问题也小得多。这个推导不需要现场完整展开但你要知道结论来自哪里否则面试官追问一次就容易露馅。4.2 特征归一化究竟影响LR什么一个对比实验很多入门资料说LR必须归一化但没说清为什么。LR的梯度更新里特征数值尺度会直接改变梯度方向。如果特征A取值在0到1之间、特征B取值在1000到10000之间未经归一化的参数更新路径会沿B所在维度大幅摆动收敛又慢又不稳定。下面这段代码能复现这个现象import numpy as np from sklearn.linear_model import LogisticRegression from sklearn.preprocessing import StandardScaler # 构造一个量纲差异巨大的小样本特征1小特征2大 X np.array([[1, 1000], [2, 1200], [3, 900], [4, 1100]]) y np.array([0, 1, 0, 1]) # 未归一化训练设置较低迭代次数观察是否收敛 lr_raw LogisticRegression(max_iter100).fit(X, y) # 先标准化再训练 X_scaled StandardScaler().fit_transform(X) lr_scaled LogisticRegression(max_iter100).fit(X_scaled, y) print(raw coef:, lr_raw.coef_) print(scaled coef:, lr_scaled.coef_)逻辑说明StandardScaler把每列变成均值约0、标准差约1的分布。对比coef_会发现未归一化时模型被迫把大部分权重压在大数值特征上小数值特征的作用被削弱标准化后两个特征的权重更均衡。注意标准化必须在训练集上先fit再transform训练集和测试集不能把测试集单独fit否则特征分布不一致等价于数据泄漏。参数说明max_iter100把迭代上限压得较低以便观察未归一化时容易触发的收敛告警。实际任务中建议把max_iter调大到1000以上或者直接用标准化。判断收敛的标准除了警告信息外还可以看损失曲线是否进入平台期。如果面试官追问“归一化会不会改变模型最优解”可以回答对线性模型来说归一化不改变模型的表达能力但会显著影响优化路径。4.3 LR、SVM、决策树的边界选择一张表说清楚这种对比题在面试里非常高频而且喜欢连招先问单个算法再问“和另一个比怎么选”。我一般把回答固定成三行数据高维稀疏、需要概率解释优先LR样本量中等、决策边界复杂优先SVM特征类型混合、需要可解释性和特征重要度优先决策树。算法特征尺度非线性可解释性输出典型场景LR敏感需要特征工程高概率风控、CTRSVM很敏感核函数可处理中距离或类别小样本、图像特征决策树不敏感天然非线性高类别或回归值特征混合、规则提取决策树对特征尺度不敏感因为分裂只看阈值不受量纲影响这让树模型在业务风控中常被拿来跟LR组合成集成模型。而SVM与CNN这类深度模型相比特征是人工设计的核函数也是手工选择CNN是端到端自动学特征。面试时主动指出这层差异通常能赢得认同。4.4 LR在风控和点击率预估里怎么用从训练到接受率LR的应用场景主要是两类金融风控评分卡和互联网点击率预估。在风控中LR配合WOE编码把连续变量离散化再计算IV值筛选特征最后输出违约概率并换算成评分卡分数。在CTR中LR作为baseline优势是训练快、能处理亿级稀疏ID特征、上线和解释都容易。面试时更常问“模型上线后该监控什么”。常见监控点包括模型分数分布是否漂移、AUC是否随线上真实反馈下降以及接受率。接受率指的是在通过模型的样本中最终被业务方接受的占比。接受率突然升高可能是模型放松了拒绝标准也可能是样本人群发生偏移接受率骤降则需排查特征异常或实现bug。能把接受率这个业务指标和模型指标联动起来讲会让面试官觉得你有上线经验而不是只会调库。5. 算法面试避坑实录决策树与集成模型最常见的 5 个答法误区5.1 误区一信息增益算的是“分类正确率”分不清熵和基尼现象候选人被问“决策树选特征用什么指标”回答“信息增益越大越好”但追问“ID3、C4.5、CART分别用什么”时开始混着说。原因三个版本用到的纯度度量不同。ID3用信息增益基于熵C4.5用信息增益率解决ID3偏好取值多特征的问题CART用基尼系数公式是1减去各类别概率平方之和不涉及对数运算计算更快分类和回归都能用。基尼系数与信息熵在大多数情况下给出一致选择但在类别分布极不均衡的数据上会有差异。解决先记住结论再理解推导。面试时回答“CART用基尼系数回归树用均方误差ID3/C4.5只能做分类”就能拿分。如果被追问“信息增益能不能用准确率衡量”要明确说不可以——准确率是模型表现指标信息增益是特征选择指标二者在不同阶段被使用。5.2 误区二只聊预剪枝不提后剪枝以为剪枝越多越好现象很多人在课程作业里用过max_depth于是把“剪枝”简单理解成“限制树的深度”被问“预剪枝和后剪枝哪个更好”时直接答“预剪枝好省时间”。原因预剪枝在分裂前判断当前分裂是否值得速度快但可能欠拟合——某个特征单独看增益不大但它与后续分裂组合在一起能产生强判别力。后剪枝在树建完后自底向上剪掉不带来显著验证集增益的子树更全面但开销大。sklearn里max_depth、min_samples_split、min_samples_leaf是预剪枝参数ccp_alpha做代价复杂度剪枝属于后剪枝思路。解决面试时建议说“先用预剪枝快速验证再用ccp_alpha修剪一次避免过拟合”。把max_depth当成后悔药而不是万能药就好。真实项目里我见过把max_depth从10调到15后AUC从0.72掉到0.68的例子剪枝的本质是让树在验证集上靠谱而不是在训练集上刷分。5.3 误区三决策树只能做分类不知道怎么逼近回归曲线现象被问“决策树如何逼近真实曲线”候选人说“决策树不是用来分类的吗”或者说“决策树切出来的都是矩形区域”但讲不清为什么能逼近。原因决策树有回归版本。回归树的分裂标准不是信息增益而是均方误差叶子节点输出不再是类别概率而是落入该区域样本的目标均值。决策树拟合曲线的方式是分段常数把x轴切成一堆区间每个区间里用一个常数当预测值。区间越多逼近越精细。解决把这个“阶梯函数逼近”讲清楚就能从新手区分出来。面试官如果追问“为什么叶子越多曲线越陡”可以回答模型复杂度上升方差变大但偏差下降所以需要控制叶子数量防止过拟合。头歌决策树进行收入预测-sklearn版这类作业里用的就是回归树只是很多人没意识到这个点。5.4 误区四随机森林就是多棵决策树投票树越多越好现象提到随机森林只回答“多棵树投票Bagging的典型代表”却不提随机性的来源也说不清为什么比单棵决策树稳定。原因随机森林在Bagging基础上加入两个扰动样本扰动bootstrap采样和特征扰动每次分裂随机选择特征子集。这两个扰动让树之间的相关性降低决定了对方差的主导。树越多精度不一定越高精度会饱和计算成本线性上升。随机森林的核心是降低方差不是降低偏差——如果单棵决策树欠拟合随机森林也救不了。解决回答时补一句“随机森林在偏差基本不变的前提下把方差压低”层次立刻拉高。再补一个工程细节用feature_importance_选特征时要看重要度是否和业务常识一致如果某个噪声特征重要度异常高往往暗示数据泄漏或特征泄漏。这种坑在真实数据里经常出现面试官对你的印象会从“会背概念”变成“真做过项目”。5.5 误区五把课程作业里跑通的参数直接搬到真实案例上抄现象候选人说“我在头歌决策树鸢尾花分类-sklearn版里用默认参数就分类得很好所以真实数据也可以直接用默认参数”。原因作业数据集是干净、小巧、经过挑选的真实数据噪声大、特征相关性强、类别不均衡默认参数很容易跑出极端结果。比如鸢尾花三分类max_depth不限制也不会差太多但真实业务数据里不限制深度树会一直长到每个叶子只有一个样本测试集表现几乎肯定崩。解决养成一个固定节奏先做数据探索看类别分布、缺失值、量纲差异再跑简单模型作为baseline比如LR或浅决策树最后用交叉验证调一组参数。这个流程不仅能解决面试题也是所有数据项目的通用框架。面试官问“你在项目中怎么选参数”你把这套节奏讲出来比报出一串“我用过随机搜索”更有效。6. 面试答题的一个通用框架原理、手推、应用串成一条线面试题库里每一道算法题都可以用同一个框架组织答案任务定义、算法动机、数学表达、工程决策。拿“SVM为什么用间隔最大化”举例不要从“间隔”开始而是先说“要解决的问题是找一个泛化能力强的边界。风险最小化在几何上表现为间隔最大化间隔越大的边界对未来样本越稳。”然后补一句数学表达“等价于最小化1/2||w||²约束是每个样本的函数间隔不小于1。”最后落到工程“实际中用RBF核通过交叉验证选C和gamma上线后要看接受率和误分类率的平衡。”下面这张卡片我建议把每个算法都按四列准备一遍知识点一句话原理一句话手推一句话工程点监督学习用标注数据学映射最小化经验风险标签质量决定上限SVM最大化几何间隔1/2LR用sigmoid输出条件概率交叉熵损失求梯度风控和CTR用LR当baseline决策树用纯度度量递归切分信息增益、基尼、均方误差靠预剪枝和交叉验证防过拟合随机森林样本加特征双扰动降方差对多棵树结果取平均特征重要度异常时查数据泄漏准备面试时不要背整段答案只背每行的关键词然后在模拟面试里把它扩成完整的五分钟陈述。我自己带人的习惯是先让他们对着这张表讲一遍再要求他们不用表复述一遍两遍之后基本能形成肌肉记忆。这样复习的效率比反复刷题高很多面试时也不容易因为紧张而忘词。如果面试官问到一个没见过的模型把这个框架套上去先定义它在解决什么问题再说它用什么损失函数最后说它在什么数据上能发挥优势。哪怕模型细节你不完全懂这个结构也能让面试官知道你有分析算法的能力。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站