1. 程式人生 > >機器學習之基本演算法總結

機器學習之基本演算法總結

機器學習方法越來越得到關注與學習,很多人在研讀機器學習相關文章和演算法時,對一些概念不慎明確,容易走進坑裡花費太多的時間才弄明白,有作者將一些並不是很簡單的基礎知識演算法做了一定的總結。本文在原博文的基礎上根據自己的閱讀和理解,做了一些補充,對概念和演算法的總結如下。

1.基礎概念:

以下這些基礎概念基本上是在所有的機器學習演算法中都會遇到。這些概念的背後是一系列資料處理的思想,它們包含了資料的降維去噪,驗證處理,分佈監測等等

(1) 10折交叉驗證:英文名是10-fold cross-validation,用來測試演算法的準確性。是常用的測試方法。將資料集分成10份。輪流將其中的9份作為訓練資料,1分作為測試資料,進行試驗。每次試驗都會得出相應的正確率(或差錯率)。10次的結果的正確率(或差錯率)的平均值作為對演算法精度的估計,一般還需要進行多次10折交叉驗證,在求其平均值,對演算法的準確性進行估計。

(2) 極大似然估計:極大似然估計,只是一種概率論在統計學中的應用,它是引數評估的方法之一。如果已知某個隨機樣本滿足某種概率分佈,但是其中具體的引數不清楚,引數估計通過若干次實驗,觀察其結果,利用結果推出引數的大概值。極大似然估計是建立在這樣的思想上的:已知某個引數能使這個樣本出現的概率最大。我們當然不會再去選擇其他其他小概率的樣本,所以乾脆就把這個引數作為估計的真實值。

(3) 熵:在資訊理論中,熵表示的是不確定性的量度。資訊理論的創始人夏農在其著作《通訊的數學理論》中提出了建立在概率統計模型上的資訊度量。他把資訊定義為”用來消除不確定性的東西“。熵的定義為資訊的期望值,具體到機器學校裡可以表示資料的離散程度。

ps:熵指的是體系的混亂程度,它在控制論,概率論,數論,天體物理,生命科學等領域都有重要的應用,在不同的學科中也有引申出更為具體的定義,是各個領域十分重要的參量。熵由魯道夫.克勞修斯提出,並應用在熱力學中。後來在,克勞德.埃爾伍德.夏農 第一次將熵的概念引入到資訊理論中來。

(4) 後驗概率:資訊理論的基本概念之一,指的是在一個通訊系統中,在收到某個訊息之後,接收端所瞭解到的該訊息傳送的概率稱為後驗證概率。後驗概率是指在得到”結果“的資訊後重新修正的概率,如貝葉斯公式中的,是執果尋因的問題。後驗概率和先驗概率有著不可分割的聯絡,後驗的計算要以先驗概率為基礎,其實說白了後驗概率其實就是條件概率。

(5) PCA 主成分分析:
優點:降低資料的複雜性,識別最重要的多個特徵。
缺點:不一定需要,且可能損失有用資訊。
適用適用型別:數值型資料。
技術型別:降維技術。

簡述:在PCA中,資料從原來的座標系轉換到了新的座標系,新座標系的選擇是由資料本身決定的。第一個新座標軸選擇時原始資料中方差最大的方向,第二個新座標軸的選擇和第一個座標軸正交且具有最大方差的方向。該過程一直重複,重複次數為原始資料中特徵的數目。會發現大部分方差都包含在最前面的幾個新座標軸中。因此,可以忽略餘下的座標軸,即對資料進行了降維處理。除了PCA主成分分析技術,其他降維技術還有ICA(獨立成分分析),因子分析等。

(6) 將不同的分類器組合起來,而這種組合結果則被稱為整合方法(ensemble method)或者元演算法(meta-algorithm)。

(7) 迴歸演算法和分類演算法很像,不過迴歸演算法和分類演算法輸出標稱型類別值不同的是,迴歸方法會預測出一個連續的值,即迴歸會預測出具體的資料,而分類只能預測類別,具體就是擬合的最終資料形式不同,一個連續,一個離散。

