机器学习面试准备(持续更新)

机器学习问题汇总

http://blog.csdn.net/q383700092/article/details/58605715

线性与非线性

机器学习里面模型的线性与非线性说的是模型结果与参数之间的关系,模型结果与参数是非线性关系即为非线性模型。非线性模型又存在变量变换成线性问题和变换不成线性问题(本质非线性)两种。
这里写图片描述
参考《概率论与数理统计》浙大第四版p257

LR(Logistic Regression)逻辑回归

LR回归是一个线性的二分类模型,主要是计算在某个样本特征下事件发生的概率。LR的最终值是根据一个线性和函数再通过一个sigmod函数来求得。sigmoid函数(也叫逻辑斯谛函数)。
伪代码实现:
1、预测函数 y=1/(1+exp(-wx+b)) wx+b=0为决策边界 用线性回归的预测结果逼近真实标记的对数几率
2、假设 类的后验概率最大情况下,即每个样本属于其真实标记的概率越大越好,预测该类的时候最好,预测函数含义为正负类概率,极大似然估计含义为 每类出现对数概率乘积 = 》max (极大似然函数)=》损失函数 min -(极大似然函数)
3、损失最小得出参数
输入:训练集D={(x1,y1)…}
应用极大似然估计估计模型参数
求似然函数L(w)极大值(通常会采样随机梯度下降法和拟牛顿迭代法来进行优化
)wi+1=wi+a*梯度
得到w的估计值w~
P(Y=0|x)=1/1+exp(w~*x)
P(Y=1|x)=1-(Y=0|x)=exp(w~*x)/1+exp(w~*x)
手推:
1. 假设z=wx+b >0为正例 <0为负例
引入sigmoid函数z>0 y>0.5 z<0 y<0.5
2. Y=1/(1+exp(-(wx+b))) Y=y/(1-y) odds一个事件的几率=该事件发生的概率与该事件不发生的概率的比值
3. sigmoid函数取对数
ln(y/1-y)=wx+b ln(y/1-y)对数几率
y为正例/1出现的概率 1-y为负例/0出现的概率
p(1|x)=exp(wx+b)/(1+exp(wx+b))
p(0|x)=1/(1+exp(wx+b))
4. 利用极大似然法估计参数
L(w)=p(1|x)p(0|x)
取对数
logL(w)=(yilog(p(1|xi))+(1yi)log(p(0|xi)) yi取0/1
损失函数也可理解为
J=1m(yilog(p(1|xi))+(1yi)log(p(0|xi))
使取对数后的极大似然函数求极大值下的w等价于损失函数J求最小值下的w
5. 解最优化问题-随机梯度下降法/牛顿法/拟牛顿法 得到w~
6. 带入以下公式求出概率值
p(1|x)=exp(wx+b)/(1+exp(wx+b))
p(0|x)=1/(1+exp(wx+b))

LR的过拟合问题:
如果我们有很多的特性,在训练集上拟合得很好,但是在预测集上却达不到这种效果
1. 减少feature个数(人工定义留多少个feature、算法选取这些feature)
2. 正则化(留下所有的feature,但对于部分feature定义其parameter非常小),在损失函数上加正则项注意:这里的偏置不受正则化影响
LR的多分类:softmax函数
softmax:假设离散型随机变量Y的取值集合是{1,2,..,k},则多分类的LR为
P(Y=a|x)=exp(wa*x)/(1-1到k求和(wk*x)) 1

SVM

手推
找到一个间隔最大的最优分离超平面
1. 定义了x到超平面的距离为 r=yi(wx+b)|w| ,yi(wx+b)=r r成比例增加w与b也成比例增加 不影响最优化结果 所以取r=1
2. 两个异类支持向量到超平面的距离 2|w|
3. 最大化 2|w| =最小化 12|w|2
s.t. yi(wx+b)>=1
求解最优化问题-使用拉格朗日乘子法 构建L(w,b,a) a为拉格朗日乘子
求解对偶问题max(a)min(w,b)L(w,b,a)
求minL求w,b偏导 得出关于a的等式带入L
minL(a)
求maxminL(a)等价于min-L(a) 化简结果带xTx
得出a(SMO算法先固定2个ai求解最优迭代) 即可算出w与b
4. 分离超平面 wx+b=0 决策函数(符号函数)f(x)=sign(wx+b)
引入惩罚系数C 修正一部分不满足的特异点
C>0 C大 对误分类惩罚增大 C小对误分惩罚减小
变化最小化 12|w|2+Cδ
s.t. yi(wx+b)>=1δ

调整C正则化特征
在SVM的应用中,径向基函数就是指高斯核函数;
exp(-(x-c)^2/r^2) r方差c均值 svm里面 c为xj

SVM算法优点:
  可用于线性/非线性分类,也可以用于回归;
  低泛化误差;
  容易解释;
缺点:
  对参数和核函数的选择比较敏感;
  原始的SVM只比较擅长处理二分类问题;

泛化误差界的公式为:
R(w)≤Remp(w)+Ф(n/h)
公式中R(w)就是真实风险,Remp(w)就是经验风险(分类器在给定样本上的误差),Ф(n/h)就是置信风险(多大程度上可以信任分类器在未知数据上分类的结果)。
统计学习的目标从经验风险最小化变为了寻求经验风险与置信风险的和最小,即结构风险最小。
SVM正是这样一种努力最小化结构风险的算法。
SVM算法要求的样本数是相对比较少的(小样本,并不是说样本的绝对数量少)
非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现

硬间隔支持向量机(线性分类器)
软间隔支持向量机(线性分类器)
非线性支持向量机(核技巧与软间隔最大化)

SVM核函数的选择
线性可分:线性核函数
线性不可分:选择非线性核函数:多项式核函数、高斯核函数、拉普拉斯核函数、sigmoid核函数
1). Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
2). RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。
高斯核,这个核就是最开始提到过的会将原始空间映射为无穷维空间的那个家伙。不过,如果方差选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果方差选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。
这些函数中应用最广的应该就是RBF核了,无论是小样本还是大样本,高维还是低维等情况,RBF核函数均适用,它相比其他的函数有一下优点:
1)RBF核函数可以将一个样本映射到一个更高维的空间,而且线性核函数是RBF的一个特例,也就是说如果考虑使用RBF,那么就没有必要考虑线性核函数了。
2)与多项式核函数相比,RBF需要确定的参数要少,核函数参数的多少直接影响函数的复杂程度。另外,当多项式的阶数比较高时,核矩阵的元素值将趋于无穷大或无穷小,而RBF则在上,会减少数值的计算困难。
3)对于某些参数,RBF和sigmoid具有相似的性能。
1. 如果Feature的数量很大,跟样本数量差不多,这时候选用LR或者是Linear Kernel的SVM
2. 如果Feature的数量比较小,样本数量一般,不算大也不算小,选用SVM+Gaussian Kernel
3. 如果Feature的数量比较小,而样本数量很多,需要手工添加一些feature变成第一种情况

