機器學習基礎算法小結

機器學習的問題更多的對算法模型的優化,特徵工程也屬於對算法模型的優化,這一點在後面均有體現。

說明:本文是對部分機器學習的算法模型的思想進行抽取,不會出現詳細的推導。

先看一下要掌握的算法有哪些,我個人覺得部分算法有點偏,不過應該是在某個領域裏有應用而且效果很好,否則不會成爲必掌握的算法。
WechatIMG3.jpeg

線性迴歸

1、線性函數的表示:

f(x)=θ0x0+θ1x1++θnxn

向量形式:
f(x)=θ⃗ TX⃗ 

其中:
θ⃗ =(θ1;θ2;θn)

當 Θ 確定後,模型就確定了,Θ = 0是可得截距項 b。

2、cost function,亦即最小二乘法估計:

J(θi)=12mi=1m(hθ(xi)yi)2

記得前面說過的機器學習的大部分問題都是優化模型嗎?開始,使用梯度下降優化代價函數,這也是線性迴歸算法思想的精髓。
θj:=θjαθjJ(θ)

α 爲學習率。

3、爲防止過擬合,加入正則化

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

優點:易於理解,計算簡單;
缺點:不能擬合非線性數據;

logistic迴歸

首先明確logistic迴歸不是迴歸,而是線性分類器。
1、logistic函數表達式爲:

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

其中:
g(z)=11+ez

經變形後得:
lnhθ1hθ=θTx

2、logistic迴歸主要是通過極大似然來估計待求參數 Θ 的值,樣本的後驗概率爲:

L(θ)=p(y⃗ X;θ)=i=1mp(y(i)x(i);θ)

=i=1m(hθ(x(i)))y(i)(1hθ(x(i)))1y(i)

其中:
P(y=1x;θ)=hθ(x)

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

對該式取似然對數可得cost function:
J(θ)=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

