AI算法統計與彙總

樸素貝葉斯

參考[1]
  • 1
  • 2

事件A和B同時發生的概率爲在A發生的情況下發生B或者在B發生的情況下發生A

P(AB)=P(A)P(B|A)=P(B)P(A|B)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|B)=P(B|A)∗P(A)P(B)

對於給出的待分類項,求解在此項出現的條件下各個目標類別出現的概率,哪個最大,就認爲此待分類項屬於哪個類別

工作原理

假設現在有樣本x=(a1,a2,a3,an)x=(a1,a2,a3,…an)這個待分類項(並認爲xx裏面的特徵獨立)
再假設現在有分類目標Y={y1,y2,y3,y4..yn}Y={y1,y2,y3,y4..yn}
那麼max(P(y1|x),P(y2|x),P(y3|x)..P(yn|x))max(P(y1|x),P(y2|x),P(y3|x)..P(yn|x))就是最終的分類類別
P(yi|x)=p(x|yi)P(yi)P(x)P(yi|x)=p(x|yi)∗P(yi)P(x)
因爲xx對於每個分類目標來說都一樣,所以就是求max(P(x|yi)p(yi))max(P(x|yi)∗p(yi))
P(x|yi)p(yi)=p(yi)i(P(ai|yi))P(x|yi)∗p(yi)=p(yi)∗∏i(P(ai|yi))
而具體的p(ai|yi)p(ai|yi)p(yi)p(yi)都是能從訓練樣本中統計出來
p(ai|yi)p(ai|yi)表示該類別下該特徵出現的概率
p(yi)p(yi)表示全部類別中這個這個類別出現的概率
好的,就是這麼工作的^_^

工作流程

準備階段

確定特徵屬性,並對每個特徵屬性進行適當劃分,然後由人工對一部分待分類項進行分類,形成訓練樣本。

訓練階段

計算每個類別在訓練樣本中的出現頻率及每個特徵屬性劃分對每個類別的條件概率估計

應用階段

使用分類器進行分類,輸入是分類器和待分類樣本,輸出是樣本屬於的分類類別

屬性特徵

特徵爲離散值時直接統計即可(表示統計概率)
特徵爲連續值的時候假定特徵符合高斯分佈:g(x,n,u)g(x,n,u)
那麼p(ak|yi)=g(xk,ni,ui)p(ak|yi)=g(xk,ni,ui)
Laplace校準(拉普拉斯校驗)

當某個類別下某個特徵劃分沒有出現時,會有P(a|y)=0P(a|y)=0,就是導致分類器質量降低,所以此時引入Laplace校驗,就是對每個類別下所有劃分的計數加1。

遇到特徵之間不獨立問題

參考改進的貝葉斯網絡,使用DAG來進行概率圖的描述

優缺點

樸素貝葉斯的優點:
對小規模的數據表現很好,適合多分類任務,適合增量式訓練。
缺點:
對輸入數據的表達形式很敏感(離散、連續,值極大極小之類的)。

邏輯迴歸和線性迴歸

參考[2,3,4]
  • 1
  • 2

LR迴歸是一個線性的二分類模型,主要是計算在某個樣本特徵下事件發生的概率,比如根據用戶的瀏覽購買情況作爲特徵來計算它是否會購買這個商品,抑或是它是否會點擊這個商品。然後LR的最終值是根據一個線性和函數再通過一個sigmod函數來求得,這個線性和函數權重與特徵值的累加以及加上偏置求出來的,所以在訓練LR時也就是在訓練線性和函數的各個權重值w。

hw(x)=11+e(wTx+b)hw(x)=11+e−(wTx+b)

關於這個權重值w一般使用最大似然法來估計,假設現在有樣本{xi,yi}{xi,yi},其中xixi表示樣本的特徵,yi{0,1}yi∈{0,1}表示樣本的分類真實值,yi=1yi=1的概率是pipi,則yi=0yi=0的概率是1pi1−pi,那麼觀測概率爲:
p(yi)=pyii(1pi)1yip(yi)=piyi∗(1−pi)1−yi

則最大似然函數爲:
(hw(xi)yi(1hw(xi))1yi)∏(hw(xi)yi∗(1−hw(xi))1−yi)

對這個似然函數取對數之後就會得到的表達式
L(w)=i(yiloghw(xi)(1yi)log(1hw(xi)))=i(yi(wTxi)log(1+ewTxi))L(w)=∑i(yi∗loghw(xi)−(1−yi)∗log(1−hw(xi)))=∑i(yi∗(wTxi)−log(1+ewTxi))

估計這個L(w)L(w)的極大值就可以得到ww的估計值。
實際操作中一般會加個負號 改爲求最小
所以求解問題就變成了這個最大似然函數的最優化問題,這裏通常會採樣隨機梯度下降法和擬牛頓迭代法來進行優化