(8) SVD(singular value decomposition) 奇異值分解:
優點:簡化資料,去除噪聲,提高演算法的結果。
缺點:資料轉換可能難以理解。
適用資料型別:數值型資料。
ps:SVD是矩陣分解的一種型別。

總結:SVD是一種強大的降維工具,我們可以利用SVD來逼近矩陣並從中提取重要特徵。通過保留矩陣80%~90%的能量,就可以得到重要的特徵並去掉噪聲。SVD已經運用到多個應用中,其中一個成功的應用案例就是推薦引擎。推薦引擎將物品推薦給使用者,協同過濾則是一種基於使用者喜好和行為資料的推薦和實現方法。協同過濾的核心是相似度計算方法,有很多相似度計算方法都可以用於計算物品或使用者之間的相似度。通過在低維空間下計算相似度,SVD提高了推薦引擎的效果。

(9)共線性:是指線性迴歸模型中的解釋變數之間由於存在精確的相關關係或高度相關關係而使模型估計失真或難以估計。

2.基本演算法

以下這些演算法都是機器學習中一些基本的處理演算法,都是核心處理思想簡單,但是解決某些問題非常有效。

2.1 Logistic迴歸:

優點:計算代價不高,易於理解和實現。
缺點:容易欠擬合,分類精度可能不高。
適用資料型別:數值型和標稱型資料。
類別:分類演算法。
試用場景:解決二分類問題。

簡述:Logistic迴歸演算法基於Sigmoid函式,或者說Sigmoid就是邏輯迴歸函式。Sigmoid函式定義如下:1/(1+exp(-z))。函式值域範圍(0,1)。可以用來做分類器。
Sigmoid函式的函式曲線如下:


邏輯迴歸模型分解如下: 

(1)首先將不同維度的屬性值和對應的一組權重加和,公式如下:

 z = w0+w1*x1+w2*x2+…+wm*xm(其中x1,x2,…,xm是某樣本資料的各個特徵,維度為m)
ps:z在這裡就是一個線性迴歸。W權重值就是需要經過訓練學習到的數值,具體W向量的求解,就需要用到極大似然估計和將似然估計函式代入到 優化演算法來求解。最常用的最後化演算法有 梯度上升演算法。
由上面可見:邏輯迴歸函式雖然是一個非線性的函式,但其實其去除Sigmoid對映函式之後,其他步驟都和線性迴歸一致。

(2)然後將上述的線性目標函式 z 代入到sigmond邏輯迴歸函式,可以得到值域為(0,0.5)和(0.5,1)兩類值,等於0.5的怎麼處理還以自己定。這樣其實就得到了2類資料,也就體現了二分類的概念。

總結:Logistic迴歸的目的是尋找一個非線性函式Sigmoid的最佳擬合引數,它的本質是求解概率,根據概率的分佈就可以將結果劃分為二分類問題,其中最關鍵的是W的求解,引數的求解過程可以由最優化演算法來完成。在最優化演算法中,最常用的就是梯度上升演算法,而梯度上升演算法有可以簡化為隨機梯度上升演算法。隨機梯度下降演算法具體的方法後續會做詳細分析。

博文《邏輯迴歸》中給出了非常漂亮的公式推導過程以及梯度求導額邏輯迴歸的問題分析

2.2 SVM(Support Vector Machines) 支援向量機

優點:泛化錯誤率低,計算開銷不大,結果易解釋。
缺點:對引數調節和核函式的選擇敏感,原始分類器不加修改僅適用於處理二分類問題。
適用資料型別:數值型和標稱型資料。
類別:分類演算法。
試用場景:解決二分類問題。

簡述:通俗的講,SVM是一種二類分類模型,其基本模型定義為特徵空間上的間隔最大的線性分類器,即支援向量機的學習策略便是間隔最大化,最終可轉化為一個凸二次規劃問題的求解。或者簡單的可以理解為就是在高維空間中尋找一個合理的超平面將資料點分隔開來,其中涉及到非線性資料到高維的對映以達到資料線性可分的目的。

