机器学习常见面试题—支持向量机SVM
前言
总结了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)。它可以实现特征的自动选择,一般,大部分特征x和y没有多大关系,在最小化目标函数时,考虑这些额外的特征虽然能减少训练误差,但是在预测新样本时,会干扰模型对正确结果的预测。L1算子可以学习去掉这些没有信息的特征,让其对应的权重为0。
②L2范数——在回归里面,又称“岭回归”(Ridge Regression),有时也被称为“权值衰减”(weight decay)。它可以解决过拟合,使得w的每个元素都很小(接近0),但不会置为0.
③加入正则相当于加入了一种先验。L1相当于加入了Laplacean先验;L2相当于加入了Gaussian先验。
机器学习中,为何要常对数据进行归一化?
1. 归一化能够提高梯度下降的最优解求解速度。
如上图所示,蓝色线代表特征等高线,X1和X2的特征区间相差很大,当使用梯度下降法求解时,很可能走“之字型”路线(垂直等高线),从而需要迭代很多次才能收敛;
归一化后,等高线显得很圆,梯度下降能很快收敛。
2. 归一化,有可能提高精度
一些分类器需要计算样本之间的距离(如kNN中的欧式距离)。如果一个特征值范围非常大,那么距离计算就主要取决于这个特征。
- 线性归一
x = x - min(x) / max(x) - min(x)
- 标准化归一
x = x - μ / σ
- 非线性归一化
经常用在数据分化比较大的情况,如log2,log10
哪些机器学习算法不需要做归一化
概率模型(或树形模型),如决策树,随机森林
为什么树形结构不需要归一化?
数值缩放,不影响分裂点的位置。
因为第一步都是按照特征值进行排序,排序不变,所属的分支和分裂点就不会不同。一般树形结构不能进行梯度下降
因为树模型是阶跃的,阶跃点不可导,所以树模型寻找最优点是通过寻找最优分裂点完成的。
机器学习常见面试题—支持向量机SVM的更多相关文章
- java常见面试题及答案 1-10(基础篇)
java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...
- Web开发的常见面试题HTML和HTML5等
作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...
- 常见面试题之ListView的复用及如何优化
经常有人问我,作为刚毕业的要去面试,关于安卓开发的问题,技术面试官会经常问哪些问题呢?我想来想去不能一股脑的全写出来,我准备把这些问题单独拿出来写,并详细的分析一下,这样对于初学者是最有帮助的.这次的 ...
- iOS常见面试题汇总
iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...
- JDBC常见面试题
以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...
- Mybatis常见面试题
Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...
- JavaSE:数据类型之间的转换(附常见面试题)
数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...
- 整理的最全 python常见面试题(基本必考)
整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...
- PHP常见面试题汇总(二)
PHP常见面试题汇总(二) //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...
随机推荐
- 李宏毅老师机器学习课程笔记_ML Lecture 1: ML Lecture 1: Regression - Demo
引言: 最近开始学习"机器学习",早就听说祖国宝岛的李宏毅老师的大名,一直没有时间看他的系列课程.今天听了一课,感觉非常棒,通俗易懂,而又能够抓住重点,中间还能加上一些很有趣的例子 ...
- UVa 11059 最大乘积 java 暴力破解
题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...
- 使用 NLTK 对文本进行清洗,索引工具
使用 NLTK 对文本进行清洗,索引工具 EN_WHITELIST = '0123456789abcdefghijklmnopqrstuvwxyz ' # space is included in w ...
- react 周期函数
1.constructor():构造函数执行时间:组件被加载前最先调用,并且仅调用一次作用:定义状态机变量注意:第一个语句必须是super(props),正确定义状态机代码如下constructor( ...
- 本地缓存Ehcache
1,什么是Ehcache Ehcache是纯java的开源缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.它主要面向通用缓存.Java EE和轻量级容器, ...
- 深入理解NIO(二)—— Tomcat中对NIO的应用
深入理解NIO(二)—— Tomcat中对NIO的应用 老哥行行好,转载和我说一声好吗,我不介意转载的,但是请把原文链接贴大点好吗 Tomcat大致架构 先贴两张图大致看一眼Tomcat的架构 Tom ...
- 面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!
文章每周持续更新,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( ...
- 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 ...
- centos7 编译安装mysql5.7
mysql源码可以到官网下载 安装依赖包 yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmak ...
- Golang 实现 Redis(4): AOF 持久化与AOF重写
本文是使用 golang 实现 redis 系列的第四篇文章,将介绍如何使用 golang 实现 Append Only File 持久化及 AOF 文件重写. 本文完整源代码在作者GithubHDT ...