前言

总结了2017年找实习时,在头条、腾讯、小米、搜狐、阿里等公司常见的机器学习面试题。

支持向量机SVM

关于min和max交换位置满足的 d* <= p* 的条件并不是KKT条件

Ans:这里并非是KKT条件,要让等号成立需要满足strong duality(强对偶),之后有学者在强对偶下提出了KKT条件。KKT条件成立需要满足constraint qualifications,而constraint qualifications之一就是Slater条件——即:凸优化问题,如果存在一个点x,使得所有等式约束都成立(即取严格不等号,不包括等号),则满足Slater条件。SVM中此处,满足Slater条件,等号可以成立

核函数是从高维空间构造超平面,是否会带来高维计算代价的问题?

Ans:并不会。在线性不可分的情况下,SVM首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,最终在高纬度空间中构造出最优分离超平面。

高斯核函数在方差参数δ上选取有什么影响?

Ans:如果δ选的很大,高次特征上的权重会衰减的非常快,此时相当于一个低维度的子空间;如果δ选的很小,则可以将任意的数据映射为线性可烦,但可能带来非常严重的过拟合问题。

核函数的本质是什么?

Ans:①解决线性不可分问题 ②在低维上先进行计算,将实质的分类效果在高维上呈现,巧妙地避免了高维计算复杂性的问题。

在目标函数中,拉格朗日的参数α的取值有什么特点?

Ans:对于远离平面的点为0;在边缘线的值在 [0, 1/N]之间;对于outlier数据的值为1/N

KNN

如何理解kNN中的k的取值?

Ans :①选取较小的k值时,相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例很相近的样本才会对预测结果起作用。但是,“学习”的估计误差会增大,整体模型会变得复杂,容易过拟合

②选取较大的k值是,相当于用较大的领域中的训练实例进行预测,可以减少学习的估计误差,但是近似误差会增大,因为离输入实例较远的样本也对预测结果起作用,容易使预测发生错误。k过大导致模型变得简单。

③在选取k上,一般取比较小的值,并采用交叉验证法进行调优。

在kNN的样本搜索中,如何进行高效的匹配查找?

Ans :①线性扫描(数据多时,效率低)

②构建数据索引——Clipping和Overlapping两种。前者划分的空间没有重叠,如k-d树;后者划分的空间相互交叠,如R树。

那什么是KD树?怎么构建的?

Ans:kd树是对数据点在k维空间中划分的一种数据结构,主要用于多维空间关键数据的搜索。本质上,kd树就是一种平衡二叉树。

思想:先对计算各个维度的方差,选取最大方差的维度作为候选划分维度(方差越大,表示此维度上数据越分散);对split维度上的值进行排序,选取中间的点为node-data;按照split维度的node-data对空间进行一次划分;对上述子空间递归以上操作,直到空间只包含一个数据点。分而治之,且循环选取坐标轴

能简单介绍一下KD树的查找,以及增、删、改的实现流程吗?

Ans:先二叉查找,找到候选最近点;沿着路径进行回溯,画圆,是否父节点平面交割,以判断是否需要进入另一个平面进行查找;依次回溯,画圆,寻找最近点。

KD树更适合用于训练实例数远大于空间维数时的k近邻搜索。当维数超过20维时,KD数的检索效率急剧下降,几乎接近贪婪的线性扫描。因此出现对KD树的改进——BBF算法,M树,VP树,MVP树等高维空间索引树。

逻辑斯谛回归

LR为什么可以用来做CTR预估?

Ans:若把点击的样本作为正例,未点击的样本作为负例,则样本的CTR就是样本为正例的概率,LR可以输出样本为正例的概率,故可以解决此类问题。此外,LR相对于其他模型,求解简单,可解释强,方便并行

LR相对于线性回归有什么优势?

Ans:LR本质上还是线性回归,但多了最后一层sigmoid函数的非线性映射。正是这这种映射,解决了线性回归在整个实数域内敏感度一致的缺点。在分类任务中,需要控制在[0,1]之间。逻辑回归曲线在z=0处很敏感,在z>>0和z<<0处,都不敏感。