支援向量概念:

5a9c4a22f556c803716815def7fff078

上面樣本圖是一個特殊的二維情況,真實情況當然可能是很多維。先從低緯度簡單理解一下什麼是支援向量。從圖中可以看到3條線,中間那條紅色的線到其他兩條先的距離相等。這條紅色的就是SVM在二維情況下要尋找的超平面,用於二分類資料。而支撐另外兩條線上的點就是所謂的支援向量。從圖中可以看到,中間的超平面和另外兩條線中間是沒有樣本的。找到這個超平面後,利用超平面的資料數學表示來對樣本資料進行二分類,就是SVM的機制了。

ps: 《機器學習實戰》書中有這麼幾個概念:

(1)如果能找到一個直線(或多維的面)將樣本點分開,那麼這組資料就是線性可分的。將上述資料集分隔開來的直線(或多維的面)稱為分隔超平面。分佈在超平面一側的資料屬於一個類別,分佈在超平面另一側的資料屬於另一個類別
(2)支援向量(Support vector)就是分離超平面最近的那些點。
(3)幾乎所有分類問題都可以使用SVM,值得一提的是,SVM本身是一個二分類分類器,對多類問題應用SVM需要對程式碼做一些修改。

公式:
SVM有很多實現,但是本章值關注其中最流行的一種實現,及序列最小優化(Sequential Minimal Optimization,SMO)演算法。
其公式如下:

f0591dcad561e38e06d6fd691a28fe25

SMO演算法的目標是求出一些列的alpha,一旦求出了alpha,就很容易計算出權重向量w並得到分隔超平面。

SMO演算法的工作原理是:每次迴圈中選擇兩個alpha進行優化處理。一旦找到一對合適的alpha,那麼就增大其中一個同時減小另一個。這裡所謂的“合適”就是指兩個alpha必須符合一定的條件,條件之一就是這兩個alpha必須要在間隔邊界之外,而其第二個條件則是這兩個alpha還沒有進行過區間化處理或者不在邊界上。

核函式將資料從低維度對映到高維:
SVM是通過尋找超平面將資料進行分類的,但是當資料不是線性可分的時候就需要利用核函式將資料從低維對映到高維使其線性可分後,在應用SVM理論。

93c1d8bf3bf14c8072c04cb4e1b13827

示例:

這個二維資料分佈不是線性可分的,其方程為:

20130820145508875

但是通過核函式維度對映後,其變為:

對應的方程為:

20130820145544562

這樣對映後的資料就變成了線性可分的,就可以應用SVM理論了。

總結:支援向量機是一種分類器。之所以成為“機”是因為他會產生一個二值決策結果,即它是一種‘決策’機。核方法或者說核技巧會將資料(有時是非線性資料)從一個低維空間對映到一個高維空間,可以將一個在低維空間中的非線性問題轉換為高維空間下的線性問題來求解。

SVM演算法是及其經典的一種演算法,此演算法有很多種變形,被研究者津津樂道,其中研究者July的博文《 機器學習之支援向量機通俗導論(理解SVM的三層境界)》是非常經典且詳細的一篇博文,深入淺出的逐一理解分析支援向量機。源文連結如下:http://www.cnblogs.com/v-July-v/archive/2012/06/01/2539022.html

2.3 決策樹
決策樹歸納是經典的分類演算法。它採用自頂向下遞迴的方式構造決策樹。樹的每一個結點上使用一種規則將資料特徵分為左右兩部分,分成的兩部分各自再繼續進行劃分,直到滿足一定條件,停止劃分,葉子節點儲存資料的標籤或者數值,節點上儲存分裂函式或者特徵閾值。決策樹主要有ID3,ID45和CART三種,前兩者使用資訊理論中的資訊增益率(資訊理論中的概念,衡量是否是有益劃分的量)選擇測試屬性,CART主要用於迴歸樹,使用的是某一種測試誤差作為分別規則,樹迴歸將資料集切分成多份易建模的資料,然後利用線性迴歸進行建模和擬合。