GBDT

由多棵回归决策树组成,所有树的结论累加起来做最终答案
1. 明确损失函数是所有累计误差最小F=argminExy[L(y,Fx)]
2. 构建第一棵回归树f(0)
3. 学习多棵回归树
迭代:计算梯度/残差gm(如果是均方误差为损失函数即为残差)
步长/缩放因子p
第m棵树fm=p*gm
模型Fm=Fm-1+p*gm
4. F(x)等于所有树结果累加

回归决策树:
GBDT中的树都是回归树,核心在于累加所有树的结果作为最终结果
回归树总体流程
1在每个节点(不一定是叶子节点)都会得一个预测值,该预测值等于属于这个节点属性的平均值
2 分枝时穷举每一个feature的每个阈值找最好的分割点,衡量最好的标准最小化均方差(1/n*误差平方和)
3 分枝直到每个叶子节点上属性都唯一(这太难了)或者达到预设的终止条件(如叶子个数上限)
注:如果feature个数太多,每一棵回归树都要耗费大量时间,这时每个分支时可以随机抽一部分feature来遍历求最优

GBDT优缺点:
防止过拟合。每次走一小步逐渐逼近结果的效果,要比每次迈一大步很快逼近结果的方式更容易避免过拟合,后面的树越来越专注那些前面被分错的实例。
非线性变换比较多,表达能力强,而且不需要做复杂的特征工程和特征变换。
GBDT的缺点也很明显,Boost是一个串行过程,不好并行化,而且计算复杂度高

