1. 程式人生 > >新手入門機器學習十大演算法

新手入門機器學習十大演算法

在機器學習的世界中,有一種被稱為“無免費午餐”的定理。 它意在說明沒有哪種演算法能夠完美地解決每個問題,特別是對於監督學習問題。例如,神經網路不會總是比決策樹要好,反之亦然。往往是有許多因素在起作用(如:資料集的大小、結構),共同決定了最後的結果。因此,我們應該針對具體的問題嘗試許多不同的演算法,並選取一部分資料作為“測試集”來評估效能,最後選擇效能最好的演算法。當然,我們選取的演算法必須要適合我們的問題,這也是完成機器學習任務的關鍵所在。

然而,我們通過有監督機器學習進行建模必須遵守一個基本的原則:通過找到輸入變數X到輸出變數Y的對映關係:Y = f(X),最終學習得到一個目標函式f。這樣就可以針對新的輸入資料X通過目標函式f預測出新的輸出變數Y。在機器學習中,這稱為預測建模或預測分析。

一 、線性迴歸(Linear Regression)

線性迴歸可能是統計學和機器學習中最知名且最易於理解的演算法之一。線性迴歸是指在輸入變數(x)和輸出變數(y)之間找到一種最佳的擬合關係,往往這種關係是通過查詢被稱為係數(B)的輸入變數的特定權重來描述的。例如:y = B0 + B1 * x。即:我們將在給定輸入x的情況下預測y,並且線性迴歸學習演算法的目標是找到係數B0和B1的值。我們可以使用不同的方法從資料中學習線性迴歸模型,例如最小二乘法和梯度下降法。

 

線性迴歸已經存在了200多年,並且已經被廣泛研究。使用該方法時,我的一些經驗是刪除非常相似的變數,並儘可能消除資料中的噪聲。總而言之,線性迴歸是一種快速而簡單的演算法,非常適合大家作為入門的第一種演算法來嘗試。

二、邏輯迴歸(Logistic Regression)

邏輯迴歸是機器學習從統計學領域借鑑過來的另一種方法。它是二分類問題的首選方法(兩個類值的問題),也是學習二元分類問題並快速見面最有效的方法。邏輯迴歸就像線性迴歸一樣,目標是找到每個輸入變數對應的相關係數。與線性迴歸不同的是,它使用了一種稱為“邏輯函式”的非線性函式來轉換輸出的預測。

邏輯函式看起來像一個大S,並可以將任何值轉換為0到1的範圍。這點非常的重要,因為我們可以將邏輯函式的輸出控制到0和1來預測一個類值。此外,同線性迴歸一樣,我們可以通過刪除與輸出變數無關的屬性以及彼此非常相似的屬性,來使模型的效果更好。

 

三、線性判別分析(Linear Discriminant Analysis)

邏輯迴歸是一種僅限於兩分類問題的分類演算法。但如果我們有兩個以上的類別,那麼線性判別分析演算法是首選的線性分類演算法。LDA的表示是非常直接的:它由每個類計算的資料所統計的屬性組成。此外對於單個輸入變數,它包括:每個類別的平均值以及所有類別計算的方差。

LDA是通過計算每個類的判別值並對具有最大值的類進行的預測。該技術的前提是假設資料具有高斯分佈,因此我們需要事先從資料中刪除異常值。LDA也是分類預測建模問題的一種簡單而強大的演算法。

 

四、決策樹模型(Classification and Regression Trees)

決策樹是機器學習中預測建模一種重要的演算法。如下圖所示,決策樹模型的表示是二叉樹,和演算法和資料結構中的二叉樹一樣,每個節點表示一個輸入變數(x)和該變數上的一個分割點(假設變數是數字)。

樹的葉節點包含用於進行預測的輸出變數(y)。預測過程是通過遍歷樹的分裂直到到達葉節點並輸出該葉節點處的類值。決策樹學模型的優勢在於學習以及預測的速度都非常快。並且樹模型適用於各種各樣的問題,不需要對資料進行任何特殊的處理。

 

五、樸素貝葉斯( Naive Bayes)

Naive Bayes是一種簡單但非常強大的預測建模演算法。該模型由兩種型別的概率組成,可以直接根據我們的訓練資料進行計算:(1)每個類的概率;(2)每個類給定每個x值的條件概率。一旦計算出來,概率模型可利用貝葉斯定理對新資料進行預測。當我們的資料是實數時,通常會採用高斯分佈,這樣就可以輕鬆估計這些概率了。

樸素貝葉斯之所以被稱為“naive”,是因為它假設每個輸入變數是獨立的。現實這是一個強有力的假設,對於實際資料是不成立的,但該技術對於大範圍的複雜問題是非常有效。

 

六、K近鄰演算法(K-Nearest Neighbors)

