标签:
参考[1]
事件A
和B
同时发生的概率为在A发生的情况下发生B
或者在B发生的情况下发生A
P(A∩B)=P(A)∗P(B|A)=P(B)∗P(A|B)
所以有:
P(A|B)=P(B|A)∗P(A)P(B)
对于给出的待分类项,求解在此项出现的条件下各个目标类别出现的概率,哪个最大,就认为此待分类项属于哪个类别
当某个类别下某个特征划分没有出现时,会有P(a|y)=0,就是导致分类器质量降低,所以此时引入Laplace校验,就是对没类别下所有划分的计数加1。
参考改进的贝叶斯网络,使用DAG
来进行概率图的描述
朴素贝叶斯的优点:
参考[2,3,4]
LR
回归是一个线性的二分类模型,主要是计算在某个样本特征下事件发生的概率
,比如根据用户的浏览购买情况作为特征来计算它是否会购买这个商品,抑或是它是否会点击这个商品。然后LR
的最终值是根据一个线性和函数再通过一个sigmod
函数来求得,这个线性和函数权重与特征值的累加以及加上偏置求出来的,所以在训练LR
时也就是在训练线性和函数的各个权重值w
。
hw(x)=11+e−(wTx+b)
关于这个权重值w
一般使用最大似然法来估计,假设现在有样本{xi,yi},其中xi表示样本的特征,yi∈{0,1}表示样本的分类真实值,yi=1的概率是pi,则yi=0的概率是1−pi,那么观测概率为:
p(yi)=pyii∗(1−pi)1−yi
则最大似然函数为:
∏(hw(xi)yi∗(1−hw(xi))1−yi)
对这个似然函数取对数之后就会得到的表达式
L(w)=∑i(yi∗loghw(xi)−(1−yi)∗log(1−hw(xi)))=∑i(yi∗(wTxi)−log(1+ewTxi))
估计这个L(w)的极大值就可以得到w的估计值。
实际操作中一般会加个负号 改为求最小
所以求解问题就变成了这个最大似然函数的最优化问题,这里通常会采样随机梯度下降法和拟牛顿迭代法来进行优化
LR
的损失函数为:
J(w)=−1NN∑i=1(yi∗log(hw(xi))+(1−yi)∗log(1−hw(xi)))
这样就变成了求min(J(w))
其更新w的过程为
w:=w−α∗▽J(w)w:=w−α∗1N∗N∑i=1(hw(xi)−yi)∗xi)
其中α为步长,直到J(w)不能再小时停止
梯度下降法的最大问题就是会陷入局部最优,并且每次在对当前样本计算cost
的时候都需要去遍历全部样本才能得到cost
值,这样计算速度就会慢很多(虽然在计算的时候可以转为矩阵乘法去更新整个w
值)
所以现在好多框架(mahout
)中一般使用随机梯度下降法,它在计算cost的时候只计算当前的代价,最终cost
是在全部样本迭代一遍之求和得出,还有他在更新当前的参数w的时候并不是依次遍历样本,而是从所有的样本中随机选择一条进行计算,它方法收敛速度快(一般是使用最大迭代次数),并且还可以避免局部最优,并且还很容易并行(使用参数服务器的方式进行并行)
w:=w−α∗(hw(xj)−yj)∗xi);j∈1Nandrandomly
这里SGD
可以改进的地方就是使用动态的步长
α=0.04∗(1.0+n+i)+r
优缺点:无需选择学习率α,更快,但是更复杂
如果我们有很多的特性,在训练集上拟合得很好,但是在预测集上却达不到这种效果
L2
使用较多)假设离散型随机变量Y的取值集合是{1,2,..,k},则多分类的LR为
P(Y=a|x)=exp(wa∗x)(∑ki=1(wi∗x));1<a<k
这里会输出当前样本下属于哪一类的概率,并且满足全部概率加起来=1
如果类别之间是否互斥(比如音乐只能属于古典音乐、乡村音乐、摇滚月的一种)就用softmax
否则类别之前有联系(比如一首歌曲可能有影视原声,也可能包含人声,或者是舞曲),这个时候使用k个LR更为合适
优缺点:
Logistic回归优点:
缺点:
给一个训练数据集和一个新的实例,在训练数据集中找出与这个新实例最近的k个训练实例,然后统计最近的k个训练实例中所属类别计数最多的那个类,就是新实例的类
所以一般k会取一个较小的值,然后用过交叉验证来确定
这里所谓的交叉验证就是将样本划分一部分出来为预测样本,比如95%训练,5%预测,然后k分别取1,2,3,4,5之类的,进行预测,计算最后的分类误差,选择误差最小的k
在找到最近的k个实例之后,可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值,这个权重与度量距离成反比(越近权重越大)。
KNN算法的优点:
缺点:
KD树是一个二叉树,表示对K维空间的一个划分,可以进行快速检索(那KNN计算的时候不需要对全样本进行距离的计算了)
在k维的空间上循环找子区域的中位数进行划分的过程。
假设现在有K维空间的数据集T={x1,x2,x3,…xn},xi={a1,a2,a3..ak}
通过KD树的搜索找到与搜索目标最近的点,这样KNN的搜索就可以被限制在空间的局部区域上了,可以大大增加效率。
当实例随机分布的时候,搜索的复杂度为log(N),N为实例的个数,KD树更加适用于实例数量远大于空间维度的KNN搜索,如果实例的空间维度与实例个数差不多时,它的效率基于等于线性扫描。
后来自己有实现过KD树,可以看KNN算法中KD树的应用
对于样本点(xi,yi)以及svm的超平面:wTxi+b=0
svm的基本想法就是求解能正确划分训练样本并且其几何间隔最大化的超平面。
先来看svm的问题:
argmaxw,bγst.yi(wTxi+b)||w||≥γ
那么假设ˆγ=γ∗||w||
则将问题转为:
argmaxw,bˆγ||w||st.yi(wTxi+b)≥1
由于ˆγ的成比例增减不会影响实际间距,所以这里的取ˆγ=1,又因为max(1||w||)=min(12∗||w||2)
所以最终的问题就变为了
argminw,b12∗||w||2st.yi(wTxi+b)≥1
这样就变成了一个凸的二次规划化,可以将其转换为拉格朗日函数,然后使用对偶算法来求解
引进拉格朗日乘子α={α1,α2..αn},定义拉格朗日函数:
L(w,b,a)=12∗||w||2−∑i=1N(αi∗yi(wTxi+b))+∑(αi)
根据对偶性质 原始问题就是求对偶问题的极大极小
maxαminw,bL(w,b,α)
先求L对w,b的极小,再求对α的极大。
求minw,bL(w,b,α),也就是相当于对w,b求偏导并且另其等于0
▽wL(w,b,α)=w−∑i=1N(αiyixi)=0▽bL(w,b,α)=∑i=1N(aiyi)=0
代入后可得
minw,bL(w,b,α)=−12∗N∑i=1N∑j=1(αiαjyiyj(xi⋅xj))+N∑i=1αi
求minw,bL(w,b,α)对α的极大,即是对偶问题:
maxα−12∗N∑i=1N∑j=1(αiαjyiyj(xi⋅xj))+N∑i=1αist.∑i=1N(aiyi)=0α≥0,i=1,2,3…N
将求最大转为求最小,得到等价的式子为:
minα12∗N∑i=1N∑j=1(αiαjyiyj(xi⋅xj))−N∑i=1αist.∑i=1N(aiyi)=0α≥0,i=1,2,3…N
假如求解出来的α为α∗=(α∗1,α∗2,…α∗n)
则得到最优的w,b分别为
w∗=N∑i=1(α∗iyixi)b∗=yj−N∑i=1(α∗iyi(xi⋅xj))
所以,最终的决策分类面为
f(x)=sign(N∑i=1(α∗iyi(x⋅xi)+b∗)
也就是说,分类决策函数只依赖于输入x与训练样本的输入的内积
ps:上面介绍的是SVM的硬间距最大化,还有一种是软间距最大化,引用了松弛变量ζ,则次svm问题变为:
argminw,b12∗||w||2+CN∑i=1ζist.yi(wTxi+b)≥1−ζiζi≥0,i=1,2…N
其余解决是与硬间距的一致~还有:与分离超平面最近的样本点称为支持向量
损失函数为(优化目标):
N∑i=1[1−yi(wTxi+b)]++λ||w||2
其中[1−yi(wTxi+b)]+称为折页损失函数,因为:
[1−yi(wTxi+b)]+={0if1−yi(wTxi+b)≤01−yi(wTxi+b)otherwise
将输入特征x(线性不可分)映射到高维特征R空间,可以在R空间上让SVM进行线性可以变,这就是核函数的作用
优点:
缺点:
SMO是用于快速求解SVM的
它选择凸二次规划的两个变量,其他的变量保持不变,然后根据这两个变量构建一个二次规划问题,这个二次规划关于这两个变量解会更加的接近原始二次规划的解,通过这样的子问题划分可以大大增加整个算法的计算速度,关于这两个变量:
决策树是一颗依托决策而建立起来的树。
S(C,ai)=−∑i(pi∗log(pi))
一个属性中某个类别的熵pi=P(yi|ai),pi表示ai情况下发生yi的概率,也即是统计概率。
S(C,A)=∑i(P(A=ai)∗S(ai))
整个属性的熵,为各个类别的比例与各自熵的加权求和。
Gain(C,A)=S(C)−S(C,A)
增益表示分类目标的熵减去当前属性的熵,增益越大,分类能力越强
(这里前者叫做经验熵,表示数据集分类C的不确定性,后者就是经验条件熵,表示在给定A的条件下对数据集分类C的不确定性,两者相减叫做互信息,决策树的增益等价于互信息)。
比如说当前属性是是否拥有房产,分类是是否能偿还债务
现在:
然后
有房子的熵:S(have_house)=−(47∗log47+37∗log37)
无房子的熵:S(no_house)=−(13∗log13+23∗log23)
分类的熵:S(classifier)=−(510∗log510+510∗log510)
最终的增益=S(classifier)−(710∗S(have_house)+310∗S(no_house))最大越好
关于损失函数
设树的叶子节点个数为T,t为其中一个叶子节点,该叶子节点有Nt个样本,其中k类的样本有Ntk个,H(t)为叶子节点上的经验熵,则损失函数定义为
Ct(T)=∑(Nt∗H(t))+λ|T|
其中
H(t)=∑(NtkNt∗log(NtkNt))
代入可以得到
Ct(T)=∑(∑(Ntk∗log(Ntk/Nt)))+λ|T|
λ|T|为正则化项,λ是用于调节比率
决策树的生成只考虑了信息增益
它是ID3的一个改进算法,使用信息增益率来进行属性的选择
splitInformation(S,A)=−∑i(|Si||S|∗log2(|Si||S|))GainRatio(S,A)=Gain(S,A)splitInformation(S,A)
优缺点:
准确率高,但是子构造树的过程中需要进行多次的扫描和排序,所以它的运算效率较低
分类回归树(Classification And Regression Tree)是一个决策二叉树,在通过递归的方式建立,每个节点在分裂的时候都是希望通过最好的方式将剩余的样本划分成两类,这里的分类指标:
分类树:
gini用来度量分布不均匀性(或者说不纯),总体的类别越杂乱,GINI指数就越大(跟熵的概念很相似)
gini(ai)=1−∑i(p2i)
pi当前数据集中第i类样本的比例
gini越小,表示样本分布越均匀(0的时候就表示只有一类了),越大越不均匀
基尼增益gini_gain=∑i(NiN∗gini(ai))
表示当前属性的一个混乱NiN表示当前类别占所有类别的概率
最终Cart选择GiniGain最小的特征作为划分特征
以ID3中的贷款的那棵树为样例:
基尼指数有房产:gini(have_house)=1−((37)2+(47)2)
基尼指数无房产:gini(no_house)=1−((13)2+(23)2)
基尼增益为:gini_gain=710∗gini(have_house)+310∗gini(no_house)
回归树:
回归树是以平方误差最小化的准则划分为两块区域
这里面的最小化我记得可以使用最小二乘法来求
关于剪枝:用独立的验证数据集对训练集生长的树进行剪枝(事后剪枝)。
优点:
随机森林是有很多随机得决策树构成,它们之间没有关联。得到RF以后,在预测时分别对每一个决策树进行判断,最后使用Bagging的思想进行结果的输出(也就是投票的思想)
使用oob(out-of-bag)进行泛化误差的估计,将各个树的未采样样本作为预测样本(大约有36.8%),使用已经建立好的森林对各个预测样本进行预测,预测完之后最后统计误分得个数占总预测样本的比率作为RF的oob误分率。
Cart可以通过特征的选择迭代建立一颗分类树,使得每次的分类平面能最好的将剩余数据分为两类
gini=1−∑(p2i),表示每个类别出现的概率和与1的差值,
分类问题:argmax(Gini−GiniLeft−GiniRight)
回归问题:argmax(Var−VarLeft−VarRight)
查找最佳特征f已经最佳属性阈值th 小于th的在左边,大于th的在右边子树
GBDT的精髓在于训练的时候都是以上一颗树的残差为目标,这个残差就是上一个树的预测值与真实值的差值。
比如,当前样本年龄是18岁,那么第一颗会去按18岁来训练,但是训练完之后预测的年龄为12岁,差值为6, 所以第二颗树的会以6岁来进行训练,假如训练完之后预测出来的结果为6,那么两棵树累加起来就是真实年龄了, 但是假如第二颗树预测出来的结果是5,那么剩余的残差1就会交给第三个树去训练。
Boosting的好处就是每一步的参加就是变相了增加了分错instance的权重,而对已经对的instance趋向于0,这样后面的树就可以更加关注错分的instance的训练了
Shrinkage认为,每次走一小步逐步逼近的结果要比每次迈一大步逼近结果更加容易避免过拟合。
y(1∼i)=y(1∼i−1)+step∗yi
就像我们做互联网,总是先解决60%用户的需求凑合着,再解决35%用户的需求,最后才关注那5%人的需求,这样就能逐渐把产品做好.
优点:
最小二乘法是一种数学的优化技术,通过求最小化平方误差来寻找最佳的函数匹配
假设现在有二维的观测数据(x1,y1),(x2,y2)…(xn,yn),求y=a+bx的拟合。
现设yi=a+b∗xi+ki如果有a,b能得到∑Ni=1(|ki|)最小,则该线比较理想
所以先变为求min(∑Ni=1(ki)),这个与min(∑Ni=1(k2i))等价
而ki=yi−(a+b∗xi)
那么现设f=∑i=1N((yi−(a+b∗xi))2)求其最小即可
上述就是最小二乘原则,估计a,b的方法称为最小二乘法
先求f对a,b的偏导:
▽af=−2∗N∑i=1(yi−(a+b∗xi))=0
▽bf=−2∗xi∗N∑i=1(yi−(a+b∗xi))=0
现设:
X=∑Ni=1xiNY=∑Ni=1yiN
则代入上述偏导:
a∗N+b∗N∗X=N∗Ya∗N∗X+b∗N∑i=1(x2i)=N∑i=1(xi∗yi)
求该行列式:
|NN∗XN∗X∑Ni=1x2i|=N∗N∑i=1((xi−X))!=0
所以有唯一解
最后记:
l(xx)=N∑i=1(xi−X)2l(yy)=N∑i=1(yi−Y)2l(xy)=N∑i=1((xi−X)(yi−Y))
则
b=l(xy)l(xx)a=Y−b∗X
EM用于隐含变量的概率模型的极大似然估计,它一般分为两步:第一步求期望(E),第二步求极大(M),
如果概率模型的变量都是观测变量,那么给定数据之后就可以直接使用极大似然法或者贝叶斯估计模型参数。
但是当模型含有隐含变量的时候就不能简单的用这些方法来估计,EM就是一种含有隐含变量的概率模型参数的极大似然估计法。
应用到的地方:混合高斯模型、混合朴素贝叶斯模型、因子分析模型
boosting在训练的时候会给样本加一个权重,然后使loss function尽量去考虑那些分错类的样本(比如给分错类的样本的权重值加大)
在机器学习中往往是最终要求解某个函数的最优值,但是一般情况下,任意一个函数的最优值求解比较困难,但是对于凸函数来说就可以有效的求解出全局最优值。
一个集合C是,当前仅当任意x,y属于C且0≤Θ≤1,都有Θ∗x+(1−Θ)∗y属于C
用通俗的话来说C集合线段上的任意两点也在C集合中
一个函数f其定义域(D(f))是凸集,并且对任意x,y属于D(f)和0≤Θ≤1都有
f(Θ∗x+(1−Θ)∗y)≤Θ∗f(x)+(1−Θ)∗f(y)
用通俗的话来说就是曲线上任意两点的割线都在曲线的上方
常见的凸函数有:
凸函数的判定:
[1].http://www.cnblogs.com/leoo2sk/archive/2010/09/17/naive-bayesian-classifier.html
[2].http://www.cnblogs.com/biyeymyhjob/archive/2012/07/18/2595410.html
[3].http://blog.csdn.net/abcjennifer/article/details/7716281
[4].http://ufldl.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
[5]. 《统计学习方法》.李航
转载自:http://www.kuqin.com/shuoit/20160419/351618.html
标签:
原文地址:http://www.cnblogs.com/1394htw/p/5579590.html