LR与最大熵模型MaxEnt有什么关系?

Ans本质上没有区别。LR是最大熵对应类别为二类时的特殊情况,也就意味着,当逻辑回归类别扩展到多分类时,就是最大熵模型。

LR和SVM的区别和联系?

Ans:①LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(改进后,可处理多分类)

②都可以增加不同的正则化项,如L1、L2,在很多实验中,算法结果很相近。(区别:LR是参数模型,SVM是非参数模型)

③从目标函数上看,LR采用logisticcal loss;SVM采用Hinge Loss。两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重

④SVM仅考虑support vectors,去学习分类器。LR是通过非线性映射,大大减少了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重

⑤LR的模型更加单,好理解,可解释性抢,适合并行。SVM的理解和优化比较复杂,但是可以支持核函数,进行高维映射。

LR能做的,SVM也能做,但可能在准确率上有问题;SVM能做的,LR有的做不了

概括一下LR的思想

Ans: 逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,达到将数据二分类的目的。

朴素贝叶斯

怎么理解朴素贝叶斯中的“朴素”?

因为它假定所有的特征在数据集中的作用是独立同分布的,但这个假设在现实生活中很不真实,因此很“朴素”。

网页搜索中的拼写检查可以基于贝叶斯实现,你怎么理解?

P(c|w) = P(w|c) * P(c) / P(w) → P(w|c) * P(c)

P(c)表示正确词出现的概率,P(w)拼写错误的词。对大文本进行P(c)和P(w|c)的统计,对当前拼写错误词w的所有候选正确词ci,取最大的排序列表。

决策树

请问(决策树、随机森林,Boosting、Adaboot)GBDT和XGBoost的区别是什么?

Ans:①首先,随机森林是一个包含多个决策树的分类器;AdaBoost——即Adaptive Boosting(自适应增强),经典的AdaBoost算法只能处理采用指数损失函数的二分类学习任务,对异常点outlier比较敏感;GBDT指梯度上升决策树算法,相当于融合决策树和梯度上升的Boosting算法。

②xgboost类似gbdt的优化版,在精度和效率上都有了提升,具体优点包括:1.损失函数是用泰勒展开式二项逼近,而非gbdt的一阶导数;2.对树的结构进行了正则化约束,防止模型过度复杂,降低过拟合的可能性;3.节点分裂的方式不同,gbdt用的gini系数,xgboost是经过优化推导后的。

为什么梯度提升方法倾向选择决策树 (通常是CART树) 作为基学习器?

Ans:这与决策树自身的优点有关系:①决策树可以认为是if-then规则集合,易于理解,可解释性强,预测速度快。②相对于其他算法更少的特征工程,如可以不用做特征标准化,可处理缺失值,不用关心特征之间是否相互依赖。③决策树能自动组合多个特征,轻松处理特征之间的交互关系,并且是非参数化的,不必担心异常值或是否线性可分。

在GBDT中,如何抑制单棵决策树的过拟合问题?

Ans:剪枝、限制树的最大深度,限制叶子节点的最少样本数量、限制几点分裂时的最少样本数量,吸收bagging思想对训练样本采样、在学习单棵决策树时只使用一部分样本、借鉴随机森林的思路在学习时只采样一部分特征、在目标函数中添加正则项。

为什么xgboost要用泰勒展开,优势在哪里?

Ans:xgboost使用了一阶和二阶偏导,二阶导数有利于梯度下降的更快更准,使用泰勒展开取得二阶导数形式,可以再不选定损失函数具体形式的情况下,用于算法优化分析。本质上把损失函数的选取和模型算法优化/参数选择分开了,这种去耦合增加了xgboost的适用性。

Xgboost如何寻找最优特征?是有放回的,还是无放回的?

Ans:xgboost在训练的过程中,给出各个特征的评分,以表明每个特征对模型训练的重要性。xgboost利用梯度优化模型算法,样本是不放回的。但xgboost支持子采样——即每轮计算可以不使用全部样本。