梯度下降法

LR的損失函數爲:

J(w)=1Ni=1N(yilog(hw(xi))+(1yi)log(1hw(xi)))J(w)=−1N∑i=1N(yi∗log(hw(xi))+(1−yi)∗log(1−hw(xi)))

這樣就變成了求min(J(w))min(J(w))
其更新w的過程爲
w:=wαJ(w)w:=wα1Ni=1N(hw(xi)yi)xi)w:=w−α∗▽J(w)w:=w−α∗1N∗∑i=1N(hw(xi)−yi)∗xi)

其中αα爲步長,直到J(w)J(w)不能再小時停止
梯度下降法的最大問題就是會陷入局部最優,並且每次在對當前樣本計算cost的時候都需要去遍歷全部樣本才能得到cost值,這樣計算速度就會慢很多(雖然在計算的時候可以轉爲矩陣乘法去更新整個w值)
所以現在好多框架(mahout)中一般使用隨機梯度下降法,它在計算cost的時候只計算當前的代價,最終cost是在全部樣本迭代一遍之求和得出,還有他在更新當前的參數w的時候並不是依次遍歷樣本,而是從所有的樣本中隨機選擇一條進行計算,它方法收斂速度快(一般是使用最大迭代次數),並且還可以避免局部最優,並且還很容易並行(使用參數服務器的方式進行並行)
w:=wα(hw(xj)yj)xi);j1 Nandrandomlyw:=w−α∗(hw(xj)−yj)∗xi);j∈1 Nandrandomly

這裏SGD可以改進的地方就是使用動態的步長
α=0.04(1.0+n+i)+rα=0.04∗(1.0+n+i)+r

其他優化方法

擬牛頓法(記得是需要使用Hessian矩陣和cholesky分解)
BFGS
L-BFGS
優缺點:無需選擇學習率α,更快,但是更復雜

關於LR的過擬合問題

如果我們有很多的特性,在訓練集上擬合得很好,但是在預測集上卻達不到這種效果
1. 減少feature個數(人工定義留多少個feature、算法選取這些feature)
2. 正則化(爲了方便求解,L2使用較多)
添加正則化之後的損失函數爲:

J(w)=1Ni=1N(yilog(hw(xi))+(1yi)log(1hw(xi)))+λ||w||2J(w)=−1N∑i=1N(yi∗log(hw(xi))+(1−yi)∗log(1−hw(xi)))+λ||w||2

同時w的更新變爲
w:=wα(hw(xj)yj)xi)2αwjw:=w−α∗(hw(xj)−yj)∗xi)−2α∗wj

注意:這裏的w0w0不受正則化影響

關於LR的多分類:softmax

假設離散型隨機變量Y的取值集合是{1,2,..,k},則多分類的LR爲

P(Y=a|x)=ewaxki=1ewixP(Y=a|x)=ewa∗x∑i=1kewi∗x

這裏會輸出當前樣本下屬於哪一類的概率,並且滿足全部概率加起來=1

關於softmax和k個LR的選擇

如果類別之間是否互斥(比如音樂只能屬於古典音樂、鄉村音樂、搖滾月的一種)就用softmax
否則類別之前有聯繫(比如一首歌曲可能有影視原聲,也可能包含人聲,或者是舞曲),這個時候使用k個LR更爲合適

優缺點

Logistic迴歸優點:
實現簡單;
分類時計算量非常小,速度很快,存儲資源低;
缺點:
容易欠擬合,一般準確度不太高
只能處理兩分類問題(在此基礎上衍生出來的softmax可以用於多分類),且必須線性可分;
ps 另外LR還可以參考這篇以及多分類可以看這篇

KNN算法

給一個訓練數據集和一個新的實例,在訓練數據集中找出與這個新實例最近的k個訓練實例,然後統計最近的k個訓練實例中所屬類別計數最多的那個類,就是新實例的類

三要素

  1. k值的選擇
  2. 距離的度量(常見的距離度量有歐式距離,馬氏距離等)
  3. 分類決策規則 (多數表決規則)

k值的選擇


  1. k值越小表明模型越複雜,更加容易過擬合
  2. 但是k值越大,模型越簡單,如果k=N的時候就表明無論什麼點都是訓練集中類別最多的那個類

所以一般k會取一個較小的值,然後用交叉驗證來確定
這裏所謂的交叉驗證就是將樣本劃分一部分出來爲預測樣本,比如95%訓練,5%預測,然後k分別取1,2,3,4,5之類的,進行預測,計算最後的分類誤差,選擇誤差最小的k

KNN的迴歸