優點:計算複雜度不高,輸出結果易於理解,對中間值的缺失不敏感,可以處理不相關特徵資料。
缺點:可能會產生匹配過度問題。
適用資料型別:數值型和標稱型。
資料要求:樹的構造只適用於標稱型的資料,因此數值型資料必須離散化。

簡述:在構造決策樹時,我們需要解決的第一個問題就是,當前資料集上哪個特徵在劃分資料分類時起決定性作用。以ID3決策樹為例,為了找到決定性特徵,劃分出最好的結果,我們必須評估每個特徵。完成測試後,原始資料就被劃分為幾個資料子集。這些資料的子集分佈在第一個決策點的所有分支上,如果某個分支下的資料屬於同一個型別,則無需進一步對資料集進行切割。反之則需要進一步切割。

在可以評測哪種資料劃分方式是最好的資料劃分之前,我們必須學習如何計算資訊增益。集合的資訊度量方式稱為夏農熵或者簡稱為熵。熵在資訊理論中定義為資訊的期望值。

資訊熵的計算公式為:
H(資訊熵) = -∑ P(xi) log2P(xi) ps:其中p(xi)表示選擇該分類的概率。

下面簡述一下生成決策樹的步驟:
(1) 根據給定的訓練資料,根據熵最大原則根據每一個維度來劃分資料集,找到最關鍵的維度。
(2) 當某個分支下所有的資料都資料同一分類則終止劃分並返回類標籤,否則在此分支上重複實施(1)過程。
(3) 依次計算就將類標籤構建成了一棵抉擇樹。
(4) 依靠訓練資料構造了決策樹之後,我們就可以將它用於實際資料的分類。

決策樹中一個比較嚴重的問題是過擬合,所以經常需要對決策樹進行剪枝。其實就是節點的合併,即將不必要的葉子節點和分裂節點進行合併,減少不必要的計算和複雜度。

總結決策樹分類器就像帶有終止塊的流程圖,終止塊表示分類結果。開始處理資料集時,我們首先需要測量集合中資料的不一致性,也就是熵,然後尋找最優的方案劃分資料集,直到資料集中的所有資料屬於同一個分類。

決策樹單獨使用的情況比較少,稍微大一些的資料處理中基本用的都是森林,即將很多棵樹組成到一起進行決策,森林中最著名的演算法就是隨機森林。關於隨進森林一篇比價好的文章是

2.4 樸素貝葉斯
優點:在資料較少的情況下仍然有效,可以處理多類別問題。
缺點:對於輸入資料的準備方式較為敏感。
適用的資料型別:標稱型資料。
演算法型別:分類演算法

簡述:樸素貝葉斯是貝葉斯理論的一部分,貝葉斯決策理論的核心思想,即選擇具有高概率的決策。樸素貝葉斯之所以冠以樸素開頭,是因為其在貝葉斯理論的基礎上做出了兩點假設:
(1)每個特徵之間相互獨立。
(2)每個特徵同等重要。
貝葉斯準則是構建在條件概率的基礎之上的,其公式如下:

P(H|X)=P(X|H)P(H)/P(X)

ps:P(H|X)是根據X引數值判斷其屬於類別H的概率,稱為後驗概率。P(H)是直接判斷某個樣本屬於H的概率,稱為先驗概率。P(X|H)是在類別H中觀測到X的概率(後驗概率),P(X)是在資料庫中觀測到X的概率。可見貝葉斯準則是基於條件概率並且和觀測到樣本的先驗概率和後驗概率是分不開的。

總結:對於分類而言,使用概率有事要比使用硬規則更為有效。貝葉斯概率及貝葉斯準則提供了一種利用已知值來估計未知概率的有效方法。可以通過特徵之間的條件獨立性假設,降低對資料量的需求。儘管條件獨立性的假設並不正確,但是樸素貝葉斯仍然是一種有效的分類器。