KNN演算法非常的簡單、有效。KNN的模型表示是整個訓練資料集。KNN演算法的原理是通過搜尋整個訓練集來尋找K個最相似的例項,並總結這K個例項的輸出變數,進而對新的資料點進行預測。對於迴歸問題,可能是平均輸出變數;對於分類問題,可能是常見的類值。

KNN的訣竅在於如何確定資料例項之間的相似性。 如果我們的屬性都具有相同的比例,則最簡單的方法是使用歐幾里德距離,我們可以根據每個輸入變數之間的差異直接計算該數字。

此外,KNN可能需要大量的記憶體或空間來儲存所有資料,但只有在需要預測時才會執行計算的操作。所以,我們還可以隨著時間的推移更新和調整訓練例項,以保持預測效果更加準確。

 

七、學習向量量化(Learning Vector Quantization)

K近鄰的缺點是我們需要等候整個訓練資料集。而學習向量量化演算法(簡稱LVQ)是一種神經網路演算法,允許我們選擇要掛起的訓練例項數量,並可以準確地學習到這些例項。如果我們的資料集可以使用KNN的方法訓練出良好的結果,那麼就可以嘗試使用LVQ演算法來減少儲存整個訓練資料集的記憶體需求。

LVQ的表示是碼本(權值)向量的集合。這些碼本在開始時隨機選擇的,並且適合於在學習演算法的多次迭代中最佳地總結訓練資料集。在學習之後,可我們以使用碼本向量來進行與KNN類似的預測。通過計算每個碼本向量和新資料例項之間的距離來找到最相似的鄰居(即最佳匹配碼本向量)。然後,將最佳匹配單元的類值或迴歸值(實值)作為預測返回。如果將資料重新縮放至相同範圍(例如0到1之間),就可以獲得最好的結果。

八、支援向量機(Support Vector Machines)

支援向量機可能是目前最流行的機器學習演算法之一。SVM演算法的核心是選擇一個最佳的超平面將輸入變數空間中的點按照它們的類(0或1)分開。所謂的“超平面”其實就是一個分割輸入變數空間的線,在二維空間中,我們可以將其視覺化為一條直線,並且假設我們所有的輸入點都可以被這條直線完全分開。

此外,超平面和最近資料點之間的距離稱為邊距。可以分離兩個類的最佳或最優超平面是具有最大邊距的行。這些點與定義超平面和分類器的構造是有關,這些點稱為支援向量。它們可以支援或定義超平面。

最後,SVM可能是最強大的分類器之一,值得我們使用資料集嘗試使用。

 

九、隨機森林(Bagging and Random Forest)

隨機森林是最流行和最強大的機器學習演算法之一。它是一種被稱為“bagging”的整合機器學習演算法。Bagging是一種強大的統計方法,常用於估計從資料樣本的數量。如:我們取大量的資料樣本後計算平均值,然後再對所有平均值進行平均,以便更好地估計真實的平均值。

在bagging中,要對我們的訓練資料進行多次取樣,然後為每個資料樣本構建模型。當需要對新資料進行預測時,每個模型都進行預測,並對預測進行平均,以更好地估計真實輸出值。

隨機森林是對這種方法的一種調整,通過建立決策樹,使得不是選擇最佳分裂點,而是通過引入隨機性來進行次優分割。因此,為每個資料樣本構建的模型與它們原本是不同的,這樣結合它們的預測可以更好地估計真實的輸出結果。

 

十、Boosting and AdaBoost

Boosting是一種整合方法,試圖從多個弱分類器中建立強分類器。這一過程是通過從訓練資料種構建模型,然後建立第二個模型來完成的,該模型試圖糾正來自第一個模型的錯誤。以此類推,新增模型直到能完美預測訓練集或是新增最大數量的模型。

AdaBoost是第一個真正成功實現Boosting的演算法,是理解boosting方法的最佳起點。現在很多boosting方法都是建立在AdaBoost演算法之上,效果最好的當數是gradient boosting 。

此外,Adaboost通常會和短決策樹一起使用。在建立第一棵樹之後,使用樹在每個訓練例項上的效能來衡量建立的下一棵樹應該對每個訓練例項關注多少。往往難以預測的訓練資料會被賦予更多的權重,而容易預測的例項被賦予較少的權重。這樣,一個接一個地依次建立模型,每個模型更新訓練例項上的權重,這些權重影響序列中的下一棵樹所執行的學習。構建完所有樹之後,將對新資料進行預測,並根據訓練資料的準確性對每棵樹的效能進行加權。

【總結】本篇文章針對需要入門機器學習的玩家,為大家準備了十大最常用的機器學習演算法,希望大家喜歡。

 

對深度學習感興趣,熱愛Tensorflow的小夥伴,歡迎關注我們的網站!http://www.tensorflownews.com。我們的公眾號:磐創AI。