人智导 统计机器学习
统计机器学习
对于数据集D={(xi,yi)},输入输出之间存在关系f,算法A根据训练集从假设空间H中选取一个合适的函数g≈f
主要决定因素:模型、策略、算法
分类方式:
支持向量机(SVM)
按照模型的复杂程度,分为线性可分、线性与非线性
线性可分SVM
定义线性可分SVM相关概念如下:
线性可分训练集:
T={(xi,yi)∣1≤i≤N,xi∈Rn,yi∈{−1,1}}
给定超平面wx+b=0,于是可以定义函数间隔为:
γ^=1≤i≤Nmin{(wxi+b)yi}
相对应的,定义几何间隔为函数间隔的归一化,也即考虑超平面的缩放的影响
γ=∣∣w∣∣γ^
通过间隔最大化得到分类超平面w∗x+b∗=0,则得到决策函数:
f(x)=sgn(w∗x+b∗)
此即线性可分SVM
于是关键问题即为间隔最大化:
w,bmaxγ=w,bmax∣∣w∣∣γ^
显然,函数间隔是可缩放的(函数缩放表示为$w, b$等比例缩放),因此不妨令γ^=1,则进一步转化为规划问题:
w,bmax∣∣w∣∣1=w,bmin21∣∣w∣∣2
使得:
∀i,γi^=(wxi+b)yi≥1
定义相对应的拉格朗日函数为:
L(w,b,α)=21∣∣w∣∣2+i=1∑Nαi[1−(wxi+b)yi]
则在满足优化条件的情况下,原问题转化为:
w,bminαmaxL(w,b,α)
当满足KKT条件时,该问题可转化为其对偶问题:
αmaxw,bminL(w,b,α)
∇w,bL(w,b,α)αi[1−(wxi+b)yi]1−(wxi+b)yiαi=0=0≤0≥0
利用KKT条件转化为对偶问题之后,可以化简为:
αmax(−21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)+i=1∑Nαi)=αmin(21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi)
使得:
i=1∑Nαiyi=0αi≥0
于是可以求出α∗,相对应的根据KKT条件求出w∗,b∗:
w∗b∗=yj−=i=1∑Nαi∗yixii=1∑Nαi∗yi(xi⋅xj)αj=0
所得到的αi>0对应的实例xi即为支持向量
线性SVM
在线性可分SVM中,约束条件要求每一个样本点的函数间隔都不小于1,这个条件事实上要求样本拥有很强的分类性,而对于一些分类性较弱的样本,很难全部满足这个条件,因此引入松弛变量ξi,将约束条件修改为
(wxi+b)yi≥1−ξi
为了让分隔尽量好,因此要满足松弛变量尽量小,因此调整优化问题为:
w,b,ξmin(21∣∣w∣∣2+Ci=1∑Nξi)
其中C为惩罚参数,用于调整间隔最大与误分类点数之间的矛盾
于是,可以转化为:
αmin(21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαi)
使得:
i=1∑Nαiyi=00≤αi≤C
可以看出与线性可分的唯一区别在与αi的范围,因此最终求出w∗,b∗时同样和线性可分只有这个区别,具体来说:
w∗b∗=yj−=i=1∑Nαi∗yixii=1∑Nαi∗yi(xi⋅xj)0<αj<C
同样,αi∗>0所对应的样本成为软间隔的支持向量,具体来说:
- αi∗<C时,ξi=0,xi位于间隔边界
- αi∗=C时,ξi>0:
- 0<ξi<1时,分类正确
- ξi=1时,位于超平面上
- ξi>1时,分类错误
非线性SVM
关键思想:利用变换ϕ:X→H将原空间的数据映射到特征空间,使之变为线性的,相对应的问题为:
αmin(21i=1∑Nj=1∑Nαiαjyiyj(ϕ(xi)⋅ϕ(xj))−i=1∑Nαi)
使得:
i=1∑Nαiyi=00≤αi≤C
可以看出其中只有内积有变化,因此若存在函数K满足K(x,z)=ϕ(x)⋅ϕ(z)对任二元素都成立,则称K(x,z)为核函数
映射到新空间之后,可以解得:
w∗b∗=yj−=i=1∑Nαi∗yiϕ(xi)i=1∑Nαi∗yiK(xi,xj)0<αj<C
常用的核函数包括:
K(x,z)K(x,z)=(x⋅z+1)p=exp(−2σ2∣∣x−z∣∣2)(Gaussian)
采用高斯核函数的时候,关键为σ的选取,不当会导致欠拟合与过拟合
由于求解凸二次规划的算法在样本数很多的时候非常低效,因此有许多快速算法,例如序列最小最优化算法SMO
当样本中有多类怎么办?
- 将一类视为正,其余所有视为负
- 任意两类构造一个SVM,分类时采取投票法
- 二分类别,依次二分整体直至单独类别
SVM应用举例
文本分类:文本表达为一个向量(w1j,…,wnj)T,wij表示词i在文档j中的权重,具体计算有很多版本,在此介绍两种:
- wij=tfij即tf权重,用词频代表权重
- wij=tfij∗idfi即tf-idf权重,其中idf为逆文档频率,记cnt(i)为词i所出现的文档数,则idfi=log(cnt(i)N)
决策树
对样本进行分类,由节点和有向边组成,每个内部节点表示一个特征或者一个属性,每个叶节点表示一个类
决策树通过在训练集中对于分类规则进行训练,得到一组矛盾较小的特征,即K分类问题,而最优决策树的选择是一个NPC问题,因此通常采用启发式方法
学习过程包括:
特征选择
按照信息增益来选择特征,信息增益g(D,A)代表了特征A对于数据集D分类的不确定性的减少程度,计算如下:
记X,Y是两个随机变量,P(X=xi)=pi,则:
随机变量的熵:
H(X)=−i=1∑npilog(pi)
条件熵:
H(Y∣X)=i=1∑NpiH(Y∣X=xi)
信息增益:
g(D,A)=H(D)−H(D∣A)
信息增益越大的特征分类能力越强
具体到特征A对于数据集D的信息增益,设一共有K个类别(C1,…,CK),A有n种不同值(a1,…,an),对应了一个划分(D1,…,Dn),记Dij为Di中属于类Cj的集合,则:
H(D)H(D∣A)g(D,A)=j=1∑K∣D∣∣Cj∣log(∣D∣∣Cj∣)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n(∣D∣∣Di∣j=1∑K(∣Di∣∣Dij∣log(∣Di∣∣Dij∣)))=H(D)−H(D∣A)
决策树的生成
两个常用的算法为ID3与C4.5
ID3算法
输入:训练集D,特征A,阈值ε
输出:决策树T
算法如下:
- 若D中所有实例属于同一类C,则T单节点,类标记为C,直接返回
- 若A=∅,则T也为单节点,类标记为D中最多的类Cj,直接返回
- 计算A中所有特征对D的信息增益,选择其中信息增益最大的特征Ak
- 若g(D,Ak)≤ε,则将T置为单节点树,类标记为D中最多的类Cj,直接返回
- 反之,遍历Ak=(ak1,…,aknk),将D划分为nk个子集分别作为子节点
- 遍历子节点Di,若为空,则将D中最多的类标记这个子节点
- 反之以(Di,A−Ak,ε)递归
- 返回T
也就是按照特征集合不断划分,当出现所有属于同一类或某一个划分为空集的时候进行特判即可
问题:信息增益倾向于选择分支较多的特征,但是有的分支是毫无意义的
C4.5算法
考虑信息增益比:
gR(D,A)=HA(D)g(D,A)=g(D,A)(−i=1∑n∣D∣∣Di∣log(∣D∣∣Di∣))−1
因此C4.5引入信息增益比来选择特征,同时允许特征的取值为连续的而非离散的,相对于ID3的改进如下:
- 将选择信息增益最大的特征改为:
- 选择信息增益前k大的特征,再从其中选择信息增益比最大的特征
- 原因是信息增益比倾向于选择分割不均匀的特征
- 对于连续的特征,采用二分,找到中间值a0,将≤a0的划分到左子树,>a0的划分到右子树
决策树的剪枝
由于决策树非常容易出现过拟合,因此需要对其进行剪枝先生成树再剪枝,这种方法称之为后剪枝
剪枝方式为:
对于某个内部节点,删除这棵子树,用这棵子树的根节点作为新的叶节点,其类别标记为其中最多的类
当数据集比较大的时候,剪枝方式为:
- 在训练集上训练,逐步剪枝
- 在验证集上验证直至性能下降
- 在测试集上测试
当数据集比较小的时候,直接利用训练集进行剪枝,方法如下:
设决策树T的叶节点为leaf(T)=(T1,…,Tt),Ti有Ni个样本,其中第k类的样本点有Nik个,Hi(T)为经验熵,a为参数,记损失函数为:
Ca(T)=i=1∑tNiHi(T)+at=−i=1∑tj=1∑KNijlogNiNij+at
其中两项分别代表预测误差与模型复杂程度
最终,剪枝算法为:
输入:整个树T,参数a
输出:修剪后的Ta
- 计算每个节点的经验熵
- 从叶节点向上回溯,如果在某个点剪枝之后可以降低损失函数,则剪枝,反之跳过
- 直到不能继续剪枝,结束
随机森林
由于决策树非常容易过拟合,因此使用多棵决策树组成一片随机森林,利用投票机制进行决策
单棵决策树的生成是通过有放回的数据采样,关键点为集外数据的使用(也即别的决策树怎么使用某棵决策树没使用的数据)