2.5 K-近鄰演算法(KNN)
優點:精度高、對異常值不敏感、無資料輸入假定。
缺點:計算複雜度高,空間複雜度搞。
適用資料範圍:數值型和標稱型。
演算法型別:分類演算法。

簡述:演算法原理,存在一個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一個數據與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵和樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。一般來說,我們只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數。最後選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。

2.6 線性迴歸(Linear Regression)
優點:結果易於理解,計算上不復雜。
缺點:對非線性資料擬合不好。
適用資料型別:數值型和標稱型資料。
演算法型別:迴歸演算法。
ps:迴歸於分類的不同,就在於其目標變數時連續數值型。

簡述:在統計學中,線性迴歸(Linear Regression)是利用稱為線性迴歸方程的最小平方函式對一個或多個自變數和因變數之間關係進行建模的一種迴歸分析。這種函式是一個或多個稱為迴歸係數的模型引數的線性組合(自變數都是一次方)。只有一個自變數的情況稱為簡單迴歸,大於一個自變數情況的叫做多元迴歸。

線性方程的模型函式的向量表示形式為:

b56cacd2f3f00b7588d2c1c20f45dfc1

通過訓練資料集尋找向量係數的最優解,即為求解模型引數。其中求解模型係數的優化器方法可以用“最小二乘法”、“梯度下降”演算法,來求解損失函式:

b01388e05ff4e2c5cfb0b974c7ad9b0b的最優值。

附加:嶺迴歸(ridge regression):
嶺迴歸是一種專用於共線性資料分析的有偏估計迴歸方法,實質上是一種改良的最小二乘估計法,通過放棄最小二乘法的無偏性,以損失部分資訊、降低精度為代價,獲得迴歸係數更為符合實際、更可靠的迴歸方法,對病態資料的耐受性遠遠強於最小二乘法。

嶺迴歸分析法是從根本上消除復共線性影響的統計方法。嶺迴歸模型通過在相關矩陣中引入一個很小的嶺引數K(1>K>0),並將它加到主對角線元素上,從而降低引數的最小二乘估計中復共線特徵向量的影響,減小復共線變數係數最小二乘估計的方法,以保證引數估計更接近真實情況。嶺迴歸分析將所有的變數引入模型中,比逐步迴歸分析提供更多的資訊。

總結:與分類一樣,迴歸也是預測目標值的過程。迴歸與分類的不同點在於,前者預測連續型的變數,而後者預測離散型的變數。迴歸是統計學中最有力的工具之一。在迴歸方程裡,求得特徵對應的最佳迴歸系統的方法是最小化誤差的平方和。

2.7 K-Means(K 均值演算法)
優點:容易實現。
缺點:可能收斂到區域性最小值,在大規模資料集上收斂較慢。
適用資料型別:數值型資料。
演算法型別:聚類演算法。
ps:K-Means和上面的分類和迴歸演算法不同,它屬於非監督學習演算法。類似分類和迴歸中的目標變數事先並不存在。與前面“對於資料變數X能預測變數Y”不同的是,非監督學習演算法要回答的問題是:“從資料X中能發現什麼?“,這裡需要回答的X方面可能的問題是:”構成X的最佳6個數據簇都是哪些“或者”X中哪三個特徵最頻繁共現?“。

K-Means的基本步驟:
(1) 從資料物件中隨機的初始化K個初始點作為質心。然後將資料集中的每個點分配到一個簇中,具體來講每個點找到距其最近的質心,並將其分配給該質心所對應的簇。
(2) 計算每個簇中樣本點的均值,然後用均值更新掉該簇的質心。然後劃分簇結點。
(3) 迭代重複(2)過程,當簇物件不再發生變化時,或者誤差在評測函式預估的範圍時,停止迭代。
演算法的時間複雜度上界為O(nkt), 其中t是迭代次數。
ps:初始的K個質心的選取以及距離計算公式的好壞,將影響到演算法的整體效能。
附加:
二分K-均值演算法:為克服K-均值演算法收斂於區域性最小值的問題,有人提出了另一個稱為二分K-均值(bisecting K-Means)的演算法。該演算法首先將所有點作為一個簇,然後將簇一分為二。之後選擇其中一個簇繼續劃分,選擇哪個一簇進行劃分取決於對其劃分是否可以最大程度降低SSE(Sum of Squared Error,兩個簇的總誤差平方和)的值。

