- 机器学习面试问题总结
- 简书上对这个问题的一个总结:https://www.jianshu.com/p/d6f206c869ed
知乎回答一:
回归和分类的根本区别在于输出空间是否为一个度量空间
CSDN回答二:
从根本上说,分类是关于预测标签,而回归是关于预测数量。
回归问题和分类问题本质上都要建立一个映射关系
f ( x ) − > y , x ∈ A , y ∈ B f(x)->y, x\in{A}, y\in{B} f(x)−>y,x∈A,y∈B
1.回归问题的应用场景
回归问题通常是用来预测一个值,如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。一个比较常见的回归算法是线性回归算法(LR)。另外,回归分析用在神经网络上,其最上层是不需要加上softmax函数的,而是直接对前一层累加即可。回归是对真实值的一种逼近预测。
2.分类问题的应用场景
分类问题是用于将事物打上一个标签,通常结果为离散值。例如判断一幅图片上的动物是一只猫还是一只狗,分类通常是建立在回归之上,分类的最后一层通常要使用softmax函数进行判断其所属类别。分类并没有逼近的概念,最终正确结果只有一个,错误的就是错误的,不会有相近的概念。最常见的分类方法是逻辑回归,或者叫逻辑分类。
- 为什么计算损失函数最优值采用梯度下降算法而不是直接求导等于0的深度解释
通过代价函数对参数求导,令其为零,得出参数为:
参数的结果给出两个信息,同时也是直接求导不可行的原因:
- 损失函数及梯度下降
损失函数的直观理解
假设上述 J ( θ 0 , θ 1 ) J(\theta_{0},\theta_{1}) J(θ0,θ1)中 θ 0 \theta_{0} θ0为0,那么随和 θ 1 \theta_{1} θ1的变化我们可以得到下面左图所示的拟合曲线,那么随着参数的变化,损失函数的值也会改变。例如我们取 θ 1 \theta_{1} θ1为0,那么损失函数就是2.3;取 θ 1 \theta_{1} θ1为1,那么损失函数就是0。损失函数就如下图中右图所示。
如果我们把 θ 0 \theta_{0} θ0也加入,整个的损失函数就如下图所示。我们的目标就是找出全局最小值。也就是下面这个三维图形的最凹点。
其等高线图就如下图中的右图所示
梯度下降法
梯度下降算法背后的原理:目标函数 J ( θ ) J(\theta) J(θ) 关于参数 θ \theta θ 的梯度将是损失函数(loss function)上升最快的方向。而我们要最小化loss,只需要将参数沿着梯度相反的方向前进一个步长,就可以实现目标函数(loss function)的下降。这个步长 η \eta η 又称为学习速率。参数更新公式如下:
θ = θ ← θ − η ⋅ ∇ J ( θ ) \theta=\theta\leftarrow \theta-\eta \cdot \nabla J(\theta) θ=θ←θ−η⋅∇J(θ)
其中 ∇ J ( θ ) \nabla J(\theta) ∇J(θ) 是参数的梯度.
自适应梯度下降法
每一个参数都有一个自己的学习率并且随着训练的进行,该学习率也在不断的改变中
- 一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉
- 损失函数 - 交叉熵损失函数
- 简单交叉熵公式
二分类交叉熵损失函数公式
针对所有样本的损失函数
L = − 1 N ∑ i = 1 N [ y i l o g ( h θ ( x i ) ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ] L=-\frac{1}{N}\sum{_{i=1}^N} [y_{i}log(h_{\theta}(x_i)) + (1-y_{i})log(1-h_{\theta}(x_i))] L=−N1∑i=1N[yilog(hθ(xi))+(1−yi)log(1−hθ(xi))]
针对单个样本的损失函数
L = − y l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 1 − h θ ( x ) ) ] L= -ylog(h_{\theta}(x)) - (1-y)log(1-h_{\theta}(x))] L=−ylog(hθ(x))−(1−y)log(1−hθ(x))]
多分类交叉熵损失函数
L = 1 N ∑ i L i = 1 N [ − ∑ c = 1 M y i c l o g ( h θ ( x i c ) ) ] L = \frac{1}{N}\sum{_i}L_{i}=\frac{1}{N}[-\sum{_{c=1}^M}y_{ic}log(h_{\theta}(x_{ic}))] L=N1∑iLi=N1[−∑c=1Myiclog(hθ(xic))]
其中M是类别的数量
1.【机器学习】代价函数,损失函数,目标函数区别
- 详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解
极大似然估计,通俗理解来说,就是利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!换句话说,极大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”。
对于这个函数:
P ( x ∣ θ ) P(x|θ) P(x∣θ)
输入有两个:x表示某一个具体的数据;θ表示模型的参数。
最大似然估计(MLE)
MLE的目标是找出一组参数,使得模型产生出观测数据的概率最大
这是一个统计问题,回想一下,解决统计问题需要什么? 数据!
于是我们拿这枚硬币抛了10次,得到的数据( x 0 x_0 x0)是:反正正正正反正正正反。我们想求的正面概率θ是模型参数,而抛硬币模型我们可以假设是二项分布。
那么,出现实验结果 x 0 x_0 x0(即反正正正正反正正正反)的似然函数是多少呢?
f ( x 0 , θ ) = ( 1 − θ ) × θ × θ × θ × θ × ( 1 − θ ) × θ × θ × θ × ( 1 − θ ) = θ 7 ( 1 − θ ) 3 = f ( θ ) f(x_0 ,\theta) = (1-\theta)\times\theta\times\theta\times\theta\times\theta\times(1-\theta)\times\theta\times\theta\times\theta\times(1-\theta) = \theta ^ 7(1 - \theta)^3 = f(\theta) f(x0,θ)=(1−θ)×θ×θ×θ×θ×(1−θ)×θ×θ×θ×(1−θ)=θ7(1−θ)3=f(θ)
注意,这是个只关于θ的函数。而最大似然估计,顾名思义,就是要最大化这个函数.
解释一:
假设一共有10篇文章,里面4篇是你要找的。根据你某个算法,你认为其中有5篇是你要找的,但是实际上在这5篇里面,只有3篇是真正你要找的。那么你的这个算法的precision是3/5=60%,也就是,你找的这5篇,有3篇是真正对的这个算法的recall是3/4=75%,也就是,一共有用的这4篇里面,你找到了其中三篇。
解释二:
准确率(P值)
假设我此时想吃香蕉,实验室里面每天都会安排10个水果,水果种类分别是6个香蕉,3个橘子,1个菠萝。哎,但是,实验室主任搞事情啊,为了提高我们吃水果的动力与趣味,告诉我们10个水果放在黑盒子中,每个人是看不到自己拿的什么,每次拿5个出来,哎,我去抽了,抽出了2个香蕉,2个橘子,1个菠萝。
下面我们来分别求求P值,R值,F值。按照一开始说的,精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。这里我们的正样本就是我想吃的香蕉!
在预测结果中,有2个香蕉,总个数是我拿的5个,那么P值计算如下:
P = 2 / 5 P = 2 / 5 P=2/5
召回率(R值)
召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。我们这里的正类是我想吃的香蕉,而在样本中的香蕉个数是6个,召回率的召回也可以这么理解,代表了,原始样本中正类召回了多少。R值计算如下:
R = 2 / 6 R = 2 / 6 R=2/6
分母已经变成了样本中香蕉的个数啦
F值
可能很多人就会问了,有了召回率和准确率这俩个评价指标后,不就非常好了,为什么要有F值这个评价量的存在呢?
按照高中语文老师所说的,存在即合理的说法,既然F值存在了,那么一定有它存在的必要性,我们在评价的时候,当然是希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,在我们这个例子中,我们只搜索出了一个结果,且是香蕉,那么Precision就是100%,但是Recall为1/6就很低;而如果我们抽取10个水果,那么比如Recall是100%,但是Precision为6/10,相对来说就会比较低。
因此P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure,通过计算F值来评价一个指标!
我这里给出最常见的F1计算方法,如下:
F 1 = ( 2 ∗ P ∗ R ) / ( P + R ) F1 = (2*P*R) / (P+R) F1=(2∗P∗R)/(P+R)那么在我们这个例子中
F 1 = ( 2 ∗ 2 / 5 ∗ 2 / 6 ) / ( 2 / 5 + 2 / 6 ) F1 = (2*2/5*2/6)/(2/5+2/6) F1=(2∗2/5∗2/6)/(2/5+2/6)
解释三:
假设我们手上有60个正样本,40个负样本,我们要找出所有的正样本,系统查找出50个,其中只有40个是真正的正样本,计算上述各指标。
TP: 将正类预测为正类数 40
FN: 将正类预测为负类数 20
FP: 将负类预测为正类数 10
TN: 将负类预测为负类数 30
准确率(accuracy) = 预测对的/所有 = (TP+TN)/(TP+FN+FP+TN) = 70%
精确率(precision) = TP/(TP+FP) = 80%
召回率(recall) = TP/(TP+FN) = 2/3
偏差与方差是解释泛化性的一种重要工具。偏差用来衡量模型的拟合能力,方差用来衡量一个模型是否容易过拟合。
kNN算法的核心思想是用距离最近的k个样本数据的分类来代表目标数据的分类。
1.我们提出了k近邻算法,算法的核心思想是,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。更通俗说一遍算法的过程,来了一个新的输入实例,我们算出该实例与每一个训练点的距离(这里的复杂度为0(n)比较大,所以引出了下文的kd树等结构),然后找到前k个,这k个哪个类别数最多,我们就判断新的输入实例就是哪类!
2.与该实例最近邻的k个实例,这个最近邻的定义是通过不同距离函数来定义,我们最常用的是欧式距离。
3.为了保证每个特征同等重要性,我们这里对每个特征进行归一化。
4.k值的选取,既不能太大,也不能太小,何值为最好,需要实验调整参数确定!
1.带你理解朴素贝叶斯算法
2. 一个例子搞清楚(先验分布/后验分布/似然估计)
3.联合/先验/后验概率、似然函数
朴素贝叶斯中的“朴素”的由来:因为朴素贝叶斯算法要求特征之间独立。
如何求下面这个概率
根据朴素贝叶斯公式(要求特征之间相互独立),我们有:
根据上述的数据分布,我们就可以求出来在上述条件下“嫁”或者“不嫁的概率”,然后由此做分类
1. 决策树的简单介绍
决策树算法采用树形结构,使用层层推理来实现最终的分类。决策树由下面几种元素构成:
三种典型的决策树算法:
1. ID3 算法
ID3 是最早提出的决策树算法,他就是利用信息增益来选择特征的。
2. C4.5 算法
他是 ID3 的改进版,他不是直接使用信息增益,而是引入“信息增益比”指标作为特征的选择依据。
3. CART(Classification and Regression Tree)
这种算法即可以用于分类,也可以用于回归问题。CART 算法使用了基尼系数取代了信息熵模型。
决策树的优缺点
优点
缺点
如何判断是否要预剪枝?
如何判断是否要预剪枝?
对生成的完整的决策树,也是利用验证集判断剪纸前后整棵二叉树的准确度是否有提升。如果有提升就进行剪枝,否则则保留。
总结:对比预剪枝和后剪枝,能够发现,后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情形下,后剪枝决策树的欠拟合风险小,泛华性能往往也要优于预剪枝决策树。但后剪枝过程是在构建完全决策树之后进行的,并且要自底向上的对树中的所有非叶结点进行逐一考察,因此其训练时间开销要比未剪枝决策树和预剪枝决策树都大得多。
通常特征选择选择的准则是信息增益或者信息增益比。
信息增益表示得知特征X的信息而使得类Y的不确定性减少的程度。
在决策树学习的过程中对生成的决策树进行简化的过程称为剪枝。
集成学习在机器学习算法中具有较高的准去率,不足之处就是模型的训练过程可能比较复杂,效率不是很高。目前接触较多的集成学习主要有2种:基于Boosting的和基于Bagging,前者的代表算法有Adaboost、GBDT、XGBOOST、后者的代表算法主要是随机森林。
集成学习的主要思想是利用一定的手段学习出多个分类器,而且这多个分类器要求是弱分类器,然后将多个分类器进行组合公共预测。核心思想就是如何训练处多个弱分类器以及如何将这些弱分类器进行组合。
一般采用弱分类器的原因在于将误差进行均衡,因为一旦某个分类器太强了就会造成后面的结果受其影响太大,严重的会导致后面的分类器无法进行分类。常用的弱分类器可以采用误差率小于0.5的,比如说逻辑回归、SVM、神经网络。
随机森林属于bagging算法的一种, 他的原理就是构建大量的决策树,在进行预测的时候会由这些决策树得到多个预测结果。选择这些结果中的众数来作为最后的预测结果。
随机森林的构建算法:
随机森林的优缺点
优点
缺点
首先明确一点,GBDT中拟合的是负梯度而不是残差,只不过损失函数采用平方损失时,负梯度恰好就是残差。
References
- GBDT算法原理以及实例理解
- GBDT算法原理深入解析
- 梯度提升详解
- N问GBDT算法
为什么提出了GBDT?
提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方误差损失函数和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升(gradient boosting)算法。Gradient Boosting是Boosting中的一大类算法,它的思想借鉴于梯度下降法,其基本原理是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。采用决策树作为弱分类器的Gradient Boosting算法被称为GBDT.
CART回归树的原理以及实现:https://blog.csdn.net/xierhacker/article/details/64439601
首先,GBDT使用的决策树是CART回归树,无论是处理回归问题还是二分类以及多分类,GBDT使用的决策树通通都是都是CART回归树。为什么不用CART分类树呢?因为GBDT每次迭代要拟合的是梯度值,是连续值所以要用回归树。
对于回归树算法来说最重要的是寻找最佳的划分点,那么回归树中的可划分点包含了所有特征的所有可取的值。在分类树中最佳划分点的判别标准是熵或者基尼系数,都是用纯度来衡量的,但是在回归树中的样本标签是连续数值,所以再使用熵之类的指标不再合适,取而代之的是平方误差,它能很好的评判拟合程度。
回归树生成算法
输入: 训练数据集 D D D.
输出:回归树 f ( x ) f(x) f(x).
在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构成二叉决策树:
梯度提升树(Gradient Boosting)是提升树(Boosting Tree)的一种改进算法,所以在讲梯度提升树之前先来说一下提升树。
先来个通俗理解:假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。最后将每次拟合的岁数加起来便是模型输出的结果。
————————————————
提升树算法:
上述问题中的残差是什么?
残差就是梯度
是当前模型拟合数据的残差(residual)所以,对于提升树来说只需要简单地拟合当前模型的残差。
将Decision Tree和Gradient Boosting介绍完了,将这两部分组合在一起就是我们的GBDT了。
GBDT算法
初始化弱学习器 f 0 ( x ) = a r g m i n c ∑ i = 1 N L ( y i , c ) f_{0}(x) = arg min_{c}\sum{_{i=1}^N}L(y_{i},c) f0(x)=argminc∑i=1NL(yi,c)
对 m = 1 , 2 , . . . , M m=1,2,..., M m=1,2,...,M有:
待验证的理解:计算叶子区域的拟合值就是求其平均值
得到最终的学习器 f ( x ) = f M ( x ) = f 0 ( x ) + ∑ m = 1 M ∑ j = 1 J γ j m I ( x ∈ R j m ) f(x)=f_{M}(x)=f_{0}(x)+\sum{_{m=1}^M}\sum{_{j=1}^J}\gamma_{jm}I(x\in R_{jm}) f(x)=fM(x)=f0(x)+∑m=1M∑j=1JγjmI(x∈Rjm)
下面是GDBT的一个简单例子:判断用户是否会喜欢电脑游戏,特征有年龄,性别和职业。需要注意的是,GBDT无论是用于分类和回归,采用的都是回归树,分类问题最终是将拟合值转换为概率来进行分类的。
在上图中,每个用户的最后的拟合值为两棵树的结果相加。
模型公式推导
Gradient Boosting是Friedman提出的一套框架。其思想类似于数值优化中梯度下降求参方法,参数沿着梯度的负方向以小步长前进,最终逐步逼近参数的局部最优解。在GB中模型每次拟合残差,逐步逼近最终结果。
GBDT和泰勒一阶展开式的关系
- 梯度提升算法
Q1. GBDT为什么是拟合负梯度
GBDT本身就是一个回归算法,回归算法的本质就是最小化损失函数,而最小化损失函数的本质又是梯度下降。这里采用平方差和作为损失函数,其求导正好是残差,所以就相当于是利用提升树来集合残差。
Q2. 在GBDT中为什么使用泰勒公式推导梯度下降算法
泰勒公式推导只是一种方法
Q3. GBDT和提升树区别
提升树模型每一次的提升都是靠上次的预测结果与训练数据的label值差值作为新的训练数据进行重新训练,由于原始的回归树指定了平方损失函数所以可以直接计算残差,而梯度提升树针对一般损失函数,所以采用负梯度来近似求解残差,将残差计算替换成了损失函数的梯度方向,将上一次的预测结果带入梯度中求出本轮的训练数据。这两种模型就是在生成新的训练数据时采用了不同的方法。
优化目标函数: ∑ i = 1 N L ( y i , h m − 1 ( x i ) + f m ( x i ) ) \sum{_{i=1}^N}L(y_{i},h_{m-1}(x_{i})+f_{m}(x_{i})) ∑i=1NL(yi,hm−1(xi)+fm(xi))
最小化上述目标函数,也就是每添加一个弱分类器就使得损失函数下降一部分。利用泰勒公式对上述问题进行近似来回答为什么GBDT拟合的是负梯度
L ( y i , h m − 1 ( x i ) + f m ( x i ) ) = L ( y i , h m − 1 ( x i ) ) + ∂ L ( y i , f m − 1 ( x i ) ) ∂ ( f m − 1 ( x ) ) ∗ f m ( x i ) L(y_{i},h_{m-1}(x_{i})+f_{m}(x_{i})) = \\L(y_{i},h_{m-1}(x_{i}))+ \frac{\partial{L(y_{i},f_{m-1}(x_{i}))}}{\partial(f_{m-1}(x))}*f_{m}(x_{i}) L(yi,hm−1(xi)+fm(xi))=L(yi,hm−1(xi))+∂(fm−1(x))∂L(yi,fm−1(xi))∗fm(xi)
当
f m ( x i ) = − ∂ L ( y i , f m − 1 ( x i ) ) ∂ ( f m − 1 ( x ) ) f_{m}(x_{i}) = -\frac{\partial{L(y_{i},f_{m-1}(x_{i}))}}{\partial(f_{m-1}(x))} fm(xi)=−∂(fm−1(x))∂L(yi,fm−1(xi))则肯定有 L ( y i , h m − 1 ( x i ) + f m ( x i ) ) < L ( y i , h m − 1 ( x i ) ) L(y_{i},h_{m-1}(x_{i})+f_{m}(x_{i}))
也就是利用新的弱分类器取拟合当前损失函数的负梯度就会使得整个损失函数不断减小。当损失函数是平方损失的时候,负梯度就是残差,也就是说拟合残差是GBDT中的一种特殊情况。
1.Python机器学习笔记:XgBoost算法
2. XGBoost和GBDT的不同
3. XGBoost的详细公式推导
4. 目前看到的对XGBoost最好的解读
5. 20道XGBoost面试题
目标函数
其中正则项控制着模型的复杂度,包括了叶子节点数目T和leaf score的L2模的平方:
XGboost和GBDT是boosting算法的一种,XGBoost其本质上还是一个GBDT的工程实现,但是力争把速度和效率发挥到极致。
GBDT算法本身也是一种加法模型,是对提升树一种优化。他使得boosting算法可以拓展到应对任何损失函数类别。理论中,针对GBDT的损失函数做了一个一阶泰勒近似,一阶泰勒近似的结果就是一个一阶导数,也就是梯度。因此本质上GBDT是对损失函数的负梯度的一个拟合,当损失函数采用均方误差损失的时候,GBDT拟合的负梯度就是残差。在这个过程中,GBDT使用的基分类器是CART回归树。
对于XGBoost,是GBDT的一种优化。但是相对GBDT, XGBoot主要在以下几个方面做了优化:
为什么要使用二阶导数信息:
二阶信息本身就能让梯度收敛更快更准确
AdaBoos VS GBDT
Adaboost和GBDT模型都可以表示成:
F ( x ) = ∑ m = 1 M γ m h m ( x ) F(x) = \sum{_{m=1}^M}\gamma_{m}h_{m}(x) F(x)=∑m=1Mγmhm(x)
的形式。== AdaBoost ==在训练完一个 h m h_{m} hm后会重新赋值样本的权重:分类错误的样本的权重会增大,而分类正确的样本的权重会减小。这样在训练 h m + 1 h_{m+1} hm+1时会侧重对错误样本的训练,来提升模型的性能。但是Adaboot模型每个基分类器的损失函数优化目标是相同且独立的,都最优化当前样本(样本权重)的指数损失。
GBDT虽然也是一个加性模型,但是其通过不断的迭代拟合样本真实值与当前分类器的残差 y − y ^ h m − 1 y-\hat{y}_{h_{m-1}} y−y^hm−1来逼近真实值,按照这个思路,第m个基分类器的预测结果为:
F m ( x ) = F m − 1 ( x ) + γ m h m ( x ) F_{m}(x) = F_{m-1}(x)+\gamma_{m}h_{m}(x) Fm(x)=Fm−1(x)+γmhm(x)
而 h m ( x ) h_{m}(x) hm(x)的优化目标就是最小化当前预测结果 F m − 1 ( x i ) + h ( x i ) F_{m-1}(x_{i})+h(x_{i}) Fm−1(xi)+h(xi)和 y i y_{i} yi之间的差距。
h m = a r g m i n h ∑ i = 1 n L ( y i , F m − 1 ( x i ) + h ( x i ) ) h_{m} = argmin_{h}\sum{_{i=1}^{n}}L(y_{i},F_{m-1}(x_{i})+h(x_{i})) hm=argminh∑i=1nL(yi,Fm−1(xi)+h(xi))
GBDT VS XGBoost
如果不考虑工程实现、解决问题上的一些差异,xgboost与gbdt比较大的不同就是目标函数的定义。
XGBoot采用的是二阶泰勒展开式,GBDT采用的是一阶泰勒展开式。
注:红色箭头指向的l即为损失函数;红色方框为正则项,包括L1、L2;红色圆圈为常数项。xgboost利用泰勒展开三项,做一个近似,我们可以很清晰地看到,最终的目标函数只依赖于每个数据点的在误差函数上的一阶导数和二阶导数。
**对于梯度提升树,其学习流程与提升树类似只是不再使用残差作为新的训练数据而是使用损失函数的梯度作为新的新的训练数据的y值。**但是如果GBDT采用平方损失作为损失函数,其梯度就又是残差。
支持向量机通俗导论(理解SVM的三层境界)
函数间隔
几何间隔
函数间隔决定了数据点被分为某一类的确信度,而几何间隔实际上就是点到(超)平面的距离。两者是一个||w||的线性关系。那些支持向量就是函数间隔(也可以说是几何间隔,因为作了归一化限制)的临界点。有了支持向量,就可以对未知点进行预测
- 转自:https://blog.csdn.net/v_JULY_v/article/details/40718799
- Adaboost算法和加法模型、指数损失函数的关系
把Adaboost和以指数函数为损失函数的加法模型等价,也就得到了Adaboost算法中的样本权重和分类器权重的更新公式。
AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,由Yoav Freund和Robert Schapire在1995年提出。它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
整个Adaboost 迭代算法就3步:
给定一个训练数据集T={(x1,y1), (x2,y2)…(xN,yN)},yi属于标记集合{-1,+1},Adaboost的目的就是从训练数据中学习一系列弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。
Adaboost的算法流程如下:
步骤1. 首先,初始化训练数据的权值分布。每一个训练样本最开始时都被赋予相同的权值:1/N。
步骤2. 进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮
a. 使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器):
b. 计算Gm(x)在训练数据集上的分类误差率
由上述式子可知,Gm(x)在训练数据集上的误差率em就是被Gm(x)误分类样本的权值之和。
c. 计算Gm(x)的系数,am表示Gm(x)在最终分类器中的重要程度(目的:得到基本分类器在最终分类器中所占的权重。注:这个公式写成 α m = 1 / 2 l n ( ( 1 − e m ) / e m ) \alpha_m=1/2ln((1-e_m)/e_m) αm=1/2ln((1−em)/em)更准确,因为底数是自然对数e,故用In,写成log容易让人误以为底数是2或别的底数,下同):
由上述式子可知, e m < = 1 / 2 e_m <= 1/2 em<=1/2时, α m > = 0 \alpha_m >= 0 αm>=0,且 α m \alpha_m αm随着 e m e_m em的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大。
d. 更新训练数据集的权值分布(目的:得到样本的新的权值分布),用于下一轮迭代
使得被基本分类器Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过这样的方式,AdaBoost方法能“重点关注”或“聚焦于”那些较难分的样本上。
其中,Zm是规范化因子,使得Dm+1成为一个概率分布:
步骤3. 组合各个弱分类器
从而得到最终分类器,如下:
f ( x ) = w T x + b f(x) = w^Tx+b f(x)=wTx+b
其中 w = w 1 , w 2 , . . . , w d w = {w_1, w_2,...,w_d} w=w1,w2,...,wd。wjiao和b学习以后,模型就确定啦。
线性回归试图学得
f ( x i ) = w x i + b f(x_i) = wx_i + b f(xi)=wxi+b
使得 f ( x i ) = y i f(x_i) = y_i f(xi)=yi
利用均方误差衡量模型