ID3和C4.5有什么区别?

Ans:①ID3采用信息熵的增益作为切分依据,倾向于选取特征值较多的属性进行划分;C4.5采用信息熵的增益比作为切分依据,对较少特征数目的属性有所偏好。

7.请谈一谈决策树剪枝有哪些方法?

Ans:剪枝的作用是为了防止决策树过拟合,有两种思路:预剪枝(Pre-Pruning)后剪枝(Post-Pruning)

①预剪枝——指在构造决策树的同时进行剪枝。在创建分支的过程中,为了避免过拟合,可以设定一个阈值,熵减少小于阈值时,则停止继续创建分支。实际效果并不好

②后剪枝——指在决策树构建完成之后回溯,进行剪枝。对拥有相同父节点的一组节点进行检查,判断如果将其合并,熵增加量是否小于某一阈值?是,则合并为一个节点,其中包含了所有可能的结果。后剪枝是删除一些子树,然后用叶子节点代替。此叶子节点的类别通过多数原则确定——用子树中大多数训练样本所属的类别来标识。算法包括Reduced-Error Pruning、Pessimistic Error Pruning(悲观剪枝)

③预剪枝可能产生欠拟合的风险,后剪枝由于需要先生成完整的树,再自底向上进行剪枝,因此花费的时间要久的多。

8. 决策树怎么处理连续值和缺失值?

Ans:①连续值处理——采用连续属性离散化技术,最简答的方法是采用二分法进行处理(C4.5采用的机制)。对特征值进行升序排序,取两个特征值之间的中点作为可能的分裂点,以此离散化。

缺失值处理——包含两个待解决的问题:1. 如何在属性值缺失的情况下,进行划分属性的选择?显然,仅课根据在各属性上没有缺失值的样本来选择。2.给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?若样本x在属性A上的取值已知,则将x划入与其取值对应的子节点,且样本权重在子节点中保持为Wx;若样本x在属性A上取值未知,则将x划入所有子节点,且样本权重与属性值Av对应的子节点中,调整为Rv*Wx。直观上,就是让同一个样本以不同的概率划入到不同的子节点去。

Adaboost的集成效果为什么会比单个学习器效果好?怎么最大化其优势?

Ans:①首先介绍一下boost的理论依据。假设单个学习器的错误率为:

假设错误率相互独立,由Hoeffding不等式可以得到整体学习器的错误率:

由不等式右边可知:如果学习器的数目T逐渐增大,那么整个学习器的错误率将指数级下降,甚至最终趋向于0

最大化优势的核心在于:如何生成准确性又不是很差,并能保证多样性的个体学习器?(保证错误率假设成立)。两种方式:Boosting——个体学习器间存在强依赖关系,必须串行生成;Bagging——个体之间不存在强依赖关系,并行生成(如 随机森林)

正则化

L1范数和L2范数的区别是什么?

Ans:①L1范数——指向量中各个元素的绝对值之和,又叫“稀疏规则算子”(Lasso regularization)。它可以实现特征的自动选择,一般,大部分特征xy没有多大关系,在最小化目标函数时,考虑这些额外的特征虽然能减少训练误差,但是在预测新样本时,会干扰模型对正确结果的预测。L1算子可以学习去掉这些没有信息的特征,让其对应的权重为0。

L2范数——在回归里面,又称“岭回归”(Ridge Regression),有时也被称为“权值衰减”(weight decay)。它可以解决过拟合,使得w的每个元素都很小(接近0),但不会置为0.

③加入正则相当于加入了一种先验L1相当于加入了Laplacean先验;L2相当于加入了Gaussian先验。

机器学习中,为何要常对数据进行归一化?

1. 归一化能够提高梯度下降的最优解求解速度。

详细参考斯坦福视频:https://class.coursera.org/ml-003/lecture/21



如上图所示,蓝色线代表特征等高线,X1和X2的特征区间相差很大,当使用梯度下降法求解时,很可能走“之字型”路线(垂直等高线),从而需要迭代很多次才能收敛;

归一化后,等高线显得很圆,梯度下降能很快收敛。