一阶指数平滑

对离预测期较近的观察值赋予较大的权数,对离预测值较远的观察值赋予较小的权数,权数由近到远按指数规律递减,所以叫做指数平滑法。
递推公式:
Ft+1=aYt+(1-a)Ft
Ft+1为t+1期的预测值
Yt为t期的实际值
Ft为t期的预测值
转换为一般公式:
Ft+1=aYt+(1-a)aYt-1+(1-a)^2aYt-2+…+(1-a)^tY1

梯度下降

梯度下降法,就是利用负梯度方向来决定每次迭代的新的搜索方向,使得每次迭代能使待优化的目标函数逐步减小。
伪代码实现:
输入:目标函数f(x) 梯度函数g(x)=f(x)’ 计算精度为e
输出:f(x)的极小点x’
1. 取初始值X0 K=0
2. 计算f(xk) k步的函数值
3. 计算梯度gk=g(xk) k步的梯度值
小于阈值 停止迭代 x’=xk
否则 Pk=-g(xK) 求ak 使 f(xk+ak)=minf(xk+ak)
4. xk+1=xk+aPk 计算 f(xk+1)
f(xk+1)-f(xk) 小于阈值 停止迭代 x’=xk+1
5. 否则 K=K+1 转3
随机梯度下降每次更新计算的是单个样本增量计算
批量梯度下降每次更新计算的是全体样本
http://blog.csdn.net/a819825294/article/details/52172463
http://blog.csdn.net/lilyth_lilyth/article/details/8973972

LDA线性判断

1、预测函数 预测的y值离哪个类投影到直线上的中心点的距离近 就属于哪一类
2、 假设 高维数据投影到低纬 直线 使类间距离最大,类内距离最小
=》损失函数 min -“广义瑞利商”
3、损失最小得出参数

最小二乘法

最小二乘法的原则是以“残差平方和最小”
伪代码:
输入:目标函数f(x) 平方损失函数h(x)
输出:f(x)的系数
1、h(x)求偏导h(x)’=0
2、得出系数的公式
与梯度下降比较:
1.实现方法和结果不同:最小二乘法是直接对损失函数求导找出全局最小,是非迭代法。而梯度下降法是一种迭代法,先给定一个梯度值,然后向损失函数下降最快的方向调整梯度值,在若干次迭代之后找到局部最小。梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,其改进大多是在这两方面下功夫。

KNN回归

在找到最近的k个实例之后,可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值,这个权重与度量距离成反比(越近权重越大)。
1、计算距离,保存topN
2、回归算均值 分类看topN所属类别最多

KNN算法的优点:
思想简单,理论成熟,既可以用来做分类也可以用来做回归;
可用于非线性分类;
训练时间复杂度为O(n);
准确度高,对数据没有假设,对outlier(离群点)不敏感;
缺点:
计算量大;
样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
需要大量的内存;

改进kd树
把样本构建成kd树,然后找该样本附近区域搜索值
1.找出某特征方差最大
2.计算该特征值得中位数把数据划分成两部分
3.对划分的两部分递归构建二叉树
http://blog.csdn.net/qll125596718/article/details/8426458

Kmeans

伪代码:

选择K个点作为初始质心  
repeat  
    将每个点指派到最近的质心,形成K个簇  
    重新计算每个簇的质心  
until 簇不发生变化或达到最大迭代次数  

缺点:
K是事先给定的,这个K值的选定是非常难以估计的
人为地确定初始聚类中心

改进
K确定的方法
http://blog.csdn.net/qll125596718/article/details/8243404/
k-means++算法选择初始seeds的基本思想就是:初始的聚类中心之间的相互距离要尽可能的远。

 从输入的数据点集合中随机选择一个点作为第一个聚类中心