2.8 演算法關聯分析
首先了解兩個概念:
頻繁項集(frequent item sets):經常出現在一塊的物品的集合。
關聯規則(association rules):暗示兩種物品間可能存在很強的關係。
項集的支援度(support):資料集中包含該項集記錄所佔的比例。
關聯分析的目標包括兩項:發現頻繁項集合發現關聯規則。首先找到頻繁項集,然後才能獲得關聯規則。

Apriori演算法:
優點:易編碼實現。
缺點:在大型資料集上可能較慢。
適用資料型別:數值型或標稱型資料。
原理:如果某個項集時頻繁的,那麼他的所有子集也是頻繁的。
Apriori運用的DEMO示例參見部落格:http://blog.csdn.net/lantian0802/article/details/38331463
簡述:
Apriori演算法是發現頻繁項集的一種方法。Apriori演算法的兩個輸入引數分別是最小支援度和資料集。該演算法首先會生成所有單個item的項集列表。然後掃描列表計算每個item的項集支援度,將低於最小支援度的item排除掉,然後將每個item兩兩組合,然後重新計算整合後的item列表的支援度並且和最小支援度比較。重複這一過程,直至所有項集都被去掉。

總結:關聯分析是用於發現大資料集中元素間有趣關係的一個工具集,可以採用兩種方式來量化這些有趣的關係。發現元素間不同的組合是個十分耗時的任務,不可避免需要大量昂貴的計算資源,這就需要一些更智慧的方法在合理的時間範圍內找到頻繁項集。能夠實現這一目標的一個方法是Apriori演算法,它使用Apriori原理來減少在資料庫上進行檢查的集合的數目。Apriori原理是說如果一個元素是不頻繁的,那麼那些包含該元素的超集也是不頻繁的。Apriori演算法從單元素項集開始,通過組合滿足最小支援度要求的項集來形成更大的集合。支援度用來度量一個集合在原始資料中出現的頻率。

2.9 FP-growth演算法
簡述:FP-growth也是用於發現頻繁項集的演算法,他以FP樹的結構儲存構建元素,其他Apriori演算法的效能要好很多。通常效能要好2個數量級以上。其發現頻繁項集的過程如下:(1)構建FP樹。(2)從FP樹中挖掘頻繁項集。

優點:一般要快於Apriori。
缺點:實現比較困難,在某些資料集上效能會下降。
適用資料型別:標稱型資料。

總結:FP-growth演算法是一種用於發現數據集中頻繁模式的有效方法。FP-growth演算法利用Apriori原則,執行更快。Apriori演算法產生候選項集,然後掃描資料集來檢查他們是否頻繁。由於只對資料集掃描兩次,因此FP-growth演算法執行更快。在FP-growth演算法中,資料集儲存在一個稱為FP樹的結構中。FP樹構建完成後,可以通過查詢元素項的條件及FP樹來發現頻繁項集。該過程不斷以更多元素作為條件重複進行,直到FP樹只包含一個元素為止。

3.全文總結

綜上所述,簡單的分析了機器學習中的基本概念和基本演算法,具體到每個演算法,想要詳細瞭解還需要自己親自除錯程式,一步步實現。機器學習需要紮實的基礎,只有對基本的資料分析演算法有所瞭解,掌握其中的精妙之處,才能運用自如,如魚得水。

原文連結如下:

http://blog.csdn.net/jdbc/article/details/49491069#0-tsina-1-56080-397232819ff9a47a7b7e80a40613cfe1