機器學習萌新必學的Top10演算法
原作 James Le
Root 編譯自 KDuggets量子位 報道 | 公眾號 QbitAI
在機器學習領域裡,不存在一種萬能的演算法可以完美解決所有問題,尤其是像預測建模的監督學習里。
比方說,神經網路不見得比決策樹好,同樣反過來也不成立。
最後的結果是有很多因素在起作用的,比方說數據集的大小以及組成。
所以,針對你要解決的問題,最好是嘗試多種不同的演算法。並借一個測試集來評估不同演算法之間的表現,最後選出一個結果最好的。
當然,你要選適合解決你問題的演算法來嘗試。
比方說,要打掃房子,你會用真空吸塵器,掃把,拖把;你絕對不會翻出一把鏟子來開始挖坑,對吧。
大的原則
不過呢,對於所有預測建模的監督學習演算法來說,還是有一些通用的底層原則的。
機器學習演算法,指的是要學習一個目標函數,能夠儘可能地還原輸入和輸出之間的關係。
然後根據新的輸入值X,來預測出輸出值Y。精準地預測結果是機器學習建模的任務。
So,Top10機器學習演算法,了解一下。
線性回歸?
統計學與機器學習領域裡研究最多的演算法。
做預測建模,最重要的是準確性(儘可能減小預測值和實際值的誤差)。哪怕犧牲可解釋性,也要儘可能提高準確性。
為了達到這個目的,我們會從不同領域(包括統計學)參考或照搬演算法。
線性回歸可用一條線表示輸入值X和輸出值Y之間的關係,這條線的斜率的值,也叫係數。
比方說,y = B0 + B1*x
我們就可以根據X值來預測Y值。機器學習的任務就是找出係數B0和B1。
從數據中建立線性回歸的模型有不同的方法,比方說線性代數的最小二乘法、梯度下降優化。
線性回歸已經存在了200多年,相關研究已經很多了。用這個演算法關鍵在於要儘可能地移除相似的變數以及清洗數據。
對演算法萌新來說,是最簡單的演算法了。
2?.邏輯回歸
這方法來自統計學領域,是一種可以用在二元分類問題上的方法。
邏輯回歸,和線性回歸相似,都是要找出輸入值的係數權重。不同的地方在於,對輸出值的預測改成了邏輯函數。
邏輯函數看起來像字母S,輸出值的範圍是0到1。
把邏輯函數的輸出值加一個處理規則,就能得到分類結果,非0即1。
比方說,可以規定輸入值小於0.5,那麼輸出值就是1。這個演算法還可以用來預測數據分布的概率,適用於需要更多數據論證支撐的預測。
和線性回歸相似,如果把和輸出不相干的因子或者相近的因子剔除掉的話,邏輯回歸演算法的表現會更好。
對於二元分類問題,邏輯回歸是個可快速上手又有效的演算法。
3.線性判別分析
邏輯回歸演算法,只能用於二分問題。
當輸出的結果類別超過兩類的時候,就要用線性判別分析演算法了。
這種演算法的可視化結果還比較一目了然,能看出數據在統計學上的特徵。這上面的結果都是分別計算得到的,單一的輸入值可以是每一類的中位數,也可以是每一類值的跨度。
基於對每種類別計算之後所得到的判別值,取最大值做出預測。
這種方法是假定數據符合高斯分布。所以,最好在預測之前把異常值先踢掉。
對於分類預測問題來說,這種演算法既簡單又給力。
4.?分類與回歸樹
預測模型里,決策樹也是非常重要的一種演算法。
可以用分兩叉的樹來表示決策樹的模型。每一個節點代表一個輸入,每個分支代表一個變數(默認變數是數字類型)
決策樹的葉節點指的是輸出變數。預測的過程會經過決策樹的分岔口,直到最後停在了一個葉節點上,對應的就是輸出值的分類結果。
決策樹很好學,也能很快地得到預測結果。對於大部分問題來說,得到的結果還挺準確,也不要求對數據進行預處理。
5.樸素貝葉斯分類器
這種預測建模的演算法強大到超乎想像。
這種模型,可以直接從你的訓練集中計算出來兩種輸出類別的概率。一個是每種輸出種類的概率;另外一個,是根據給定的x值,得到的是有條件的種類概率。
一旦計算之後,概率的模型可以用貝葉斯定理預測新的數據。
當你的數據是實數值,那麼按理說應該是符合高斯分布的,也就很容易估算出這個概率。
樸素貝葉斯定理之所以名字里有個「樸素」,是因為這種演算法假定每個輸入的變數都是獨立的。
不過,真實的數據不可能滿足這個隱藏前提。儘管如此,這個方法對很多複雜的問題還是很管用的。
6.K近鄰演算法
最近K近鄰的模型表示,就是整個訓練集。很直截了當,對吧?
對新數據的預測,是搜索整個訓練集的值,找到K個最近的例子(literally的鄰居)。然後總結K個輸出的變數。
這種演算法難就難在,怎麼定義兩個數據的相似度(相距多近算相似)。
如果你的特徵(attributes)屬於同一個尺度的話,那最簡單的方法是用歐幾里得距離。這個數值,你可以基於每個輸入變數之間的距離來計算得出。
最近鄰法,需要佔用大量的內存空間來放數據,這樣在需要預測的時候就可以進行即時運算(或學習)。也可以不斷更新訓練集,使得預測更加準確。
距離或親密度這個思路遇到更高維度(大量的輸入變數)就行不通了,會影響演算法的表現。
這叫做維度的詛咒。
當(數學)空間維度增加時,分析和組織高維空間(通常有成百上千維),因體積指數增加而遇到各種問題場景。
所以最好只保留那些和輸出值有關的輸入變數。
7.學習矢量量化
最近鄰法的缺點是,你需要整個訓練集。
而學習矢量量化(後簡稱LVQ)這個神經網路演算法,是自行選擇訓練樣例。
LVQ,是一組矢量,也叫碼本。一開始,矢量是隨機選的,經過幾次學習演算法迭代之後,慢慢選出最能代表訓練集的矢量。
學習完成後,碼本就可以用來預測了,就像最近鄰法那樣。計算新輸入樣例和碼本的距離,可以找出最相近的鄰居,也就是最匹配的碼本。
如果你重新調整數據尺度,把數據歸到同一個範圍里,比如說0到1之間,那就可以獲得最好的結果。
如果用最近鄰法就獲得了不錯的結果,那麼可以再用LVQ優化一下,減輕訓練集儲存壓力。
8.支持向量機(簡稱SVM)
這可能是機器學習里最受歡迎的演算法了。
超平面是一條可以分割輸入變數的空間的「線」。
支持向量機的超平面,是能把輸入變數空間儘可能理想地按種類切割,要麼是0,要麼是1。
在二維空間里,你可以把超平面可以分割變數空間的那條「線」。這條線能把所有的輸入值完美一分為二。
SVM的學習目標就是要找出這個超平面。
超平面和挨得最近的數據點之間的距離,叫做邊緣。
最理想的超平面,是可以無誤差地劃分訓練數據。 也就是說,每一類數據里距離超平面最近的向量與超平面之間的距離達到最大值。
這些點就叫做支持向量,他們定義了超平面。
從實際操作上,最理想的演算法是能找到這些把最近矢量與超平面值距離最大化的點。
支持向量可能是最強的拿來就用的分類器了。值得用數據集試試。
9.隨機森林
隨機森林,屬於一種重複抽樣演算法,是最受歡迎也最強大的演算法之一。
在統計學裡,bootstrap是個估算值大小很有效的方法。比方說估算平均值。
從資料庫中取一些樣本,計算平均值,重複幾次這樣的操作,獲得多個平均值。然後平均這幾個平均值,希望能得到最接近真實的平均值。
而bagging演算法,是每次取多個樣本,然後基於這些樣本建模。當要預測新數據的時候,之前建的這些模型都做次預測,最後取這些預測值的平均數,儘力接近真實的輸出值。
隨機森林在這個基礎上稍微有點變化。
它包含多個決策樹的分類器, 並且其輸出的類別是由個別樹輸出的類別的眾數而定。
如果你的高方差演算法取得了不錯的結果(比方說決策樹),那麼用隨機森林的話會進一步拿到更好的結果。
10. 提升(Boosting)演算法和自適應增強(Adaboost)演算法
Boosting的核心是,對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。
所得到的第二個弱分類器會糾正第一個弱分類器的誤差。弱分類器的不斷疊加,直到預測結果完美為止。
Adaboost演算法是首個成功用於二元分類問題的提升演算法。
現在有很多提升方法都是基於Adaboost。
AdaBoost適用於短的決策樹。
在第一個樹建立出來之後,不同的樣本訓練之後的表現可以作參考,用不同的樣本訓練弱分類器,然後根據錯誤率給樣本一個權重。
很難預測的訓練數據應該給更多的權重,反過來,好預測的就少一點權重。
模型按順序一個一個建,每個訓練數據的權重都會受到上一個決策樹表現的影響。
當所有的決策樹都建好之後,看新數據的預測表現,結果準不準。
因為訓練數據對於矯正演算法非常重要,所以要確保數據清洗乾淨了,不要有奇奇怪怪的偏離值。
最後的最後
面對海量的機器學習演算法,萌新最愛問的是,「我該選什麼演算法?」
在回答這個問題之前,要先想清楚:
1)數據的數量、質量、本質;
2)可供計算的時間;3)這個任務的緊急程度;4)你用這個數據想做什麼。要知道,即使是老司機,也無法閉著眼睛說哪個演算法能拿到最好的結果。還是得動手試。
其實機器學習的演算法很多的,以上只是介紹用得比較多的類型,比較適合萌新試試手找找感覺。
最後,附編譯來源,
https://www.kdnuggets.com/2018/02/tour-top-10-algorithms-machine-learning-newbies.html你可能感興趣
2017年AI與深度學習要點大全
深度學習自學指南:6個月,從基礎知識到模型構建
我搭的神經網路不work該怎麼辦!看看這11條新手最容易犯的錯誤
— 完 —
歡迎大家關注我們的專欄:量子位 - 知乎專欄
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。
量子位 QbitAI · 頭條號簽約作者
?? ? 追蹤AI技術和產品新動態
推薦閱讀:
※邏輯回歸(LogisticRegression)推導與實戰
※DIY發現新行星操作指南 | 谷歌開源了行星發現代碼
※支持向量機(SVM)——SMO演算法
※人工智慧——狀態機
※常見的深度學習模型--卷積神經網路概述