機器學習必學10大算法

本文介紹了 10 大經常使用機器學習算法,包括線性迴歸、Logistic 迴歸、線性判別分析、樸素貝葉斯、KNN、隨機森林等。

 

1. 線性迴歸算法

在統計學和機器學習領域,線性迴歸多是最廣爲人知也最易理解的算法之一。數據結構

預測建模主要關注的是在犧牲可解釋性的狀況下,儘量最小化模型偏差或作出最準確的預測。咱們將借鑑、重用來自許多其它領域的算法(包括統計學)來實現這些目標。機器學習

線性迴歸模型被表示爲一個方程式,它爲輸入變量找到特定的權重(即係數 B),進而描述一條最佳擬合了輸入變量(x)和輸出變量(y)之間關係的直線。函數

線性迴歸性能

例如: y = B0 + B1 * x學習

咱們將在給定輸入值 x 的條件下預測 y,線性迴歸學習算法的目的是找到係數 B0 和 B1 的值。優化

咱們可使用不一樣的技術來從數據中學習線性迴歸模型,例如普通最小二乘法的線性代數解和梯度降低優化。設計

線性迴歸大約有 200 多年的歷史,並已被普遍地研究。在使用此類技術時,有一些很好的經驗規則:咱們能夠刪除很是相似(相關)的變量,並儘量移除數據中的噪聲。線性迴歸是一種運算速度很快的簡單技術,也是一種適合初學者嘗試的經典算法。內存

2. Logistic 迴歸開發

Logistic 迴歸是機器學習從統計學領域借鑑過來的另外一種技術。它是二分類問題的首選方法。

像線性迴歸同樣,Logistic 迴歸的目的也是找到每一個輸入變量的權重係數值。但不一樣的是,Logistic 迴歸的輸出預測結果是經過一個叫做「logistic 函數」的非線性函數變換而來的。

logistic 函數的形狀看起來像一個大的「S」,它會把任何值轉換至 0-1 的區間內。這十分有用,由於咱們能夠把一個規則應用於 logistic 函數的輸出,從而獲得 0-1 區間內的捕捉值(例如,將閾值設置爲 0.5,則若是函數值小於 0.5,則輸出值爲 1),並預測類別的值。

Logistic 迴歸

因爲模型的學習方式,Logistic 迴歸的預測結果也能夠用做給定數據實例屬於類 0 或類 1 的機率。這對於須要爲預測結果提供更多理論依據的問題很是有用。

與線性迴歸相似,當刪除與輸出變量無關以及彼此之間很是類似(相關)的屬性後,Logistic 迴歸的效果更好。該模型學習速度快,對二分類問題十分有效。

3. 線性判別分析

Logistic 迴歸是一種傳統的分類算法,它的使用場景僅限於二分類問題。若是你有兩個以上的類,那麼線性判別分析算法(LDA)是首選的線性分類技術。

LDA 的表示方法很是直接。它包含爲每一個類計算的數據統計屬性。對於單個輸入變量而言,這些屬性包括:

  • 每一個類的均值。
  • 全部類的方差。

線性判別分析

預測結果是經過計算每一個類的判別值、並將類別預測爲判別值最大的類而得出的。該技術假設數據符合高斯分佈(鐘形曲線),所以最好預先從數據中刪除異常值。LDA 是一種簡單而有效的分類預測建模方法。

4. 分類和迴歸樹

決策樹是一類重要的機器學習預測建模算法。

決策樹能夠被表示爲一棵二叉樹。這種二叉樹與算法設計和數據結構中的二叉樹是同樣的,沒有什麼特別。每一個節點都表明一個輸入變量(x)和一個基於該變量的分叉點(假設該變量是數值型的)。

決策樹

決策樹的葉子結點包含一個用於作出預測的輸出變量(y)。預測結果是經過在樹的各個分叉路徑上游走,直到到達一個葉子結點並輸出該葉子結點的類別值而得出。

決策樹的學習速度很快,作出預測的速度也很快。它們在大量問題中每每都很準確,並且不須要爲數據作任何特殊的預處理準備。

5. 樸素貝葉斯

樸素貝葉斯是一種簡單而強大的預測建模算法。

該模型由兩類可直接從訓練數據中計算出來的機率組成:1)數據屬於每一類的機率;2)給定每一個 x 值,數據從屬於每一個類的條件機率。一旦這兩個機率被計算出來,就可使用貝葉斯定理,用機率模型對新數據進行預測。當你的數據是實值的時候,一般假設數據符合高斯分佈(鐘形曲線),這樣你就能夠很容易地估計這些機率。

貝葉斯定理

樸素貝葉斯之因此被稱爲「樸素」,是由於它假設每一個輸入變量相互之間是獨立的。這是一種很強的、對於真實數據並不現實的假設。不過,該算法在大量的複雜問題中十分有效。

6. K 最近鄰算法

K 最近鄰(KNN)算法是很是簡單而有效的。KNN 的模型表示就是整個訓練數據集。這很簡單吧?

對新數據點的預測結果是經過在整個訓練集上搜索與該數據點最類似的 K 個實例(近鄰)而且總結這 K 個實例的輸出變量而得出的。對於迴歸問題來講,預測結果可能就是輸出變量的均值;而對於分類問題來講,預測結果多是衆數(或最多見的)的類的值。