對cost function添加正則項後:
J(θ)=1mi=1m[y(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]+λ2mj=1nθ2j

3、可用凸優化理論中的牛頓法,梯度下降法等方法最小化cost function,此處使用梯度下降法求最優解:

θj:=θjJ(θ)θj

優點:
* 實現簡單,易於理解;
* 分類時計算量非常小,速度很快,存儲資源低;

缺點:
* 容易欠擬合,一般準確度不太高;
* 只能處理兩分類問題(在此基礎上衍生出來的softmax可以用於多分類),且必須線性可分。

決策樹

決策樹中關鍵點就是選擇一個最優屬性進行分枝,位於決策樹上屬性的重要度依次遞減,信息增益可用於度量屬性的重要度,因此要深入理解信息增益及其計算。

1、信息熵定義,n表示有n個分類類別:

Ent(D)=k=1npklog2pk

信息增益(information gain):
Gain(D,a)=Ent(D)v=1VDvDEnt(Dv)

其中:屬性a產生V個可能分支,|D^v|/|D|爲權重,即樣本數越多的分支影響越大;信息增益越大的屬性a劃分效果越好,ID3決策算法以此爲劃分標準。

2、增益率

Gain_ratio(D,a)=Gain(D,a)IV(a),

其中:
IV(a)=v=1VDvDlog2DvD

注意:C4.5算法先從劃分屬性中找出信息增益高於平均水平的屬性,再從中選擇增益率最高的屬性。

3、基尼指數–CART決策樹選擇屬性的標準
基尼值:

Gini(D)=k=1nkkpkpk=1k=1np2k

Gini(D)越小,數據集D的純度越高,屬性a的基尼指數定義:
Gini_index(D,a)=v=1VDvDGini(Dv)

在候選屬性集合A中,選擇那個能使劃分後基尼指數最小的作爲最優劃分屬性。

優點:計算量簡單,可解釋性強,比較適合處理有缺失屬性值的樣本,能夠處理不相關的特徵;
缺點:容易過擬合,對決策樹進行剪枝處理以及使用隨機森林算法都能減小過擬合現象。

樸素貝葉斯

1、貝葉斯計算公式:

P(cx)=P(c)P(xc)P(x)

這只是一個理論公式,因爲該公式存在一個問題:類條件概率P(x|c)是所有屬性的聯合概率,計算時會出現組合爆炸,當樣本稀疏、屬性較多時問題更加嚴重。

2、爲避開上面的問題,樸素貝葉斯分類器基於屬性條件獨立性假設,將上式變爲:

P(cx)=P(c)P(xc)P(x)=P(c)P(x)i=1dP(xic)

其中d爲屬性數目,x(i)爲x在第i個屬性上的取值。
對所有的類別來說P(x)相同,所以樸素貝葉斯分類器的表達式:
hnb(x)=argmaxcyP(c)i=1dP(xic)

3、Laplacian correction,如果P(x|c)中的某一項爲0,則其聯合概率的乘積也可能爲0,爲了避免這種現象出現,一般情況下會將這一項初始化爲1,當然爲了保證概率相等,分母應對應初始化爲2(這裏因爲是2類,所以加2,如果是k類就需要加k, 分母加k的原因是使之滿足全概率公式)。

優點:對小規模的數據表現很好,適合多分類任務,適合增量式訓練。
缺點:對輸入數據的表達形式很敏感。

EM算法

有時候因爲樣本的產生和隱含變量有關(隱含變量是不能被觀察出的變量)。

LL(ΘX,Z)=lnP(X,ZΘ)

而求模型的參數時一般採用最大化已觀測數據的對數“邊際似然”:
LL(ΘX)=lnP(XΘ)=lnZP(X,ZΘ)

可使用梯度下降對隱變量進行估計,但求和的項數會隨隱變量的數量以指數形式上升,這時可以採用EM算法來求模型的參數(對應模型參數個數可能有多個),EM算法一般分爲2步,迭代至收斂:
1. 基於\Theta^{t}推斷隱變量Z的期望,記爲Zt
2. 再基於已觀測變量X和Zt 對參數Θ 做極大似然估計,記爲Θt+1 .

若基於Θt 計算隱變量Z的概率分佈P(Z|X,Θt) ,則EM爲:
* E步(Expectation):用參數Θt 推斷隱變量發佈P(Z|X,Θt) ,並計算對數似然關於Z的期望;

Q(ΘΘt)=EZX,ΘtLL(ΘX,Z)

* M步(Maximization):尋找參數最大化期望似然;
Θt+1=argmaxΘQ(ΘΘt).

KNN算法

1、KNN的主要內容如下:
1. 計算訓練樣本和測試樣本中每個樣本點的距離(常見的距離度量有歐式距離,馬氏距離等);
2. 對上面所有的距離值進行排序;
3. 選前k個最小距離的樣本;
4. 根據這k個樣本的標籤進行投票,得到最後的分類類別;

2、如何選擇一個最佳的K值,這取決於數據。一般情況下,在分類時較大的K值能夠減小噪聲的影響。但會使類別之間的界限變得模糊。一個較好的K值可通過交叉驗證獲取。另外噪聲和非相關性特徵向量的存在會使K近鄰算法的準確性減小。KNN算法對距離公式較爲“敏感”;

3、近鄰算法具有較強的一致性結果。隨着數據趨於無限,算法保證錯誤率不會超過貝葉斯算法錯誤率的兩倍。對於一些好的K值,K近鄰保證錯誤率不會超過貝葉斯理論誤差率。

優點:
1. 思想簡單,理論成熟,既可以用來做分類也可以用來做迴歸;
2. 可用於非線性分類;
3. 訓練時間複雜度爲O(n);
4. 準確度高,對數據沒有假設,對outlier不敏感;

缺點:
1. 計算量大,容易造成內存溢出,需要大量的內存;
2. 樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);

SVM

SVM 和 LDA 模型可謂是對數學能力和思維的極大考驗,它的推導過程有必要理解掌握。
1、SVM核心思想一:最大間隔
將訓練集中的正負樣本最大程度的分隔開,那麼該分隔線應位於訓練樣本中距離分隔邊界垂直距離最近的樣本點的“正中間”,這樣的分割線具有最好的魯棒性和泛化能力。