对于数据集中的每一个点x,计算它与最近聚类中心(指已选择的聚类中心)的距离D(x)
选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大
重复23直到k个聚类中心被选出来
利用这k个初始的聚类中心来运行标准的k-means算法

apriori频繁项集算法

1.依据支持度(支持度:P(A ∩ B),既有A又有B的概率)找出所有频繁项集(频度)
2.依据置信度(P(B|A),在A发生的事件中同时发生B的概率 p(AB)/P(A) )产生关联规则(强度)

过程是:从C1= {{0},{1},{2},{3}}开始,然后生成L1,L1是C1中项集的支持度大于等于最小支持度,比如L1 = {{0},{1},{3}}。然后由L1组合得到C2 = {{01},{03},{13}}。一直进行下去直到Ck为空。
缺点:
可能产生大量的候选集,以及可能需要重复扫描数据库
http://blog.csdn.net/qustdjx/article/details/12770883
http://blog.csdn.net/lizhengnanhua/article/details/9061755

FP-Tree算法

http://blog.csdn.net/lmm2003/article/details/6882737

监督与非监督区别

是否有监督(supervised),就看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。
半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。利用少量标注样本和大量未标注样本进行机器学习,从概率学习角度可理解为研究如何利用训练样本的输入边缘概率 P( x )和条件输出概率P ( y | x )的联系设计具有良好性能的分类器。

生成模型和判别模型区别

监督学习分为生成模型和判别模型。
生成模型:由数据学习联合概率分布,然后求出条件概率分布作为预测的模型。给定x产生出y的生成关系。
eg:朴素贝叶斯、隐马尔科夫
特点:可还原联合概率分布,收敛速度快,隐变量存在也学习。
判别模型:由数据直接学习决策函数或者条件概率分布作为预测模型。给定x应该预测什么样的输出y。
eg:KNN、感知机、决策树、逻辑斯蒂回归、最大熵、svm、提升方法、条件随机场
特点:直接预测、准确率高、使用特征简化学习。
注:
条件概率:类似事件A在另外一个事件B已经发生条件下的发生概率,在某条件下事件发生的概率。
联合概率:指类似于P(X=a,Y=b)这样,包含多个条件,且所有条件同时成立的概率
边缘概率:是某个事件发生的概率,而与其它事件无关
后验概率:已知原分布,在实际发生某事件时,是原先某情况的可能性。
后验概率在某些情况下是条件概率的一种
这里写图片描述

常见算法伪代码实现

http://blog.csdn.net/a819825294/article/details/52275798#t2

L1与L2正则化区别

监督学习目标是规则化参数的同时最小化误差。加入正则化参数防止过拟合。
L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”。L1范数完成了特征自动选择,它会学习地去掉这些没有信息的特征,也就是把这些特征对应的权重置为0。(特征变稀疏)Lasso
L2范数是指向量各元素的平方和然后求平方根。
可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。
L1和L2的差别:
(核心:L2对大数,对outlier离群点更敏感!)
下降速度:最小化权值参数L1比L2变化的快
模型空间的限制:L1会产生稀疏 L2不会。
L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。
Lasso在特征选择时候非常有用,而Ridge就只是一种规则化而已。
对大尺度数据L1节省空间但对极端值不敏感,使学习到的参数倾向于稀疏。L2范数对大数的惩罚比小数大。常用L2。
参考
http://blog.csdn.net/zouxy09/article/details/24971995/

决策树ID3、C4.5、CART

决策树三步骤:特征选择、生成树(考虑局部最优)、减枝(考虑全局最优)

ID3 (只考虑了信息增益,容易过拟合)

1.首先是针对当前的集合,计算每个特征的信息增益
2.然后选择信息增益最大的特征作为当前节点的决策决策特征
3.根据特征不同的类别划分到不同的子节点(比如年龄特征有青年,中年,老年,则划分到3颗子树)信息增益小于阈值停止。
4.然后继续对子节点进行递归,直到所有特征都被划分