在找到最近的k個實例之後,可以計算這k個實例的平均值作爲預測值。或者還可以給這k個實例添加一個權重再求平均值,這個權重與度量距離成反比(越近權重越大)。

優缺點:

KNN算法的優點:
1. 思想簡單,理論成熟,既可以用來做分類也可以用來做迴歸;
2. 可用於非線性分類;
3. 訓練時間複雜度爲O(n);
4. 準確度高,對數據沒有假設,對outlier不敏感;
缺點:
1. 計算量大;
2. 樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);
3. 需要大量的內存;

KD樹

KD樹是一個二叉樹,表示對K維空間的一個劃分,可以進行快速檢索(那KNN計算的時候不需要對全樣本進行距離的計算了)

構造KD樹

在k維的空間上循環找子區域的中位數進行劃分的過程。
假設現在有K維空間的數據集T={x1,x2,x3,xn}T={x1,x2,x3,…xn},xi={a1,a2,a3..ak}xi={a1,a2,a3..ak}
1. 首先構造根節點,以座標a1a1的中位數b爲切分點,將根結點對應的矩形局域劃分爲兩個區域,區域1中a1<ba1<b,區域2中a1>ba1>b
2. 構造葉子節點,分別以上面兩個區域中a2a2的中位數作爲切分點,再次將他們兩兩劃分,作爲深度1的葉子節點,(如果a2=中位數,則a2的實例落在切分面)
3. 不斷重複2的操作,深度爲j的葉子節點劃分的時候,索取的aiaii=j%k+1i=j%k+1,直到兩個子區域沒有實例時停止

KD樹的搜索

  1. 首先從根節點開始遞歸往下找到包含x的葉子節點,每一層都是找對應的xi
  2. 將這個葉子節點認爲是當前的“近似最近點”
  3. 遞歸向上回退,如果以x圓心,以“近似最近點”爲半徑的球與根節點的另一半子區域邊界相交,則說明另一半子區域中存在與x更近的點,則進入另一個子區域中查找該點並且更新”近似最近點“
  4. 重複3的步驟,直到另一子區域與球體不相交或者退回根節點
  5. 最後更新的”近似最近點“與x真正的最近點

KD樹進行KNN查找

通過KD樹的搜索找到與搜索目標最近的點,這樣KNN的搜索就可以被限制在空間的局部區域上了,可以大大增加效率。

KD樹搜索的複雜度

當實例隨機分佈的時候,搜索的複雜度爲log(N),N爲實例的個數,KD樹更加適用於實例數量遠大於空間維度的KNN搜索,如果實例的空間維度與實例個數差不多時,它的效率基於等於線性掃描。
後來自己有實現過KD樹,可以看KNN算法中KD樹的應用

SVM、SMO

對於樣本點(xi,yi)(xi,yi)以及svm的超平面:wTxi+b=0wTxi+b=0
- 函數間隔:yi(wTxi+b)yi(wTxi+b)
- 幾何間隔:yi(wTxi+b)||w||yi(wTxi+b)||w||,其中||w||||w||ww的L2範數,幾何間隔不會因爲參數比例的改變而改變

svm的基本想法就是求解能正確劃分訓練樣本並且其幾何間隔最大化的超平面。

線性SVM問題

先來看svm的問題:

argmaxw,bγst.yi(wTxi+b)||w||γargmaxw,bγst.yi(wTxi+b)||w||≥γ

那麼假設γ^=γ||w||γ^=γ∗||w||
則將問題轉爲:
argmaxw,bγ^||w||st.yi(wTxi+b)1argmaxw,bγ^||w||st.yi(wTxi+b)≥1

由於γ^γ^的成比例增減不會影響實際間距,所以這裏的取γ^=1γ^=1,又因爲max(1||w||)=min(12||w||2)max(1||w||)=min(12∗||w||2)
所以最終的問題就變爲了
argminw,b12||w||2st.yi(wTxi+b)1argminw,b12∗||w||2st.yi(wTxi+b)≥1

這樣就變成了一個凸的二次規劃化,可以將其轉換爲拉格朗日函數,然後使用對偶算法來求解

對偶求解

引進拉格朗日乘子α={α1,α2..αn}α={α1,α2..αn},定義拉格朗日函數:

L(w,b,a)=12||w||2i=1N(αiyi(wTxi+b))+(αi)L(w,b,a)=12∗||w||2−∑i=1N(αi∗yi(wTxi+b))+∑(αi)

根據對偶性質 原始問題就是求對偶問題的極大極小
maxαminw,bL(w,b,α)maxαminw,bL(w,b,α)

