前言

总结了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. 李宏毅老师机器学习课程笔记_ML Lecture 1: ML Lecture 1: Regression - Demo

    引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...

  2. UVa 11059 最大乘积 java 暴力破解

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  3. 使用 NLTK 对文本进行清洗,索引工具

    使用 NLTK 对文本进行清洗,索引工具 EN_WHITELIST = '0123456789abcdefghijklmnopqrstuvwxyz ' # space is included in w ...

  4. react 周期函数

    1.constructor():构造函数执行时间:组件被加载前最先调用,并且仅调用一次作用:定义状态机变量注意:第一个语句必须是super(props),正确定义状态机代码如下constructor( ...

  5. 本地缓存Ehcache

    1,什么是Ehcache    Ehcache是纯java的开源缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.它主要面向通用缓存.Java EE和轻量级容器, ...

  6. 深入理解NIO(二)—— Tomcat中对NIO的应用

    深入理解NIO(二)—— Tomcat中对NIO的应用 老哥行行好,转载和我说一声好吗,我不介意转载的,但是请把原文链接贴大点好吗 Tomcat大致架构 先贴两张图大致看一眼Tomcat的架构 Tom ...

  7. 面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!

    文章每周持续更新,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( ...

  8. Codeforces #614 div.2 (A-E)

    A  ConneR and the A.R.C. Markland-N #include <bits/stdc++.h> using namespace std; #define ll l ...

  9. centos7 编译安装mysql5.7

    mysql源码可以到官网下载 安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmak ...

  10. Golang 实现 Redis(4): AOF 持久化与AOF重写

    本文是使用 golang 实现 redis 系列的第四篇文章,将介绍如何使用 golang 实现 Append Only File 持久化及 AOF 文件重写. 本文完整源代码在作者GithubHDT ...