线性回归
最小二乘法小结
感知机
感知机原理小结
在《统计学习方法》中,定义的方式有一些不同,如下图所示
书中所提到了“不考虑
∥w∥1”,实际意思是说不会影响解,
对于最小化问题
−∥w∥1∑yi(wxi+b)来说,如果我们添加一个条件
∥w∥=1后(注意,添加这个条件之后,并不会对原问题的意义进行改变,仍然是在找经验误差最小的分类面,但加入说要是假设分子为1,那这个优化问题的意义就改变了),优化问题变成了
−11∑yi(wxi+b),得到一组解
w1=[w11,w12...],b1;然后把这个条件改成
∥w∥=2后,优化问题变成了
−21∑yi(wxi+b),得到了第二组解
w2=[w21,w22...],b2,很容易能看出这两个优化问题是完全相同的,并且第一组解和第二组解的对应项的比例是相同的,比如
w21w11=w22w21=b2b1=21,也就是说不仅两个优化问题的最终大小一样,所代表的的分类面也一样
进而能说明的是,即使不对
w进行约束,无论
w在优化过程中会怎样变化,最终的解所代表的分类面也都是唯一的,反正最终的最优解中
∥w∥都是一个常数
a
另外刘建平的博客里有另一种解释方法,即把样本所处的n维特征空间扩充为n+1维,就是把那个常数1也当做特征的一个维度,样本就从
x=[x1,x2,...]变成了
x=[1,x1,x2,...],并且参数空间也从n维扩充到了n+1维,参数就从
w,b变成了
θ=[b,w],于是点到新空间的分类面的距离就变成了
∥θ∥θx,所以无论
θ是多大都不影响最终的解
最近邻
详解KDTree
《机器学习实战》学习笔记——基于sklearn使用 KNN
用balltree找某个目标点target的所属的时候,我猜应该是从上往下依次比较target点距离左球与右球的球心的距离,距离哪个球心更近,就走哪条路径
Logistics
逻辑斯蒂回归(Logistic Regression)
永远记住,
P(y=1∣X,w)=1+ewTxewTx,是因为二分类问题中一般
f(x)>0就判定为
y^=1,另外LR二分类模型中,样本类别是{0,1},其实也可以是别的,只不过这样好定义损失函数。
上面博客有错误,对似然函数最大化应该是梯度上升而不是下降
Softmax回归
SVM
SMO优化算法(Sequential minimal optimization)
支持向量机通俗导论(理解SVM的三层境界)
支持向量机的核心:支持向量机的模型构建意义是找到一个分类超平面,能够把特征空间中的样本全部正确分类的同时,保证距离分类超平面最近的样本能够尽可能远离这个分类超平面,距离的评估用的是几何间隔,也就是高中数学中的点到平面距离,于是就有了如下优化问题(称这个优化问题为问题A),其中
r^就是距离分类超平面最近的样本(支持向量)距离分类平面的函数距离,并且在线性可分的情况下,超平面两侧的支持向量的到超平面的距离相同,都是
r^
问题A:w,bmax∥w∥r^,s.t. yi(wTxi+b)≥r^
并且同时,无论这个距离分类超平面最近的样本是样本集中的哪个点、位置在哪,都将这个点到达分类超平面的函数距离设置为1,于是原问题就变成了新的优化问题(称这个优化问题为问题B)
问题B:w,bmax∥w∥1,s.t. yi(wTxi+b)≥1
可以从如下两个角度来理解:第一,函数间隔的大小收到点与分类面的相对位置和分类超平面的参数的两方面的影响,一旦支持向量确定,那么更改分类超平面的参数就会等比例的放大或者缩小函数间隔,而这个函数间隔的变化并不会让分类超平面变化。第二,设置距离分类超平面最近的样本到平面的函数间隔为1,其实类似于在设置单位,训练集一旦确定,分类面也一定是确定的
这里我想给出我自己的理解方法,在问题A的基础上人为添加一个条件
r^=1,得到如下优化问题,称之为问题C,很容易知道问题C的解可能不是问题A的解,但这两个问题代表的超平面一定是同一个超平面
问题C:s.t.w,bmax∥w∥r^ yi(wTxi+b)≥r^r^=1
如果我们现在解开了问题A,得到的解
wA∗,bA∗,这个解代表了SVM的分类超平面,但这个解并不一定是问题C的解,但如果对
wA∗,bA∗进行等比例的放大或者缩小得到
wC∗,bC∗使得
r^=1成立,那么这个
wC∗,bC∗就是问题C的解,但注意,
wA∗,bA∗与
wC∗,bC∗代表的平面是同一个平面
而由于问题C相当于在问题B上添加了约束,所以其可行域比问题B更小,所以如果问题C有解,这个解也一定是问题B的解
所以仅仅从分类面的同一性角度来说,
wB∗,bB∗与
wA∗,bA∗是同一个分类面,问题A与问题B也就等价了,解的具体是多大就无所谓了
文中有下式
之所以
b∗是这个,是因为那两个max和min对应的是分类面两边的支持向量,而且分类面肯定过这两个支持向量的中点
至于为什么非支持向量样本对应的的
αi=0,是因为首先非支持向量不是距离分类面最近的点,所以满足
yi(wTxi+b)>1,又因为解要满足KKT条件,即
αiyi(wTxi+b)=0,所以有如上结论
核函数存在的意义:原本的思路是将低维空间
x∈Rd通过函数
ϕ映射到高维空间
ϕ(x)∈Rd+m,把原本线性不可分的数据变成高维空间的线性可分数据,然后在高维空间求解如下问题,从而计算分类面参数去做SVM
w,bmax∥w∥1,s.t. yi(wTϕ(x)+b)≥1且w∈Rd+m
这有着维度爆炸的问题,那么核函数的出现告诉我们没有必要先映射后在高维空间求解,在低维空间同样可以完成这个事情,为什么呢?因为求解SVM的对偶问题的时候,我们需要的仅仅是训练集中任意两个样本的内积而已,要做的就仅仅是在求解对偶问题的时候,把两个向量的内积变成高维空间下的内积就可以了,而核函数就是一种用来算高维空间内积的函数
SMO的KKT条件可以推出这个KKT条件说明,在两条间隔线外面的点,对应
α为0,在两条间隔线里面的对应
α为C,在两条间隔线上的样本的
α在0和C之间。
求解对偶问题的时候软间隔的约束条件没了,是因为当
0≤α≤C隐含了软间隔的约束条件
支持向量机(SVM)的特点与不足
多核学习
从 SVM 到多核学习 MKL
特征提取-特征后期融合-多核学习方法(MKL)
贝叶斯方法
算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
朴素贝叶斯算法原理小结
贝叶斯决策(后验概率最大化)西瓜书这块讲的好一些
假设可能的样本类标记为
{c1,...,cN},而
λij是将真实标记为
cj的样本分类为
ci的损失,样本
x来自于后验分布
P(ck∣x),如何求将一个已知的样本
x被分类为
ci时的误差呢?
假设这个样本
x的类是
c1,那么将其分类为
ci的误差为
λi1,发生这样的事情的概率是
P(c1∣x)
假设这个样本
x的类是
c2,那么将其分类为
ci的误差为
λi2,发生这样的事情的概率是
P(c2∣x)
可以看到“将一个已知的样本
x被分类为
ci时的误差”是一个随机变量,那么这个随机变量的期望是多少呢?很简单,
R(ci∣x)=∑j=1NλijP(cj∣x),这个就是在样本
x上预测的期望损失或条件风险。
进一步,假设我们现在手上有一个判定器
h,它把样本
x判定为
h(x)类,那么
h(x)的在全部数据损失的期望或总体风险就是
R(h)=Ex[R(h(x)∣x)]。要最小化它,每个
R(h(x)∣x)都是最小的就可以了。直白的说,只要判定器
h对于给定的样本
x做出的决策,可以使得
R(h(x)∣x)尽可能小就行。如果损失是0-1损失,那么
h(x)=argmaxcP(c∣x)就满足要求了,就是说决策器每次的输出都是
P(c∣x)最大时的那个c就可以了。
朴素贝叶斯是怎么用贝叶斯决策的了呢?因为
P(ci∣x)事先是未知的,所以朴素贝叶斯要先去学习
P(ci∣x),然后做的事就一样了
说来生气,之前和组里的老师和同学讨论这个问题的时候,我说这个值是极大似然估计出来的,他们说极大什么极大,这不就明摆着的么,呵呵= =
这个式子实在太通俗易懂了,所以没人追究他是怎么来的,这个式子讲的是:我们一共有
N个样本,其中
ck类的样本有
a个,那么随机采样出现
ck的概率就是
Na
设从样本集中随机采样一个样本是
ck类的概率为
θ,设采样
N次结果中出现了
a个
ck类的事件为
A,那么似然函数为
L(θ)=P(A∣θ)=CNaθa(1−θ)N−a于是对似然函数求导为
∂θ∂L=CNaθa−1(1−θ)N−a−1[a(1−θ)−(N−a)θ],等于0时,刚好有
θ=Na
从贝叶斯方法谈到贝叶斯网络
决策树
决策树算法原理(上)
为什么信息增益倾向于选择多的特征,直观来讲,选特征数目多的,输出的叶子节点会更纯,可以让每个叶子节点更纯
假设数据中的每个人都是一个样本,每个人的姓名都不同,那么信息增益就会选择姓名作为最佳属性,因为按姓名分裂后,每个叶子节点只包含一条记录,而每个叶子只属于一类(信息增益最大),因此纯度最高。但是这样的分类没有意义。
举个实际数据例子,假如一个两类问题之中,总样本数目为4,其中正样本数目为2,负样本数目为2,并且该样本有
a,b两个特征,其中特征
a的取值可以是
a1,a2,总样本之中,特征
a,b当取不同值的,样本分布情况如下表,如:特征
a取值为
a1的样本数目为2,其中正负样本数目均为1。
可以算出总样本的熵
H(D)=−21∗log21−21∗log21
当特征选a的时候,
H(D∣a)=−42(21∗log21+21∗log21)−42(21∗log21+21∗log21)
当特征选b的时候,
H(D∣b)=−41∗log11−41∗log11−41∗log11−41∗log11
所以
[H(D)−H(D∣b)]>[H(D)−H(D∣a)],但此时选择特征取值更多的特征是因为b特征好,而不是因为多才选他的,“倾向选择取值更多的特征”不一定就是坏事,因为熵和分类误差率的单调性完全一致,因此即使有着“倾向选择取值更多的特征”的性质,也不会使得一个不好的特征的信息增益比一个好的特征高;但仍不能否认,仅从数据的角度来看b特征就是比a特征好。甚至把问题再深入一点,假设下面表格中样本数目都乘以一百万,数据量足够大的时候b特征仍能保持一个特别好分类结果,那么也就证明了b特征就是一个很好的特征。
特征a取值 |
样本数目 |
正样本数目 |
负样本数目 |
a1 |
2 |
1 |
1 |
a2 |
2 |
1 |
1 |
特征b取值 |
样本数目 |
正样本数目 |
负样本数目 |
b1 |
1 |
1 |
0 |
b2 |
1 |
0 |
1 |
b3 |
1 |
1 |
0 |
b4 |
1 |
0 |
1 |
信息熵是描述数据的混乱程度的,公式为
H(X)=−i=1∑npilogpi,既然是混乱程度,那就要有一个关注的角度,比如现在把世界上所有的哺乳动物都抓进来作为我们的数据,我们现在从物种的角度看这个数据,那这个数据乱的不得了,熵也一定特别高;但如果我们现在关注的是是不是胎生的,那这批数据纯的不得了,因为全是胎生的,熵为0。
回到机器学习,对于数据
D来说,其关于类别的混乱程度为
Hclass(D)=−k=1∑K∣D∣∣Dk∣log2∣D∣∣Dk∣,其中
Dk为
D中类别为
k的样本集;其关于特征
A的混乱程度为
HA(D)=−i=1∑V∣D∣∣Di∣log2∣D∣∣Di∣,其中
Di为
D中特征
A取值为
ai的样本集;
HA(D)就是信息增 益率的分母,一般来说,特征
A取值越多,
HA(D)会越大,因为数据
D里的样本在特征值
A取各个值的都有,那就说明从
A特征的角度,这个数据乱嘛
c4.5为什么使用信息增益比来选择特征? - 夕小瑶的回答 - 知乎
正经解释了信息增益率的特点,“样本数越少,对概率的估计结果的方差就会越大”这段话的需要解释一下:比如估计投一枚均匀的硬币得到正面的概率,每次实验只投4次,每次都用频率估计概率,做1000次实验,那么每次实验得到的结果,放在一起,方差一定特别大;而如果修改为每次实验投10000次,那么这些结果的方差一定很小。进一步地,如果我们只取一次实验结果作为最终实验结果,只投4次得到的结果有很大概率是不贴近0.5的(也就是说结果有偏向),而投10000次得到的结果很大概率贴近0.5(结果没有偏向)。
而体现到机器学习的特征选择上,如果某个特征的可选择的值多,如果把这个特征作为分支,如果那么每个分支的样本数目较少,由上面的理论,样本在该特征上的样本类别分布有较大可能性是有偏的,以两类问题为例,如果在特征
A上取值为
ai样本的类别的真实的分布是5:5,如果我们只有10个样本,两类样本多一个少一个会对熵造成很大影响,不同类别的样本比例是4:6至6:4的概率只有0.65625。但如果我们有100个样本呢,样本比例是40:60到60:40之间的概率高达0.9648。于是由于这10个样本上,不同类别的样本比例在4:6至6:4之外的概率更高,因此计算的信息熵更有可能会比真实的小一些,这全是因为我们样本太少了。数据集的不充足以及客观存在的大数定律导致取值多的特征在计算条件熵时容易估计出偏小的条件熵。
信息增益为什么会偏向于特征值多的特征?基于上面的道理再往前想一步,如果现在样本数目一定,特征
A可取的特征值多,那以特征
A进行将样本划分开,得到的多个样本集都会较小,小会发生什么?数据不充足,不充足会发生啥?这个样本集的条件熵偏小,偏小怎么了?信息增益就大了呗。
决策树算法原理(下)
GINI(D,A)=minv∈{1,..,V}∣D∣∣Dv∣GINI(Dv)+∣D∣∣D−Dv∣GINI(D−Dv)
scikit-learn决策树算法类库使用小结
集成学习
集成学习原理小结
Bagging与随机森林算法原理小结
集成学习之Adaboost算法原理小结
统计学习方法中146页的解释
由8.4式可知,每一次迭代后每个样本权值变化公式为
wm+1,i=Zmwm,iexp(−αmyiGm(xi))=Zm−1Zmwm−1,iexp(−αm−1yiGm−1(xi))exp(−αmyiGm(xi))=∏k=1mZkw1,iexp(k=1∑m−αkyiGk(xi))=N∏k=1mZk1exp(k=1∑m−αkyiGk(xi))
并且
fm−1(x)=∑k=1m−1αkGk(x),所以有
wm,i=N∏k=1m−1Zk1exp(−yifm−1(x))=N∏k=1m−1Zk1wˉm,i
并且由于
Zk对任意样本都相同,并且
α>0是一个恒定值,当
∑i=1nwˉmiI(yi̸=G(xi))最小的时候,8.21同时最小,因此说
Gm∗就是AdaBoost算法之中第m轮输出的基本分类器,
梯度提升树(GBDT)原理小结
GBDT相对于BDT(提升树)好在哪呢,为什么一定要用负梯度来拟合呢?
如果我们用的是平方损失,那么在训练新树的时候,就要针对
L(y,fm−1(x)+T(x;θm))=[y−fm−1(x)−T(x;θm)]2=[r−T(x;θm)]2这时候新的树恰好需要拟合残差而已,但如果这个损失是个别的损失,那新树要去拟合的就不是残差了;而实际上可以把
L看做以
f为自变量的函数,于是对
L关于
f进行梯度下降得到
∂f∂L,也就是说当自变量
f沿着负梯度方向的时候,
L减小最快,那么在实际数据中要做的就是学习一个新模型,使得当输入为
x时输出值为
∂f∂L,把这个模型加回给之前的模型,就完成了对
L的梯度下降工作
在GBDT回归的时候,每一个新的弱分类器的叶子节点个数可能都不一样,GBDT回归的核心之一在于每个叶子节点的值的选择
多元GBDT分类的每个
fk(x)代表的是针对“是第k类样本”和“不是第k类样本”的分类模型
GBDT处理二分类问题
这篇文章把GBDT处理分类问题时候讲的明白了一些,说白了就是把损失函数换成
L(y,F)=log(1+exp(−2yF)),yϵ−1,1,然后把
F(x)=21log[Pr(y=−1∣x)Pr(y=1∣x)],反过来看就是
Pr(y=1∣x)=1+e−2F(x)1,把
F(x)映射成了区间位于0到1的概率
这里我是这样理解的,首先对于原始样本
D训练一个二分类树
Tpre,然后GBDT中的第一棵树并不是
Tpre,而是
T1(x)=21log[Pr(y=−1∣x)Pr(y=1∣x)],其中概率是由
Tpre输出的。然后求梯度,下一次就按着回归的方法生成回归树
T2,...,Tm了。然后把树加起来的输出就是
F(x)=21log[Pr(y=−1∣x)Pr(y=1∣x)]
一步一步理解GB、GBDT、xgboost
机器学习教程 之 梯度提升方法:GBDT及其扩展模型XGBoost
找分割点的时候,类似于CART树的CCP过程,比较某个叶子节点继续分裂好还是不分裂好,而且只看这一个节点的就行了;感觉只在特征选取的时候用了GINI,其他时候如分割点和叶子结点的确定,都是新的方法
Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
综合
感知机、线性回归、逻辑回归的简单对比