{w⃗ Txi+b1,yi=1;w⃗ Txi+b1,yi=1

2、SVM核心思想二:決策公式
將上面的最大間隔公式統一起來,且決策邊界上的點(support vector)要滿足最大間隔要求,因爲y只能取1或-1,所以決策公式爲:

yi(w⃗ Txi+b)1=0

3、SVM核心思想三:目標函數
取決策邊界上的正負樣本點做向量運算,可得決策邊界之間的距離爲:

r===(x⃗ +x⃗ )w⃗ w1w[1b(1b)]2w

下一步當然是最大優目標函數:
maxw⃗ ,b2w=minw⃗ ,b12w2s.t. yi(w⃗ Txi+b)1, i=1,2,,m.

4、SVM核心思想四:優化理論
對下式進行優化,它本身就是一個convex quadratic programming–凸二次規劃問題,能直接優化。

minw⃗ ,b12w2s.t. yi(w⃗ Txi+b)1, i=1,2,,m.

但還有一種方法優化方法是對機器學習本身而言很有效的方法(後面感受),那就是對下式使用拉格朗日乘子約束,可寫爲:
L(w⃗ ,b,α⃗ )=12w2+i=1mαi(1yi(w⃗ Txi+b)), α⃗ =(α1;α2;;αm).

使 L 對 ω 和 b 求偏導爲0得:
w⃗ =1mαiyixi,0=1mαiyi.

把上面得2個式子帶回 L 得:
maxα⃗ i=1mαi12i=1mj=1mαiαjyiyjx⃗ Tixj ,s.t. i=1mαiαj=0, αi0,i=1,2,,m .

解得 α ,ω,b 後,可得模型爲:
f(x⃗ )==w⃗ Tx⃗ +bi=1mαiyix⃗ Tix⃗ +b

此式得約束條件即爲KKT條件:
αi0;yif(x⃗ i)10;αi(yif(x⃗ i)1)=0.

於是,對任意得訓練樣本,總有 α = 0或 α ﹥ 0。若 α = 0時,對f(x)無影響;若α ﹥ 0,則對應得樣本位於決策邊界上,是支持向量。這就表明:當使用SVM訓練完成後,只有最終得支持向量對模型有影響。支持向量的美妙就在此。

5、再回決策公式
現在得決策公式變爲:

i=1mαiyix⃗ i,u⃗ +b0

由此可見,當在做決策時,不需要知道x是什麼,主要知道訓練集中得x與測試集中得u點乘後結果就行。當樣本不能線性可分時,將點乘部分換爲非線性核即可。

6、SVM的終極殺器:核方法–kernel
當樣本線性不可分時,將樣本映射到高維空間使其能線性可分,將﹤x, u﹥替換爲其他核方法即可實現,其餘部分推導類似。核函數:

k(xi,xj)=Φ(xi),Φ(xj)=Φ(xi)TΦ(xj)

7、SMO
發現我們還有 α 沒有求出,這就是SMO存在得理由。SMO的思想:
* 選取一對需要更新的 αiαj ,固定其他 α 參數;
* 求解更新後的 α 。

代入下式循環迭代直至滿足要求。

maxα⃗ i=1mαi12i=1mj=1mαiαjyiyjx⃗ Tixj ,s.t. i=1mαiαj=0, αi0,i=1,2,,m .

8、Hinge loss
Hinge loss與logistic迴歸有關,線性版的SVM。

優點:
* 可用於線性/非線性分類,也可以用於迴歸;
* 低泛化誤差;
* 容易解釋;

缺點:
* 對參數和核函數的選擇比較敏感;
* 原始的SVM只比較擅長處理二分類問題;
* 時間複雜度高O(n^3),不能承載大數據的要求.

SVM的終極核心是最大間隔,它的思想很重要。此處我並沒有給圖,不過結合資料看時沒有問題的。
參考:
支持向量機通俗導論(理解SVM的三層境界)
周志華老師的《機器學習》
Ng老師的《machine learning》視頻
林軒田老師的《機器學習技法》視頻
七月在線馮老師的視頻

聚類

在做特徵工程時,id 一般都不用,這時可以根據id對數據進行聚類,然後再根據聚類結果給一個clustering id。在社交網絡中對某人的社交關係也會使用聚類。
優點:
* (1)k-means算法是解決聚類問題的一種經典算法,算法簡單、快速;
* (2)對處理大數據集,該算法是相對可伸縮的和高效率的,因爲它的複雜度大約是O(nkt),其中n是所有對象的數目,k是簇的數目,t是迭代的次數。通常k<

降維

我們都知道當屬性太多、維度過高會使得數據變稀疏從而加大計算的開銷,有效信息被“埋藏得”更深,此時通過降低維度來緩解該情況,最常見的降維算法是:PCA算法和LDA算法,這裏有一篇文章對此有詳細的說明,再加上書籍的補充就很容易理解。四大機器學習降維算法:PCA、LDA、LLE、Laplacian Eigenmaps

在這篇文章裏面還介紹了另外的兩種降維方法。

ensemble learning – 集成學習

到此處,我們看到了每個算法都有各自的優缺點,那我們有什麼辦法可以儘量的避免一部分算法的缺陷嗎?都這麼說啦!肯定有的,但不能完全避免,只是減小算法缺陷在使用的過程中所造成的影響。下圖是集成學習器的圖示。
Untitled.jpg
個體學習器之間依賴性強、必須串行生成的序列化方法,代表是Boosting;另一個是個體學習器之間的依賴性不強、可以同時生成的並行化方法,代表是Bagging和Random Forest。

1、Boosting的代表AdaBoost
Gradient Boosted Decision Tree(GBDT)的特點:
1. Adaboost的Regression版本;
2. 把殘差作爲下一輪的學習目標;
3. 最終的結果有加權和值得到,不再是簡單的多數投票:

G(x)=amGm(x).

2、Bagging和Random Forest
Bagging對分類任務使用簡單投票法,對迴歸問題使用簡單的平均法。Bagging可以不用修改就可用於多分類、迴歸任務中,這點與AdaBoost不同。在像決策樹和神經網絡等易受樣本擾動的學習器上效果較爲明顯。
Random Forest會隨着個體學習器的增多,通常會收斂到更低的泛化誤差,而且它的訓練效率優於Bagging。

XGBoost可謂是kaggle比賽神奇啊,最近Microsoft開源了功能與XGBoost相同的庫,叫LightGBM,它的速度和準確度稍優於XGBoost。

pLSA & LDA

pLSA跟LDA的本質區別就在於它們去估計未知參數所採用的思想不同,前者採用的是頻率派思想,後者採用的是貝葉斯派思想。LDA就是在pLSA的基礎上加層貝葉斯框架,即LDA就是pLSA的貝葉斯版本。

1、pLSA
Image from 主體模型, page 38.png

2、LDA
Image from 主體模型, page 39.png

LDA模型得公式推導很麻煩,但模型思路和我們的思維過程類似。拆分後可變爲以下得5步驟:
1. 一個函數:gamma函數;
2. 四個分佈:二項分佈、多項分佈、beta分佈、Dirichlet分佈;
3. 一個概念和一個理念:共軛先驗和貝葉斯框架;
4. 兩個模型:pLSA、LDA;
5. 一個採樣:Gibbs採樣

具體推導過程參考 通俗理解LDA主題模型

Regularization

1、以下是兩種常用的歸一化方法:
1、min-max標準化(Min-Max Normalization)
也稱爲離差標準化,是對原始數據的線性變換,使結果值映射到[0 - 1]之間。轉換函數如下:

χ=Xminmaxmin

其中max爲樣本數據的最大值,min爲樣本數據的最小值。這種方法有個缺陷就是當有新數據加入時,可能導致max和min的變化,需要重新定義。
2、Z-score標準化方法
這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。經過處理的數據符合標準正態分佈,即均值爲0,標準差爲1,轉化函數爲:
χ=Xμσ

其中μ 爲所有樣本數據的均值,σ 爲所有樣本數據的標準差。

2、歸一化的作用
1. 去掉量綱和數值跨越幅度太大的影響;
2. 控制模型的複雜度,光滑性。複雜性越小且越光滑的目標函數泛化能力越強。而加入規則項能使目標函數複雜度減小,且更光滑。如梯度下降法;
3. 係數越小,模型越簡單,而模型越簡單則泛化能力越強(Ng宏觀上給出的解釋);
4. 可以看成是權值的高斯先驗。

異常檢測

異常檢測算法思路如下:
1. 選定容易出錯的n個特徵{x(i)1,x(i)2,…,x(i)n}作爲變量;
2. 計算m個樣本的平均值和方差:

μj=1mi=1mx(x)jσ2j=1mi=1m(x(x)jμj)2

3. 給定監測點x,計算p(x):
P(x)=j=1np(xj;μj;σj2)=j=1n12πσjexp((xjμj)22σ2j)

4. 如果 p(x) < ϵ,則爲異常值;反之亦成立。

其中的 ε 也是通過交叉驗證得到的,也就是說在進行異常檢測時,前面的 p(x) 的學習是用的無監督,後面的參數 ε 學習是用的有監督。那麼爲什麼不全部使用普通有監督的方法來學習呢(即把它看做是一個普通的二分類問題)?主要是因爲在異常檢測中,異常的樣本數量非常少而正常樣本數量非常多,因此不足以學習到好的異常行爲模型的參數,因爲後面新來的異常樣本可能完全是與訓練樣本中的模式不同。另外,上面是將特徵的每一維看成是相互獨立的高斯分佈,其實這樣的近似並不是最好的,但是它的計算量較小,因此也常被使用。更好的方法應該是將特徵擬合成多維高斯分佈,這時有特徵之間的相關性,但隨之計算量會變複雜,且樣本的協方差矩陣還可能出現不可逆的情況(主要在樣本數比特徵數小,或者樣本特徵維數之間有線性關係時)。

常見對分佈的處理
* 對於高斯分佈的數據,直接運用以上算法就好;
* 但是對於非高斯分佈的數據,雖然也可是使用上面的算法,但是效果不是很好,所以我們儘量將非高斯分佈轉化成(近似)高斯分佈,然後再進行處理;
* 數據整體偏小,可以求ln(x)或者xa,0

Apriori & FP Growth

Apriori是關聯分析中比較早的一種方法,主要用來挖掘那些頻繁項集合。其核心思想是:
1. 如果一個項目集合不是頻繁集合,那麼任何包含它的項目集合也一定不是頻繁集合;
2. 如果一個項目集合是頻繁集合,那麼它的任何非空子集也是頻繁集合。

這兩句話看起來很簡單,不過要體會到其中的深層次的含義可以去看看當時提出該算法的paper。

Aprioir需要掃描項目表多遍,從一個項目開始掃描,捨去掉那些不是頻繁的項目,得到的集合稱爲L,然後對L中的每個元素進行自組合,生成比上次掃描多一個項目的集合,該集合稱爲C,接着又掃描去掉那些非頻繁的項目,重複… 這樣掃描其時間複雜度和數據庫的I/O開銷會很大。

具體的做法參考:《machine learning in action》這本書。

FP Growth是一種比Apriori更高效的頻繁項挖掘方法,它只需要掃描項目表2次。其中第1次掃描獲得當個項目的頻率,去掉不符合支持度要求的項,並對剩下的項排序。第2遍掃描是建立一顆FP-Tree(frequent-patten tree)。這篇文章的講解還是不錯的:頻繁項集挖掘算法之FPGrowth

參考

博文:
整理本文的起點來源於該博文:機器學習&數據挖掘筆記_16(常見面試之機器學習算法思想簡單梳理)

支持向量機通俗導論(理解SVM的三層境界)

四大機器學習降維算法:PCA、LDA、LLE、Laplacian Eigenmaps

通俗理解LDA主題模型

該文檔由Microsoft爲使用自家的Azure雲平臺而寫,但內容都是通用的。How to choose algorithms for Microsoft Azure Machine Learning

異常檢測部分:機器學習——異常檢測

頻繁項集挖掘算法之FPGrowth

書籍部分:
《machine learning in action》–> 中文版《機器學習實戰》
周志華《機器學習》
《PRML》

視頻:
Ng老師的《machine learning》視頻
林軒田老師的《機器學習技法》視頻
七月在線馮老師的視頻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章