天天看點

機器學習(二)--- 分類算法詳解 常用分類算法 Ensemble learning

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E5%B8%B8%E7%94%A8%E5%88%86%E7%B1%BB%E7%AE%97%E6%B3%95">常用分類算法</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#bayes">Bayes</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9">樸素貝葉斯的優缺點</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E6%9C%B4%E7%B4%A0%E8%B4%9D%E5%8F%B6%E6%96%AF%E7%9A%84%E5%85%AC%E5%BC%8F">樸素貝葉斯的公式</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#decision-tree">Decision Tree</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E5%86%B3%E7%AD%96%E6%A0%91%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9">決策樹的優缺點</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E5%86%B3%E7%AD%96%E6%A0%91%E5%85%AC%E5%BC%8F">決策樹公式</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#svm">SVM</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9">支援向量機的優缺點</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA%E7%9A%84%E5%85%AC%E5%BC%8F">支援向量機的公式</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#knn">KNN</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#k%E8%BF%91%E9%82%BB%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9">K近鄰的優缺點</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#k%E8%BF%91%E9%82%BB%E7%9A%84%E5%85%AC%E5%BC%8F">K近鄰的公式</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#logistic-regression">Logistic Regression</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9">邏輯回歸的優缺點</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E7%9A%84%E5%85%AC%E5%BC%8F">邏輯回歸的公式</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E9%80%BB%E8%BE%91%E5%9B%9E%E5%BD%92%E7%9A%84%E9%97%AE%E9%A2%98">邏輯回歸的問題</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C">神經網絡</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E7%9A%84%E4%BC%98%E7%BC%BA%E7%82%B9">神經網絡的優缺點</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E5%85%AC%E5%BC%8F">神經網絡公式</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0">深度學習</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#ensemble-learning">Ensemble learning</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#gbdt">GBDT</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#adaboost">Adaboost</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#random-forest">Random Forest</a>

<a href="http://blog.csdn.net/china1000/article/details/48597469#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE">參考文獻</a>

貝葉斯分類法是基于貝葉斯定定理的統計學分類方法。它通過預測一個給定的元組屬于一個特定類的機率,來進行分類。樸素貝葉斯分類法假定一個屬性值在給定類的影響獨立于其他屬性的 —— 類條件獨立性。

優點 

所需估計的參數少,對于缺失資料不敏感。

缺點 

假設屬性之間互相獨立,這往往并不成立。(喜歡吃番茄、雞蛋,卻不喜歡吃番茄炒蛋)。

需要知道先驗機率。

分類決策錯誤率。

樸素貝葉斯求解: 

P(C|F1,...,Fn)=p(C)p(F1,...,Fn|C)p(F1,...,Fn)=p(C)∏i=1np(Fi|C)

在決策樹算法中,ID3基于資訊增益作為屬性選擇的度量,C4.5基于資訊增益比作為屬性選擇的度量,CART基于基尼指數作為屬性選擇的度量。

1

不需要任何領域知識或參數假設。

适合高維資料。

簡單易于了解。

短時間内處理大量資料,得到可行且效果較好的結果。

對于各類别樣本數量不一緻資料,資訊增益偏向于那些具有更多數值的特征。

易于過拟合。

忽略屬性之間的相關性。

不支援線上學習

熵: 

Entropy(S)=−∑pilogpi

資訊增益: 

Entropy(S,A)=Entropy(S)−∑v∈V(A)|Sv||S|Entropy(Sv)

分裂資訊: 

SplitInfoR=−∑j=1k|Dj||D|log2|Dj||D|

增益比率: 

GainRatio(R)=Gain(R)SplitInfoR(D)

基尼指數: 

Gini(S)=1−∑imp2i

支援向量機把分類問題轉化為尋找分類平面的問題,并通過最大化分類邊界點距離分類平面的距離來實作分類。

可以解決小樣本下機器學習的問題。

提高泛化性能。

可以解決高維、非線性問題。超高維文本分類仍受歡迎。

避免神經網絡結構選擇和局部極小的問題。

缺失資料敏感。

記憶體消耗大,難以解釋。

運作和調差略煩人。