先求L對w,bw,b的極小,再求對αα的極大。
minw,bL(w,b,α)minw,bL(w,b,α),也就是相當於對w,bw,b求偏導並且另其等於0
wL(w,b,α)=wi=1N(αiyixi)=0bL(w,b,α)=i=1N(aiyi)=0▽wL(w,b,α)=w−∑i=1N(αiyixi)=0▽bL(w,b,α)=∑i=1N(aiyi)=0

代入後可得
minw,bL(w,b,α)=12i=1Nj=1N(αiαjyiyj(xixj))+i=1Nαiminw,bL(w,b,α)=−12∗∑i=1N∑j=1N(αiαjyiyj(xi⋅xj))+∑i=1Nαi

minw,bL(w,b,α)minw,bL(w,b,α)αα的極大,即是對偶問題:
maxα12i=1Nj=1N(αiαjyiyj(xixj))+i=1Nαist.i=1N(aiyi)=0α0,i=1,2,3Nmaxα−12∗∑i=1N∑j=1N(αiαjyiyj(xi⋅xj))+∑i=1Nαist.∑i=1N(aiyi)=0α≥0,i=1,2,3…N

將求最大轉爲求最小,得到等價的式子爲:
minα12i=1Nj=1N(αiαjyiyj(xixj))i=1Nαist.i=1N(aiyi)=0α0,i=1,2,3Nminα12∗∑i=1N∑j=1N(αiαjyiyj(xi⋅xj))−∑i=1Nαist.∑i=1N(aiyi)=0α≥0,i=1,2,3…N

假如求解出來的ααα=(α1,α2,αn)α∗=(α1∗,α2∗,…αn∗)
則得到最優的w,bw,b分別爲
w=i=1N(αiyixi)b=yji=1N(αiyi(xixj))w∗=∑i=1N(αi∗yixi)b∗=yj−∑i=1N(αi∗yi(xi⋅xj))