關鍵之處在於如何斷定數據實例之間的類似程度。若是你的數據特徵尺度相同(例如,都以英寸爲單位),那麼最簡單的度量技術就是使用歐幾里得距離,你能夠根據輸入變量之間的差別直接計算出該值。

K 最近鄰

KNN 可能須要大量的內存或空間來存儲全部數據,但只有在須要預測時才實時執行計算(或學習)。隨着時間的推移,你還能夠更新並管理訓練實例,以保證預測的準確率。

使用距離或接近程度的度量方法可能會在維度很是高的狀況下(有許多輸入變量)崩潰,這可能會對算法在你的問題上的性能產生負面影響。這就是所謂的維數災難。這告訴咱們,應該僅僅使用那些與預測輸出變量最相關的輸入變量。

7. 學習向量量化

KNN 算法的一個缺點是,你須要處理整個訓練數據集。而學習向量量化算法(LVQ)容許選擇所需訓練實例數量,並確切地學習這些實例。

學習向量量化

LVQ 的表示是一組碼本向量。它們在開始時是隨機選擇的,通過多輪學習算法的迭代後,最終對訓練數據集進行最好的總結。經過學習,碼本向量可被用來像 K 最近鄰那樣執行預測。經過計算每一個碼本向量與新數據實例之間的距離,能夠找到最類似的鄰居(最匹配的碼本向量)。而後返回最匹配單元的類別值(分類)或實值(迴歸)做爲預測結果。若是將數據從新放縮放到相同的範圍中(例如 0 到 1 之間),就能夠得到最佳的預測結果。

若是你發現 KNN 可以在你的數據集上獲得不錯的預測結果,那麼不妨試一試 LVQ 技術,它能夠減小對內存空間的需求,不須要像 KNN 那樣存儲整個訓練數據集。

8. 支持向量機

支持向量機(SVM)多是目前最流行、被討論地最多的機器學習算法之一。

超平面是一條對輸入變量空間進行劃分的「直線」。支持向量機會選出一個將輸入變量空間中的點按類(類 0 或類 1)進行最佳分割的超平面。在二維空間中,你能夠把他想象成一條直線,假設全部輸入點均可以被這條直線徹底地劃分開來。SVM 學習算法旨在尋找最終經過超平面獲得最佳類別分割的係數。

支持向量機

超平面與最近數據點之間的距離叫做間隔(margin)。可以將兩個類分開的最佳超平面是具備最大間隔的直線。只有這些點與超平面的定義和分類器的構建有關,這些點叫做支持向量,它們支持或定義超平面。在實際應用中,人們採用一種優化算法來尋找使間隔最大化的係數值。

支持向量機多是目前能夠直接使用的最強大的分類器之一,值得你在本身的數據集上試一試。

9. 袋裝法和隨機森林

隨機森林是最流行也最強大的機器學習算法之一,它是一種集成機器學習算法。

自助法是一種從數據樣本中估計某個量(例如平均值)的強大統計學方法。你須要在數據中取出大量的樣本,計算均值,而後對每次取樣計算出的均值再取平均,從而獲得對全部數據的真實均值更好的估計。

Bagging 使用了相同的方法。可是最多見的作法是使用決策樹,而不是對整個統計模型進行估計。Bagging 會在訓練數據中取多個樣本,而後爲每一個數據樣本構建模型。當你須要對新數據進行預測時,每一個模型都會產生一個預測結果,Bagging 會對全部模型的預測結果取平均,以便更好地估計真實的輸出值。

隨機森林

隨機森林是這種方法的改進,它會建立決策樹,這樣就不用選擇最優分割點,而是經過引入隨機性來進行次優分割。

所以,爲每一個數據樣本建立的模型比在其它狀況下建立的模型更加獨特,可是這種獨特的方式仍能保證較高的準確率。結合它們的預測結果能夠更好地估計真實的輸出值。

若是你使用具備高方差的算法(例如決策樹)得到了良好的結果,那麼你一般能夠經過對該算法執行 Bagging 得到更好的結果。

10. Boosting 和 AdaBoost

Boosting 是一種試圖利用大量弱分類器建立一個強分類器的集成技術。要實現 Boosting 方法,首先你須要利用訓練數據構建一個模型,而後建立第二個模型(它企圖修正第一個模型的偏差)。直到最後模型可以對訓練集進行完美地預測或加入的模型數量已達上限,咱們才中止加入新的模型。

AdaBoost 是第一個爲二分類問題開發的真正成功的 Boosting 算法。它是人們入門理解 Boosting 的最佳起點。當下的 Boosting 方法創建在 AdaBoost 基礎之上,最著名的就是隨機梯度提高機。

AdaBoost

AdaBoost 使用淺層決策樹。在建立第一棵樹以後,使用該樹在每一個訓練實例上的性能來衡量下一棵樹應該對每一個訓練實例賦予多少權重。難以預測的訓練數據權重會增大,而易於預測的實例權重會減少。模型是一個接一個依次建立的,每一個模型都會更新訓練實例權重,影響序列中下一棵樹的學習。在構建全部的樹以後,咱們就能夠對新的數據執行預測,並根據每棵樹在訓練數據上的準確率來對其性能進行加權。

因爲算法在糾正錯誤上投入瞭如此多的精力,所以刪除數據中的異常值在數據清洗過程當中是很是重要的。

相關文章
相關標籤/搜索