轉自研究者July: SVM的求解,先導出12||w||2,繼而引入拉格朗日函數,轉化為單一因子對偶變量a的求解。如此求w.b與a的等價,而求a的解法即為SMO。把求分類函數f(x)=ω∗x+b的問題轉化為求w,b的最優化問題,即凸二次規劃問題,妙。 

機器學習(二)--- 分類算法詳解 常用分類算法 Ensemble learning

從上圖我們可以看出,這條紅色的線(超平面)把紅色的點和藍色的點分開了。超平面一邊的點對應的y全部是-1,而另外一邊全部是1。 

接着我們可以令分類函數:f(x)=ωTx+b。顯然x是超平面上的點時,f(x)=0。那麼我們不妨要求所有滿足f(x)&lt;0的點,其對應的y等于-1,而f(x)&gt;0則對應的y=1的資料點。(我盜用了很多圖。。。) 

機器學習(二)--- 分類算法詳解 常用分類算法 Ensemble learning

回憶之前的目标函數: 

max1||ω||s.t.,yi(ωT+b)≥1,i=1,...,n

這個問題等價于

max1||ω||2s.t.,yi(ωT+b)≥1,i=1,...,n

很顯然這是一個凸優化的問題,更具體的,它是一個二次優化問題—目标函數是二次的,限制條件是線性的。這個問題可以用任何現成的QP(Quadratic Programming)優化包解決。但是因為這個問題的特殊性,我們還可以通過Lagrange Duality變換到對偶變量的優化問題,找到一種更加行之有效的方法求解。首先我們給每一個限制條件加上一個Lagrange mutiplier,我們可以将它們融合到目标函數中去。 L(ω,b,a)=12||ω||2−∑ni=1α(yi(wTxi+b)−1),然後我們令θ(ω)=maxai≥0L(ω,b,a)容易驗證,當某個限制條件不滿足時,例如yi(wTxi+b)&lt;1,那麼我們顯然有θ(w)=∞。而當所有限制條件都滿足時,則有θ(ω)=12||ω||2,亦即我們最初要最小化的量。那麼我們現在的目标函數就變成了:minw,bθ(ω)=minω,bmaxai≥0L(ω,b,α)=p∗,并且我們有d∗≤p∗,因為最大值中最小的一個一定要大于最小值中最大的一個。總之p∗提供了一個第一個問題的最優值p∗的一個下界。在滿足KKT條件時,二者相等,我們可以通過求解第二個問題來求解第一個問題。 

先讓L關于ω和b最小化,我們分别把L對w和b求偏導: 

∂L∂ω=0⟹ω=∑i=1nαiyixi

∂L∂b=0⟹∑i=1nαiyi=0

再帶回L得到: 

L(ω,b,a)=12∑i,j=1nαiαjyiyjxTixj−∑i,j=1nαiαjyiyjxTixj−b∑i=1nαiyi+∑i=1nαi=∑i=1nαi−12∑i,j=1nαiαjyiyjxTixj

此時我們得到關于dual variable α的優化問題: 

maxα∑ni=1αi−12∑ni,j=1αiαjyiyjxTixjs.t.,αi≥0,i=1,...,n∑ni=1αiyi=0 

這個問題存在高效的算法,不過求解過程就不在這裡介紹了。對于一個資料點進行分類時,我們是把x帶入到f(x)=wTx+b中,然後根據其正負号來進行類别劃分的。把ω=∑ni=1αiyixi代入到f(x)=wTx+b,我們就可以得到f(x)=∑ni=1αiyi&lt;xi,x&gt;+b,這裡的形式的有趣之處在于,對于新點x的檢測,隻需要計算它與訓練資料點的内積即可。 

為什麼非支援向量的α等于零呢?因為對于非支援向量來說,L(ω,b,a)=12||ω||2−∑ni=1α(yi(wTxi+b)−1)中的,(yi(wTxi+b)−1)是大于0的,而且αi又是非負的,為了滿足最大化,αi必須等于0。悲劇的非支援向量就被無聲的秒殺了。。。

暫無

計算量太大

對于樣本分類不均衡的問題,會産生誤判。

速度快。

簡單易于了解,直接看到各個特征的權重。

能容易地更新模型吸收新的資料。

如果想要一個機率架構,動态調整分類閥值。

