翻譯 | AI科技大本營(rgznai100)
參與 | 林椿眄
編輯 | 波波,Donna
在機器學習領域,“沒有免費的午餐”是一個不變的定理。簡而言之,沒有一種演算法是完美的,可以作為任何問題的最佳解決方案。認清這一點,對於解決監督學習問題(如預測建模問題)尤其重要。
我們不能總說神經網路就是比決策樹好,反之亦然。影響演算法效能的因素有很多,比如資料集的大小和結構。
因此,對於自己的問題,要嘗試多種不同的演算法,並使用測試資料集來評估各個演算法的效能,以選出效果最優的那一個。
當然,前面所嘗試的演算法必須要適合自己的問題,這也正是你要選對正確的機器學習任務的地方。比如,需要打掃房子的時候,你會使用真空吸塵器、掃帚或拖把,但絕不應該用鏟子在屋內挖坑。
▌重要的原則
話雖如此,但所有用於預測建模的有監督機器學習演算法卻有一個共同的原則:
機器學習演算法的本質是找到一個目標函式(f),使其成為輸入變數(X)到輸出變數(Y)之間的最佳對映:Y = f(X)
這是最常見的學習任務,給定任意新的輸入變數(X),我們就能預測出輸出變數(Y)的值。因為我們不知道目標函式(f)的形式或樣子,所以才要機器去把它找出來。不然的話,我們就可以直接用目標函式來進行預測了,而非還要用機器學習演算法來學習資料了。
最常見的機器學習型別就是找到最佳對映Y = f(X),並以此來預測新X所對應的Y值。這一過程被稱為預測建模或預測分析,目標是儘可能到出最為準確的預測。
對於渴望理解機器學習基本概念的各位新手,我們特地整理出資料科學家最常用的十大機器學習演算法,便於大家快速上手。
▌ 1- 線性迴歸
線性迴歸可能是統計學和機器學習中最為知名、最易於理解的一個演算法。
預測建模主要關注的是如何最小化模型的誤差,或是如何在一個可解釋性代價的基礎上做出最為準確的預測。我們將借用、重用和竊取包括統計學在內的多個不同領域的演算法,並將其用於這些目的。
線性迴歸所表示的是描述一條直線的方程,通過輸入變數的特定權重係數(B)來找出輸入變數(x)和輸出變數(y)之間最適合的對映關係。
線性迴歸
例如:y = B0 + B1 * x
給定輸入x,我們可以預測出y的值。線性迴歸學習演算法的目標是找到係數B0和B1的值。
找出資料的線性迴歸模型有多種不同的技巧,例如將線性代數解用於普通最小二乘法和梯度下降優化問題。
線性迴歸業已存在200多年,並已被廣泛研究過。使用該演算法的一些竅門,是儘可能地去除非常相似的相關變數以及資料中的噪聲。這是一個快速、簡單而又好用的演算法。
▌ 2 - 邏輯迴歸
邏輯迴歸是機器學習借自統計領域的另一項技術,用於解決二元分類問題(有兩個類值的問題)。
邏輯迴歸就像線性迴歸,因為它的目標是找出每個輸入變數的加權係數值。與線性迴歸不同的是,邏輯迴歸預測輸出值的函式是非線性的,也被稱為邏輯函式。
邏輯迴歸的函式影像看起來是一個大的S形,並將任何值轉換至0到1的區間。這種形式非常有用,因為我們可以用一個規則把邏輯函式的值轉化成0和1(例如,如果函式值小於0.5,則輸出1),從而預測類別。
邏輯迴歸
基於模型學習的方式,邏輯迴歸的輸出值也可以用來預測給定資料例項屬於類別0和類別1的概率。當你的預測需要更多依據時,這一點會非常有用。
跟線性迴歸一樣,當你剔除與輸出變數無關或與之除非常相似(相關)的屬性後,邏輯迴歸的效果會更好。對於二元分類問題,它是一個易於上手、快速而又有效的模型。
▌ 3 - 線性判別分析
一般來說,邏輯迴歸僅限於二元分類問題。 但如果分類類別超過兩個,線性判別分析就成為你首選的線性分類演算法。
線性判別分析的表示式非常簡單。 它由資料的統計屬性組成,並計算每個類別的屬性值。對於單個輸入變數,它包括:
每個類別的平均值。
所有類別的方差。
線性判別分析
線性判別分析通過計算每個類別的差別值,並對擁有最大值的類別進行預測。 該方法假定資料服從高斯分佈(鐘形曲線),因此預測前從資料中移除異常值會是一個很好的習慣。對於分類預測問題來說,它是一個簡單而又強大的方法。
▌ 4 - 分類和迴歸樹
決策樹是用於預測建模的一種重要機器學習演算法。
決策樹模型的表現形式為二叉樹,也就是來自演算法和資料結構方面的二叉樹,沒有什麼特別。樹上每個節點代表一個輸入變數(x)與一個基於該變數的分離點(假定這個變數是數字)。
決策樹
葉節點包含了用於預測的輸出變數(y)。預測是通過遍歷樹的分離點開始,直到抵達每一個葉節點,並輸出該葉節點的分類值。
決策樹演算法學習起來很快,預測速度也很快。決策樹對於各種各樣的問題都能做出準確的預測,並且無需對資料做任何特殊的預處理。
▌ 5 - 樸素貝葉斯
樸素貝葉斯是一種簡單而又強大的預測建模演算法。
該模型由兩種概率組成,它們都能從訓練資料中直接計算出來:1)每個類別的概率; 2)對於給定的x值,每個類別的條件概率。 一旦計算出來,概率模型就可以用於使用貝葉斯定理對新的資料進行預測。 當你的資料是實值時,通常會假定一個高斯分佈(鐘形曲線),這樣你就很容易計算出這些資料的概率。
樸素貝葉斯
樸素貝葉斯假定每個輸入變數都是獨立,所以被稱為“樸素的”。這是一個強假設,對真實資料而言有點不切實際,但該方法在大範圍的複雜問題上非常有效。
▌ 6 - K-最近鄰演算法
K-最近鄰演算法是一種非常簡單和有效。它的模型所表示是整個訓練資料集,看上去很簡單,對吧?
對於給定的訓練資料,通過搜尋整個資料集中K個最相似的例項(鄰居),彙總這K個例項的輸出變數可以預測新的資料點。對於迴歸問題,它可能是輸出變數的平均值;對於分類問題,它可能是模式(或最常見的)類別值。
使用K-最近鄰演算法的訣竅,是在於如何確定資料例項之間的相似性。最簡單的方法,如果你的屬性在歐幾里德距離上尺度相同(例如均以英寸為單位),那麼基於每個輸入變數之間的差異,你就可以直接計算其數值來確定相似性。
K-最近鄰演算法可能需要大量的記憶體或儲存空間來儲存所有資料,但只有在預測時才會執行計算(或學習)。你也可以隨時更新和管理你的訓練例項,以保持預測的準確性。
距離或緊密度的概念在非常高的維度(大量的輸入變數)中可能會失效,因為輸入變數的數量對於演算法效能有著很大的負面影響。這就是維度災難。這就要求你只使用那些與預測輸出變數最相關的輸入變數。
▌ 7 - 學習向量量化
K-最近鄰演算法的一個缺點是你需要使用整個訓練資料集。而作為人工神經網路,學習向量量化演算法(簡稱LVQ)允許你選擇訓練例項的數量,並能準確地學習這些例項所應有的特徵。
學習向量量化
學習向量量化演算法所表示的是碼本向量的集合。這些向量在初始化的時候隨機選擇出來,並在學習演算法的多次迭代中優化成最能概括訓練資料集的集合。在學習完成後,碼本向量可以像K-最近鄰演算法一樣進行預測。通過計算每個碼本向量和新資料例項之間的距離來找到最相似的鄰居(最佳匹配碼本向量),然後返回最佳匹配單元的類別值或(在迴歸情況下的實際值)作為預測。如果能重新調整資料使其處於相同的區間(如0到1之間),則可以獲得最佳的預測結果。
如果K-最近鄰演算法在你的資料集上已經給出了很好的預測結果,那麼可以嘗試用學習向量量化演算法來減少整個訓練資料集的記憶體儲存需求。
▌ 8 - 支援向量機
支援向量機可能是最受歡迎、討論最為廣泛的機器學習演算法之一。
超平面是輸入變數空間內的一條分割線。在支援向量機中,超平面可以通過類別(0類或1類)最佳分割輸入變數空間。在二維空間內,超平面可被視為一條線,我們假設所有的輸入點都可以被該線完全分開。支援向量機的目標是找到一個分離係數,讓一個超平面能夠對不同類別的資料進行最佳分割。
支援向量機
超平面與最近的資料點之間的距離被稱為邊距。在分離兩個類上具有最大邊距的超平面被稱為最佳超平面。超平面的確定只跟這些點及分類器的構造有關。這些點被稱為支援向量,它們支援並定義超平面。在實踐中,可以使用優化演算法來找到能夠最大化邊距的係數。
支援向量機可能是最為強大的“開箱即用”分類器之一,值得你嘗試。
▌ 9 - bagging演算法和隨機森林
隨機森林是最流行、最強大的機器學習演算法之一。它是一種被稱為Bootstrap Aggregation或Bagging的機器學習整合演算法。
Bootstrap是一種從資料樣本中估算數量的強大統計方法。換句話說,你需要抽取大量的資料樣本、計算平均值,然後再計算所有均值的平均,以便更好地估計整體樣本的真實平均值。
bagging演算法也使用相同的方式,但用於估計整個統計模型的最常見方法是決策樹。訓練資料中的多個樣本將被取樣,然後對每個資料樣本建模。對新資料進行預測時,每個模型都會進行預測,並對每個預測結果進行平均,以更好地估計真實的輸出值。
隨機森林
隨機森林是對bagging演算法的一種調整,它不是選擇最佳分割點來建立決策樹,而是通過引入隨機性來得到次優分割點。
因此,針對每個資料樣本所建立的模型,會與其他方式有所不同,但仍能以其獨特和不同的方式準確預測。結合所有模型的預測,可以更好地估計潛在的真實輸出。
如果用方差較高的演算法(如決策樹)能夠獲得較好的結果,那麼通過bagging演算法通常可以獲得更好的結果。
▌ 10 - Boosting和AdaBoost演算法
Boosting是一項從多個弱分類器中構建強分類器的整合預測技術。它從訓練資料中構建模型,然後通過修正前一個模型的錯誤創造出第二個模型。以此類推,模型不斷疊加,直至能夠完美預測訓練資料集,或達到可新增的模型的數量上限。
在針對二元分類所開發的boosting演算法中,AdaBoost是第一個成功的。它是理解boosting演算法的最佳起點。現代boosting方法基於AdaBoost而構建,最典型的例子是隨機梯度加速器。
通常,AdaBoost演算法與決策樹一起工作。第一個決策樹建立後,決策樹在每個訓練例項上的效能,都被用來衡量下一個決策樹針對該例項所應分配的關注程度。難以預測的訓練資料被賦予更大的權重,而容易預測的資料則被賦予更小的權重。模型依次被建立,每次更新訓練例項的權重,都會影響到序列中下一個決策樹學習效能。所有決策樹完成後,即可對新輸入的資料進行預測,而每個決策樹的效能將由它在訓練資料上的準確度所決定。
由於模型注意力都集中於糾正上一個演算法的錯誤,所以必須確保資料是乾淨無異常的。
▌ 最後的建議
初學者常常會被眼花繚亂的機器學習演算法所困擾,提出“我該使用哪種演算法?”這樣的問題。
此問題的答案取決於許多因素,包括:
(1)資料的大小、質量和性質;
(2)可用的計算時間;
(3)任務的緊迫性;
(4)你想要用資料來做什麼。
即使是一位經驗豐富的資料科學家,在嘗試不同的演算法之前,也無法回答哪種演算法的效能會是最好的。機器學習的演算法還有很多,但以上這些是最受歡迎的演算法。如果你剛入門機器學習,這將是一個很好的學習起點。
作者 | James Le
原文連結 | towardsdatascience.com/a-tour-of-t…