2. 归一化,有可能提高精度

一些分类器需要计算样本之间的距离(如kNN中的欧式距离)。如果一个特征值范围非常大,那么距离计算就主要取决于这个特征。

  • 线性归一

x = x - min(x) / max(x) - min(x)

  • 标准化归一

x = x - μ / σ

  • 非线性归一化

    经常用在数据分化比较大的情况,如log2,log10

哪些机器学习算法不需要做归一化

概率模型(或树形模型),如决策树,随机森林

为什么树形结构不需要归一化?

数值缩放,不影响分裂点的位置。

因为第一步都是按照特征值进行排序,排序不变,所属的分支和分裂点就不会不同。一般树形结构不能进行梯度下降

因为树模型是阶跃的,阶跃点不可导,所以树模型寻找最优点是通过寻找最优分裂点完成的。

机器学习常见面试题—支持向量机SVM的更多相关文章

  1. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  2. Web开发的常见面试题HTML和HTML5等

    作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...

  3. 常见面试题之ListView的复用及如何优化

    经常有人问我,作为刚毕业的要去面试,关于安卓开发的问题,技术面试官会经常问哪些问题呢?我想来想去不能一股脑的全写出来,我准备把这些问题单独拿出来写,并详细的分析一下,这样对于初学者是最有帮助的.这次的 ...

  4. iOS常见面试题汇总

    iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...

  5. JDBC常见面试题

    以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...

  6. Mybatis常见面试题

    Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...

  7. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  8. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  9. PHP常见面试题汇总(二)

    PHP常见面试题汇总(二)   //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...

随机推荐

  1. Javascript之封装运动函数

    @ 目录 阶段一.仅适用单位带px属性的匀速运动 阶段二.可适用单位不带px属性(如opacity)的匀速运动 阶段三.适用于多元素单一属性的匀速运动 阶段四.适用于多元素单一属性的匀速或缓冲运动 阶 ...

  2. 使用TensorFlow v2.0构建多层感知器

    使用TensorFlow v2.0构建一个两层隐藏层完全连接的神经网络(多层感知器). 这个例子使用低级方法来更好地理解构建神经网络和训练过程背后的所有机制. 神经网络概述 MNIST 数据集概述 此 ...

  3. 百道Python面试题实现,搞定Python编程就靠它

    对于一般的机器学习求职者而言,最基础的就是掌握 Python 编程技巧,随后才是相关算法或知识点的掌握.在这篇文章中,我们将介绍一个 Python 练习题项目,它从算法练习题到机试实战题提供了众多问题 ...

  4. 我的Keras使用总结(4)——Application中五款预训练模型学习及其应用

    本节主要学习Keras的应用模块 Application提供的带有预训练权重的模型,这些模型可以用来进行预测,特征提取和 finetune,上一篇文章我们使用了VGG16进行特征提取和微调,下面尝试一 ...

  5. Arcgis连接SQL Server提示试图使用不支持的旧版SQL Server客户端通信软件进行连接

    一般提示这种错误的是arcgis服务区和SQL server服务器不在同一台电脑上,但在同一个局域网. 遇到这种问题是arcgis 服务器客户端连接SQL server数据库有问题,要么是客户端没有安 ...

  6. 模块 pillow图像处理

    Pillow概况 PIL是Python的一种图像处理工具. PIL支持大部分的图像格式,高效并强大. 核心库设计用来高速访问基于基于像素的数据存储,给这个通用的图像处理工具提供了坚实的基础. 一.读. ...

  7. Codeforces 631 (Div. 2) D. Dreamoon Likes Sequences 位运算^ 组合数 递推

    https://codeforces.com/contest/1330/problem/D 给出d,m, 找到一个a数组,满足以下要求: a数组的长度为n,n≥1; 1≤a1<a2<⋯&l ...

  8. Javascript/Jquery实现日期前一天后一天

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  9. 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)

    作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...

  10. 使用Azure Functions 在web 应用中启用自动更新(一)分析基于轮询的 Web 应用的限制

    1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...