BAT 机器学习面试 1000 题系列
http://m.blog.csdn.net/v_JULY_v/article/details/78121924
请简要介绍下 SVM
SVM,全称是 support vector machine,中文名叫支持向量机。
SVM 是一个面向数据的分类算法,它的目标是为确定一个分类超平
面,从而将不同的数据分隔开。
请简要介绍下 tensorflow 的计算图
Tensorflow 是一个通过计算图的形式来表述计算的编程系统,
计算图也叫数据流图,可以把计算图看做是一种有向图,Tensorflow
中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计
算之间的依赖关系。
在 k-means 或 kNN,我们常用欧氏距离来计算最近的邻居之
间的距离,有时也用曼哈顿距离,请对比下这两种距离的差别。
欧氏距离,最常见的两点之间或多点之间的距离表示法,又称之
为欧几里得度量,它定义于欧几里得空间中,如点 x=(x1,...,xn)和
y=(y1,...,yn)之间的距离为:
曼哈顿距离,我们可以定义曼哈顿距离的正式意义为 L1-距离或
城市区块距离,也就是在欧几里得空间的固定直角坐标系上两点所形
成的线段对轴产生的投影的距离总和。例如在平面上,坐标(x1,y1)
的 点 P1 与 坐 标 ( x2,y2 ) 的 点 P2 的 曼 哈 顿 距 离 为 :
,要注意的是,曼哈顿距离依赖座标系统的转
度,而非系统在座标轴上的平移或映射。
通俗来讲,想象你在曼哈顿要从一个十字路口开车到另外一个十
字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越
大楼。而实际驾驶距离就是这个“曼哈顿距离”,这也是曼哈顿距离
名 称 的 来 源 , 同 时 , 曼 哈 顿 距 离 也 称 为 城 市 街 区 距 离
(CityBlockdistance)。
把 LR 从头到脚都给讲一遍。建模,现场数学推导,每种解法的
原理,正则化,LR 和 maxent 模型啥关系,lr 为啥比线性回归好。
有不少会背答案的人,问逻辑细节就糊涂了。原理都会?那就问工程,
并行化怎么做,有几种并行化方式,读过哪些开源的实现。
overfitting 怎么解决:
dropout、regularization、batch normalization
LR 和 SVM 的联系与区别
联系:
1、LR 和 SVM 都可以处理分类问题,且一般都用于处理线性二
分类问题(在改进的情况下可以处理多分类问题)
2、两个方法都可以增加不同的正则化项,如 l1、l2 等等。所以
在很多实验中,两种算法的结果是很接近的。
区别:
1、LR 是参数模型,SVM 是非参数模型。
2、从目标函数来看,区别在于逻辑回归采用的是 logistical loss,
SVM 采用的是 hinge loss,这两个损失函数的目的都是增加对分类
影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
3、SVM 的处理方法是只考虑 support vectors,也就是和分类
最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大
减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据
点的权重。
4、逻辑回归相对来说模型更简单,好理解,特别是大规模线性
分类时比较方便。而 SVM 的理解和优化相对来说复杂一些,SVM 转
化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在
进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
5、logic 能做的 svm 能做,但可能在准确率上有问题,svm 能
做的 logic 有的做不了。
说说你知道的核函数
通常人们会从一些常用的核函数中选择(根据问题和数据的不同,
选择不同的参数,实际上就是得到了不同的核函数),例如:
多项式核,显然刚才我们举的例子是这里多项式核的一个特例
(R=1,d=2)。虽然比较麻烦,而且没有必要,不过这个核所对应
的映射实际上是可以写出来的,该空间的维度是
,其中 是原
始空间的维度。
高斯核
,这个核就是最开始提到
过的会将原始空间映射为无穷维空间的那个家伙。不过,如果 选得
很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数
值上近似一下)相当于一个低维的子空间;反过来,如果 选得很小,
则可以将任意的数据映射为线性可分——当然,这并不一定是好事,
因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通
过调控参数 ,高斯核实际上具有相当高的灵活性,也是使用最广泛
的核函数之一。下图所示的例子便是把低维线性不可分的数据通过高
斯核函数映射到了高维空间:
线性核
,这实际上就是原始空间中的内积。
这个核存在的主要目的是使得“映射后空间中的问题”和“映射前
空间中的问题”两者在形式上统一起来了(意思是说,咱们有的时候,
写代码,或写公式的时候,只要写个模板或通用表达式,然后再代入
不同的核,便可以了,于此,便在形式上统一了起来,不用再分别写
一个线性的,和一个非线性的)。
LR 与线性回归的区别与联系
个人感觉逻辑回归和线性回归首先都是广义的线性回归,
其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是
似然函数,
另外线性回归在整个实数域范围内进行预测,敏感度一致,而分
类范围,需要在[0,1]。逻辑回归就是一种减小预测范围,将预测值限
定为[0,1]间的一种回归模型,因而对于这类问题来说,逻辑回归的鲁
棒性比线性回归的要好。
逻辑回归的模型本质上是一个线性回归模型,逻辑回归都是以线
性回归为理论支持的。但线性回归模型无法做到 sigmoid 的非线性
形式,sigmoid 可以轻松处理 0/1 分类问题。
请问(决策树、Random Forest、Booting、Adaboot)GBDT
和 XGBoost 的区别是什么?
关于决策树,这里有篇《决策树算法》。而随机森林 Random
Forest 是一个包含多个决策树的分类器。至于 AdaBoost,则是英文
"Adaptive Boosting"(自适应增强)的缩写,关于 AdaBoost 可以
看下这篇文章《Adaboost 算法的原理与推导》。GBDT(Gradient
Boosting Decision Tree),即梯度上升决策树算法,相当于融合决
策树和梯度上升 boosting 算法。
xgboost 类似于 gbdt 的优化版,不论是精度还是效率上都有了
提升。与 gbdt 相比,具体的优点有:
1.损失函数是用泰勒展式二项逼近,而不是像 gbdt 里的就是一
阶导数
2.对树的结构进行了正则化约束,防止模型过度复杂,降低了过
拟合的可能性
3.节点分裂的方式不同,gbdt 是用的 gini 系数,xgboost 是经
过优化推导后的
为什么 xgboost 要用泰勒展开,优势在哪里?
xgboost 使用了一阶和二阶偏导,二阶导数有利于梯度下降的更
快更准.使用泰勒展开取得二阶倒数形式,可以在不选定损失函数具体
形式的情况下用于算法优化分析.本质上也就把损失函数的选取和模
型算法优化/参数选择分开了.这种去耦合增加了 xgboost 的适用性。
xgboost 如何寻找最优特征?是又放回还是无放回的呢?
xgboost 在训练的过程中给出各个特征的评分,从而表明每个特
征对模型训练的重要性. xgboost 利用梯度优化模型算法,样本是不
放回的(想象一个样本连续重复抽出,梯度来回踏步会不会高兴).但
xgboost 支持子采样,也就是每轮计算可以不使用全部样本。
谈谈判别式模型和生成式模型?
判别方法:由数据直接学习决策函数 Y=f(X),或者由条件分
布概率 P(Y|X)作为预测模型,即判别模型。
生成方法:由数据学习联合概率密度分布函数 P(X,Y),然后求
出条件概率分布 P(Y|X)作为预测的模型,即生成模型。
由生成模型可以得到判别模型,但由判别模型得不到生成模型。
常见的判别模型有:K 近邻、SVM、决策树、感知机、线性判别
分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、
条件随机场
常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模
型、文档主题生成模型(LDA)、限制玻尔兹曼机