所以,最終的決策分類面爲
f(x)=sign(i=1N(αiyi(xxi)+b)f(x)=sign(∑i=1N(αi∗yi(x⋅xi)+b∗)

也就是說,分類決策函數只依賴於輸入xx與訓練樣本的輸入的內積
ps:上面介紹的是SVM的硬間距最大化,還有一種是軟間距最大化,引用了鬆弛變量ζζ,則次svm問題變爲:
\underset{w,b}{argmin} \quad \frac{1}{2}*||w||^2 + C \sum_{i=1}^{N} \zeta_i \\ st. \quad y_i(w^Tx_i+b) \geq 1-\zeta_i \\ \zeta_i \geq 0,i=1,2…N
argminw,b12||w||2+Ci=1Nζist.yi(wTxi+b)1ζiζi0,i=1,2Nargminw,b12∗||w||2+C∑i=1Nζist.yi(wTxi+b)≥1−ζiζi≥0,i=1,2…N

其餘解決是與硬間距的一致~
還有:與分離超平面最近的樣本點稱爲支持向量

損失函數

損失函數爲(優化目標):

i=1N[1yi(wTxi+b)]++λ||w||2∑i=1N[1−yi(wTxi+b)]++λ||w||2

其中[1yi(wTxi+b)]+[1−yi(wTxi+b)]+稱爲摺頁損失函數,因爲:
[1yi(wTxi+b)]+={01yi(wTxi+b)if1yi(wTxi+b)0otherwise[1−yi(wTxi+b)]+={0if1−yi(wTxi+b)≤01−yi(wTxi+b)otherwise

爲什麼要引入對偶算法

對偶問題往往更加容易求解(結合拉格朗日和kkt條件)
可以很自然的引用核函數(拉格朗日表達式裏面有內積,而核函數也是通過內積進行映射的)

核函數

將輸入特徵x(線性不可分)映射到高維特徵R空間,可以在R空間上讓SVM進行線性可以變,這就是核函數的作用
多項式核函數:K(x,z)=(xz+1)pK(x,z)=(x∗z+1)p
高斯核函數:K(x,z)=exp((xz)2σ2)K(x,z)=exp(−(x−z)2σ2)
字符串核函數:貌似用於字符串處理等

SVM優缺點

優點:
1. 使用核函數可以向高維空間進行映射
2. 使用核函數可以解決非線性的分類
3. 分類思想很簡單,就是將樣本與決策面的間隔最大化
4. 分類效果較好
缺點:
1. 對大規模數據訓練比較困難
2. 無法直接支持多分類,但是可以使用間接的方法來做

SMO

SMO是用於快速求解SVM的
它選擇凸二次規劃的兩個變量,其他的變量保持不變,然後根據這兩個變量構建一個二次規劃問題,這個二次規劃關於這兩個變量解會更加的接近原始二次規劃的解,通過這樣的子問題劃分可以大大增加整個算法的計算速度,關於這兩個變量:
1. 其中一個是嚴重違反KKT條件的一個變量
2. 另一個變量是根據自由約束確定,好像是求剩餘變量的最大化來確定的。

SVM多分類問題

  1. 直接法
    直接在目標函數上進行修改,將多個分類面的參數求解合併到一個最優化問題中,通過求解該優化就可以實現多分類(計算複雜度很高,實現起來較爲困難)
  2. 間接法
    1. 一對多
      其中某個類爲一類,其餘n-1個類爲另一個類,比如A,B,C,D四個類,第一次A爲一個類,{B,C,D}爲一個類訓練一個分類器,第二次B爲一個類,{A,C,D}爲另一個類,按這方式共需要訓練4個分類器,最後在測試的時候將測試樣本經過這4個分類器f1(x)f1(x),f2(x)f2(x),f3(x)f3(x)f4(x)f4(x),取其最大值爲分類器(這種方式由於是1對M分類,會存在偏置,很不實用)
    2. 一對一(libsvm實現的方式)
      任意兩個類都訓練一個分類器,那麼n個類就需要n*(n-1)/2個svm分類器。
      還是以A,B,C,D爲例,那麼需要{A,B},{A,C},{A,D},{B,C},{B,D},{C,D}爲目標共6個分類器,然後在預測的將測試樣本通過這6個分類器之後進行投票選擇最終結果。(這種方法雖好,但是需要n*(n-1)/2個分類器代價太大,不過有好像使用循環圖來進行改進)

決策樹

決策樹是一顆依託決策而建立起來的樹。

ID3

  1. 首先是針對當前的集合,計算每個特徵的信息增益
  2. 然後選擇信息增益最大的特徵作爲當前節點的決策決策特徵
  3. 根據特徵不同的類別劃分到不同的子節點(比如年齡特徵有青年,中年,老年,則劃分到3顆子樹)
  4. 然後繼續對子節點進行遞歸,直到所有特徵都被劃分
    S(C,ai)=i(pilog(pi))S(C,ai)=−∑i(pi∗log(pi))

一個屬性中某個類別的熵 pi=P(yi|ai)pi=P(yi|ai), pipi表示aiai情況下發生yiyi的概率,也即是統計概率。

S(C,A)=i(P(A=ai)S(ai))S(C,A)=∑i(P(A=ai)∗S(ai))
整個屬性的熵,爲各個類別的比例與各自熵的加權求和。
Gain(C,A)=S(C)S(C,A)Gain(C,A)=S(C)−S(C,A)
增益表示分類目標的熵減去當前屬性的熵,增益越大,分類能力越強
(這裏前者叫做經驗熵,表示數據集分類C的不確定性,後者就是經驗條件熵,表示在給定A的條件下對數據集分類C的不確定性,兩者相減叫做互信息,決策樹的增益等價於互信息)。
比如說當前屬性是是否擁有房產,分類是是否能償還債務
現在:
- 有用房產爲7個,4個能償還債務,3個無法償還債務
- 然後無房產爲3個,其中1個能償還債務,2個無法償還債務
然後
有房子的熵:S(have_house)=(47log47+37log37)S(have_house)=−(47∗log47+37∗log37)
無房子的熵:S(no_house)=(13log13+23log23)S(no_house)=−(13∗log13+23∗log23)
分類的熵:S(classifier)=(510log510+510log510)S(classifier)=−(510∗log510+510∗log510)
最終的增益=S(classifier)(710S(have_house)+310S(no_house))S(classifier)−(710∗S(have_house)+310∗S(no_house)) 最大越好

關於損失函數

設樹的葉子節點個數爲TTtt爲其中一個葉子節點,該葉子節點有NtNt個樣本,其中kk類的樣本有NtkNtk個,H(t)H(t)爲葉子節點上的經驗熵,則損失函數定義爲

Ct(T)=(NtH(t))+λ|T|Ct(T)=∑(Nt∗H(t))+λ|T|

其中
H(t)=(NtkNtlog(NtkNt))H(t)=∑(NtkNt∗log(NtkNt))

代入可以得到
Ct(T)=((Ntklog(Ntk/Nt)))+λ|T|Ct(T)=∑(∑(Ntk∗log(Ntk/Nt)))+λ|T|

λ|T|λ|T|爲正則化項,λλ是用於調節比率
決策樹的生成只考慮了信息增益

C4.5

它是ID3的一個改進算法,使用信息增益率來進行屬性的選擇

splitInformation(S,A)=i(|Si||S|log2(|Si||S|))GainRatio(S,A)=Gain(S,A)splitInformation(S,A)splitInformation(S,A)=−∑i(|Si||S|∗log2(|Si||S|))GainRatio(S,A)=Gain(S,A)splitInformation(S,A)

優缺點:
準確率高,但是子構造樹的過程中需要進行多次的掃描和排序,所以它的運算效率較低

Cart

分類迴歸樹(Classification And Regression Tree)是一個決策二叉樹,在通過遞歸的方式建立,每個節點在分裂的時候都是希望通過最好的方式將剩餘的樣本劃分成兩類,這裏的分類指標:
1. 分類樹:基尼指數最小化(gini_index)
2. 迴歸樹:平方誤差最小化
分類樹:
1. 首先是根據當前特徵計算他們的基尼增益
2. 選擇基尼增益最小的特徵作爲劃分特徵
3. 從該特徵中查找基尼指數最小的分類類別作爲最優劃分點
4. 將當前樣本劃分成兩類,一類是劃分特徵的類別等於最優劃分點,另一類就是不等於
5. 針對這兩類遞歸進行上述的劃分工作,直達所有葉子指向同一樣本目標或者葉子個數小於一定的閾值
gini用來度量分佈不均勻性(或者說不純),總體的類別越雜亂,GINI指數就越大(跟熵的概念很相似)

gini(ai)=1i(p2i)gini(ai)=1−∑i(pi2)
pipi當前數據集中第i類樣本的比例
gini越小,表示樣本分佈越均勻(0的時候就表示只有一類了),越大越不均勻
基尼增益
gini_gain=i(NiNgini(ai))gini_gain=∑i(NiN∗gini(ai))
表示當前屬性的一個混亂 NiNNiN表示當前類別佔所有類別的概率
最終Cart選擇GiniGain最小的特徵作爲劃分特徵
以ID3中的貸款的那棵樹爲樣例:
基尼指數有房產:gini(have_house)=1((37)2+(47)2)gini(have_house)=1−((37)2+(47)2)
基尼指數無房產:gini(no_house)=1((13)2+(23)2)gini(no_house)=1−((13)2+(23)2)
基尼增益爲:gini_gain=710gini(have_house)+310gini(no_house)gini_gain=710∗gini(have_house)+310∗gini(no_house)

迴歸樹

迴歸樹是以平方誤差最小化的準則劃分爲兩塊區域

  1. 遍歷特徵計算最優的劃分點s,
    使其最小化的平方誤差是:
    min{min(R1.sigma((yic1)2))+min(R2.sigma((yic2)2))}min{min(R1.sigma((yi−c1)2))+min(R2.sigma((yi−c2)2))}

    計算根據s劃分到左側和右側子樹的目標值與預測值之差的平方和最小,這裏的預測值是兩個子樹上輸入xi樣本對應yiyi的均值
  2. 找到最小的劃分特徵j以及其最優的劃分點s,根據特徵j以及劃分點s將現有的樣本劃分爲兩個區域,一個是在特徵j上小於等於s,另一個在在特徵j上大於s
    R1(j)={x|x(j)s}R2(j)={x|x(j)>s}R1(j)={x|x(j)≤s}R2(j)={x|x(j)>s}
  3. 進入兩個子區域按上述方法繼續劃分,直到到達停止條件

    這裏面的最小化我記得可以使用最小二乘法來求

    關於剪枝:用獨立的驗證數據集對訓練集生長的樹進行剪枝(事後剪枝)。

停止條件

  1. 直到每個葉子節點都只有一種類型的記錄時停止,(這種方式很容易過擬合)
  2. 另一種時當葉子節點的記錄樹小於一定的閾值或者節點的信息增益小於一定的閾值時停止

關於特徵與目標值

  1. 特徵離散 目標值離散:可以使用ID3,cart
  2. 特徵連續 目標值離散:將連續的特徵離散化 可以使用ID3,cart
  3. 特徵離散 目標值連續

決策樹的分類與迴歸

  • 分類樹
    輸出葉子節點中所屬類別最多的那一類
  • 迴歸樹
    輸出葉子節點中各個樣本值的平均值

理想的決策樹

葉子節點數儘量少
葉子節點的深度儘量小(太深可能會過擬合)

解決決策樹的過擬合

  1. 剪枝
    1. 前置剪枝:在分裂節點的時候設計比較苛刻的條件,如不滿足則直接停止分裂(這樣幹決策樹無法到最優,也無法得到比較好的效果)
    2. 後置剪枝:在樹建立完之後,用單個節點代替子樹,節點的分類採用子樹中主要的分類(這種方法比較浪費前面的建立過程)
  2. 交叉驗證
  3. 隨機森林

優缺點

優點:
1. 計算量簡單,可解釋性強,比較適合處理有缺失屬性值的樣本,能夠處理不相關的特徵;
缺點:
1. 單顆決策樹分類能力弱,並且對連續值變量難以處理;
2. 容易過擬合(後續出現了隨機森林,減小了過擬合現象);

隨機森林RF

隨機森林是有很多隨機得決策樹構成,它們之間沒有關聯。得到RF以後,在預測時分別對每一個決策樹進行判斷,最後使用Bagging的思想進行結果的輸出(也就是投票的思想)

學習過程

  1. 現在有N個訓練樣本,每個樣本的特徵爲M個,需要建K顆樹
  2. 從N個訓練樣本中有放回的取N個樣本作爲一組訓練集(其餘未取到的樣本作爲預測分類,評估其誤差)
  3. 從M個特徵中取m個特徵左右子集特徵(m<
  4. 對採樣的數據使用完全分裂的方式來建立決策樹,這樣的決策樹每個節點要麼無法分裂,要麼所有的樣本都指向同一個分類
  5. 重複2的過程K次,即可建立森林

預測過程

  1. 將預測樣本輸入到K顆樹分別進行預測
  2. 如果是分類問題,直接使用投票的方式選擇分類頻次最高的類別
  3. 如果是迴歸問題,使用分類之後的均值作爲結果

參數問題

  1. 這裏的一般取m=sqrt(M)
  2. 關於樹的個數K,一般都需要成百上千,但是也有具體的樣本有關(比如特徵數量)
  3. 樹的最大深度,(太深可能可能導致過擬合??)
  4. 節點上的最小樣本數、最小信息增益

泛化誤差估計

使用oob(out-of-bag)進行泛化誤差的估計,將各個樹的未採樣樣本作爲預測樣本(大約有36.8%),使用已經建立好的森林對各個預測樣本進行預測,預測完之後最後統計誤分得個數佔總預測樣本的比率作爲RF的oob誤分率。

學習算法

  1. ID3算法:處理離散值的量
  2. C45算法:處理連續值的量
  3. Cart算法:離散和連續 兩者都合適?

關於CART

Cart可以通過特徵的選擇迭代建立一顆分類樹,使得每次的分類平面能最好的將剩餘數據分爲兩類
gini=1(p2i)gini=1−∑(pi2),表示每個類別出現的概率和與1的差值,
分類問題:argmax(GiniGiniLeftGiniRight)argmax(Gini−GiniLeft−GiniRight)
迴歸問題:argmax(VarVarLeftVarRight)argmax(Var−VarLeft−VarRight)
查找最佳特徵f已經最佳屬性閾值th 小於th的在左邊,大於th的在右邊子樹

優缺點

  1. 能夠處理大量特徵的分類,並且還不用做特徵選擇
  2. 在訓練完成之後能給出哪些feature的比較重要
  3. 訓練速度很快
  4. 很容易並行
  5. 實現相對來說較爲簡單

GBDT

GBDT的精髓在於訓練的時候都是以上一顆樹的殘差爲目標,這個殘差就是上一個樹的預測值與真實值的差值。

比如,當前樣本年齡是18歲,那麼第一顆會去按18歲來訓練,但是訓練完之後預測的年齡爲12歲,差值爲6,所以第二顆樹的會以6歲來進行訓練,假如訓練完之後預測出來的結果爲6,那麼兩棵樹累加起來就是真實年齡了,但是假如第二顆樹預測出來的結果是5,那麼剩餘的殘差1就會交給第三個樹去訓練。
Boosting的好處就是每一步的參加就是變相了增加了分錯instance的權重,而對已經對的instance趨向於0,這樣後面的樹就可以更加關注錯分的instance的訓練了

Shrinkage

Shrinkage認爲,每次走一小步逐步逼近的結果要比每次邁一大步逼近結果更加容易避免過擬合。

y(1i)=y(1i1)+stepyiy(1∼i)=y(1∼i−1)+step∗yi

就像我們做互聯網,總是先解決60%用戶的需求湊合着,再解決35%用戶的需求,最後才關注那5%人的需求,這樣就能逐漸把產品做好.

調參

  1. 樹的個數 100~10000
  2. 葉子的深度 3~8
  3. 學習速率 0.01~1
  4. 葉子上最大節點樹 20
  5. 訓練採樣比例 0.5~1
  6. 訓練特徵採樣比例 sqrt(num)

優缺點:

優點:
1. 精度高
2. 能處理非線性數據
3. 能處理多特徵類型
4. 適合低維稠密數據
缺點:
1. 並行麻煩(因爲上下兩顆樹有聯繫)
2. 多分類的時候 複雜度很大

BP

最小二乘法

最小二乘法是一種數學的優化技術,通過求最小化平方誤差來尋找最佳的函數匹配
假設現在有二維的觀測數據(x1,y1),(x2,y2)(xn,yn)(x1,y1),(x2,y2)…(xn,yn),求y=a+bxy=a+bx的擬合。
現設yi=a+bxi+kiyi=a+b∗xi+ki 如果有a,ba,b能得到Ni=1(|ki|)∑i=1N(|ki|)最小,則該線比較理想
所以先變爲求min(Ni=1(ki))min(∑i=1N(ki)) ,這個與min(Ni=1(k2i))min(∑i=1N(ki2))等價
ki=yi(a+bxi)ki=yi−(a+b∗xi)
那麼現設f=i=1N((yi(a+bxi))2)f=∑i=1N((yi−(a+b∗xi))2)求其最小即可

上述就是最小二乘原則,估計a,ba,b的方法稱爲最小二乘法

先求ffa,ba,b的偏導:

af=2i=1N(yi(a+bxi))=0▽af=−2∗∑i=1N(yi−(a+b∗xi))=0

bf=2xii=1N(yi(a+bxi))=0▽bf=−2∗xi∗∑i=1N(yi−(a+b∗xi))=0

現設:
X=Ni=1xiNY=Ni=1yiNX=∑i=1NxiNY=∑i=1NyiN

則代入上述偏導:
aN+bNX=NYaNX+bi=1N(x2i)=i=1N(xiyi)a∗N+b∗N∗X=N∗Ya∗N∗X+b∗∑i=1N(xi2)=∑i=1N(xi∗yi)

求該行列式:
NNXNXNi=1x2i=Ni=1N((xiX))!=0|NN∗XN∗X∑i=1Nxi2|=N∗∑i=1N((xi−X))!=0

所以有唯一解
最後記:
l(xx)=i=1N(xiX)2l(yy)=i=1N(yiY)2l(xy)=i=1N((xiX)(yiY))l(xx)=∑i=1N(xi−X)2l(yy)=∑i=1N(yi−Y)2l(xy)=∑i=1N((xi−X)(yi−Y))


b=l(xy)l(xx)a=YbXb=l(xy)l(xx)a=Y−b∗X

EM

EM用於隱含變量的概率模型的極大似然估計,它一般分爲兩步:第一步求期望(E),第二步求極大(M),
如果概率模型的變量都是觀測變量,那麼給定數據之後就可以直接使用極大似然法或者貝葉斯估計模型參數。
但是當模型含有隱含變量的時候就不能簡單的用這些方法來估計,EM就是一種含有隱含變量的概率模型參數的極大似然估計法。
應用到的地方:混合高斯模型、混合樸素貝葉斯模型、因子分析模型

Bagging

  1. 從N樣本中有放回的採樣N個樣本
  2. 對這N個樣本在全屬性上建立分類器(CART,SVM)
  3. 重複上面的步驟,建立m個分類器
  4. 預測的時候使用投票的方法得到結果

Boosting

boosting在訓練的時候會給樣本加一個權重,然後使loss function儘量去考慮那些分錯類的樣本(比如給分錯類的樣本的權重值加大)

凸優化

在機器學習中往往是最終要求解某個函數的最優值,但是一般情況下,任意一個函數的最優值求解比較困難,但是對於凸函數來說就可以有效的求解出全局最優值。

凸集

一個集合C是,當前僅當任意x,y屬於C且0Θ10≤Θ≤1,都有Θx+(1Θ)yΘ∗x+(1−Θ)∗y屬於C
用通俗的話來說C集合線段上的任意兩點也在C集合中

凸函數

一個函數f其定義域(D(f))是凸集,並且對任意x,y屬於D(f)和0Θ10≤Θ≤1都有

f(Θx+(1Θ)y)Θf(x)+(1Θ)f(y)f(Θ∗x+(1−Θ)∗y)≤Θ∗f(x)+(1−Θ)∗f(y)

用通俗的話來說就是曲線上任意兩點的割線都在曲線的上方
常見的凸函數有:
指數函數f(x)=ax;a>1f(x)=ax;a>1
負對數函數logax;a>1,x>0−logax;a>1,x>0
開口向上的二次函數等
凸函數的判定:
如果f是一階可導,對於任意數據域內的x,y滿足f(y)f(x)+f(x)(yx)f(y)≥f(x)+f′(x)(y−x)
如果f是二階可導,

凸優化應用舉例

SVM:其中由max|w|max|w| 轉向min(12|w|2)min(12∗|w|2)
最小二乘法?
LR的損失函數(yilog(hw(xi))+(1yi)(log(1hw(xi))))∑(yi∗log(hw(xi))+(1−yi)∗(log(1−hw(xi))))

參考

[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]. 《統計學習方法》.李航

發佈了30 篇原創文章 · 獲贊 50 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章