特征處理複雜。需要歸一化和較多的特征工程。

hθ(x)=g(θTx)=11+e−θTx 

其中hθ(x)的值表示結果取1的機率。 

機器學習(二)--- 分類算法詳解 常用分類算法 Ensemble learning

那麼對于輸入x的分類結果對于類别1和類别0的機率分别為: 

P(y=1|x;θ)=hθ(x) 

P(y=0|x;θ)=1−hθ(x) 

那麼對于構造損失函數J,它們基于最大似然估計推到得到的: 

∑ni=1Cost(hθ(xi),yi)=−1m[∑ni=1yiloghθ(xi)+(1−yi)log(1−hθ(xi))] 

最小化上式,與最大化下式子類似: 

P(y|x;θ)=(hθ(x))y(1−hθ(x))1−y 

取似然函數: 

l(θ)=logL(θ)=∑ni=1yi(loghθ(xi)+(1−yi)log(1−hθ(xi))) 

使用梯度上升的方法,求解θ,同樣如果把J(θ)取為 

−1ml(θ),這樣通過梯度下降求解梯度最小值。 

梯度下降法求最小值: 

θj:=θj−ασσθiJ(θ) 

代入後得到: 

θj:=θj−α1m∑mi=1(hθ(xi)−yi)xji 

然後θ的更新過程如下: 

θj:=θj−α1mxTE

其中E=g(A)-y。 

正則化Regularization: 

正則化是在經驗風線上增加一個正則化項或者懲罰項。正則化項一般是模型複雜度的單調遞增函數,模型越複雜,正則化就越大。 

J(θ)=12m∑i=1n(hθ(xi)−yi)2+λ∑j=1nθ2j

λ是正則項系數。多分類時可以去樣本被判定為分類機率最大的那個類。

過拟合問題 

減少feature個數

規格化

分類準确率高。

并行處理能力強。

分布式存儲和學習能力強。

魯棒性較強,不易受噪聲影響。

需要大量參數(網絡拓撲、閥值、門檻值)。

結果難以解釋。

訓練時間過長。

內建學習的思路是在對新的執行個體進行分類的時候,把多個單分類器的結果進行某種組合,來對最終的結果進行分類。 

更好的資料往往打敗更好的算法,設計好的特征大有脾益。并且如果你有一個龐大的資料集,使用某種特定的算法的性能可能并不要緊。大可以挨個分類器嘗試,并且選取最好的一個。(可以多從易用性和性能考慮) 

而且從Netfliex Prize的經驗教訓來看,嘗試各類分類器、交叉驗證、內建方法往往能取得更好的結果,一般的boosting&gt;bagging&gt;single classifier。內建學習的方法主要有一下三種: 

1. 在樣本上做文章,基分類器為同一個分類算法,主要有bagging和boosting。 

2. 在分類算法上做文章,即用于訓練基分類器的樣本相同。基分類器的算法不同。 

3. 在樣本屬性集上做文章,即在不同的屬性上建構分類器,比較出名的是randomforest Tree的算法,這個有weka也有實作。 

1998年Jerome Friedman &amp; Trevor Hastie &amp; Robert Tibshirani發表文章Additive Logistic Regression: a Statistical View of Boosting,中提到Bagging是一個純粹的降低相關度的方法。如果樹的節點具有很高的相關性,bagging就會有很好的效果。

αm=12log1−emem,在em&lt;=1/2時,am&gt;=0,且am随着em的減小而增大。 

更新訓練資料集的權值分布(目的:得到樣本的新權值分布),用于下一輪疊代: 

Dm+1=(wm+1,1,wm+1,2,...wm+1,i...,wm+1,N), 

wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,...,N 

使得被基本分類器Gm(x)誤分類樣本的權值增大,而被正确分類樣本的權值減小。就這樣,通過Zm=∑Ni=1wmiexp(−αmyiGm(xi)),使得Dm+1成為一個機率分布。然後組合各個弱分類器f(x)=∑Mm=1αmGm(x),而得到的最終分類器G(x)=sign(f(x))=sign[∑Mm=1αmGm(x)]。

随機森林指通過多顆決策樹聯合組成的預測模型,可以對樣本或者特征取bagging。