注:熵表示随机变量不确定性的度量
H(x)=nipilogpi
条件熵X条件下Y的不确定性
H(Y|X)=nipiH(Y|X=xi)
熵越大,随机变量的不确定性就越大(某种情况出现的概率越大熵越小)
信息增益:得知特征X的信息而使类Y的信息的不确定性减少的程度。(偏向选择取值较多的特征)
特征A训练集D,H(D)-H(D|A)为互信息 决策树中信息增益=互信息
g(D,A)=H(D)-H(D|A)
特征A使分类不确定性减少(A能提供分类准确率)信息增益g(D,A)表示A使不确定性减少的程度(A越有效信息增益越大)

C4.5(ID3的改进算法,使用信息增益率来进行属性的选择)
优缺点:
准确率高,但是子构造树的过程中需要进行多次的扫描和排序(ID3也是),所以它的运算效率较低。
信息增益率:校正信息增益偏向选择取值较多的特征的问题。
gR(D,A)=g(D,A)HA(D)
A对D的信息增益率=A对D的信息增益/特征A的熵

CART:可分类可回归
分类回归树(Classification And Regression Tree)是一个决策二叉树,在通过递归的方式建立,每个节点在分裂的时候都是希望通过最好的方式将剩余的样本划分成两类,这里的分类指标:
分类树:基尼指数最小化(gini_index)
回归树:平方误差最小化

分类树:

首先是根据当前特征计算特征的基尼指数与特征每个取值的基尼指数
选择基尼指数最小的特征作为划分特征
从该特征中查找基尼指数最小的分类类别作为最优划分点
将当前样本划分成两类,一类是划分特征的类别等于最优划分点,另一类就是不等于
针对这两类递归进行上述的划分工作,直达所有叶子指向同一样本目标或者叶子个数小于一定的阈值

注:基尼指数表示不确定性,基尼指数越大不确定性越大(A特征越有效基尼指数越小)跟熵类似
二分类问题:Gini(p)=2p(1-p)
Gini(D)=1k1(|Ck||D|)2
D2=D-D1 (D1指A=a,D2指不属于a)
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

回归树:
以平方误差最小化的准则划分为两块区域,预测值为该叶子节点上样本的均值ci。
=sigma

遍历特征计算最优的划分点s(特征j的取值),多个(j,s)对(每个特征上的最优划分点)
使其最小化的平方误差是:  
min{min(R1.sigma((yi-c1)^2))+min(R2.sigma((yi-c2)^2))}
计算根据s划分到左侧和右侧子树的目标值与预测值之差的平方和最小,这里的预测值是两个子树上输入xi样本对应yi的均值
找到最小的划分特征j以及其最优的划分点s,根据特征j以及划分点s将现有的样本划分为两个区域,一个是在特征j上小于等于s,另一个在在特征j上大于s
R1(j)={x|x(j)<=s}、R2(j)={x|x(j)>s}
进入两个子区域按上述方法继续划分,直到到达停止条件

关于剪枝:
用独立的验证数据集对训练集生长的树进行剪枝(事后剪枝)。优化损失函数且减小模型复杂度。
CART剪值:从底端不断剪枝形成子树序列,然后交叉验证在独立验证集上选择最优子树

停止条件:
直到每个叶子节点都只有一种类型的记录时停止,(这种方式很容易过拟合)
另一种时当叶子节点的记录树小于一定的阈值或者节点的信息增益小于一定的阈值时停止

关于特征与目标值:
特征离散 目标值离散:可以使用ID3,CART
特征连续 目标值离散:将连续的特征离散化 可以使用ID3,CART
特征离散 目标值连续: CART

决策树的分类与回归:
分类树
输出叶子节点中所属类别最多的那一类
回归树
输出叶子节点中各个样本值的平均值

理想的决策树:
叶子节点数尽量少
叶子节点的深度尽量小(太深可能会过拟合)

解决决策树的过拟合:
前置剪枝:在分裂节点的时候设计比较苛刻的条件,如不满足则直接停止分裂(这样干决策树无法到最优,也无法得到比较好的效果)
后置剪枝:在树建立完之后,用单个节点代替子树,节点的分类采用子树中主要的分类(这种方法比较浪费前面的建立过程)

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值