在機器學習中,有一種叫做“沒有免費的午餐”的定理。簡而言之,它指出沒有任何一種算法能夠適用每一個問題,而且它對于監督式學習(即預測性建模)尤其重要。
例如,你不能說神經網絡總是比決策樹好,反之亦然。有很多因素在起作用,比如數據集的大小和結構。
因此,你應該為你的問題嘗試許多不同的算法,同時使用數據的“測試集”來評估性能并選擇勝出者。
當然,你嘗試的算法必須適合你的問題,這就是選擇正確的機器學習任務的地方。打一個比方,如果你需要清理你的房子,你可以使用真空吸塵器、掃帚或拖把,但是你不會用一個鏟子來挖掘。
大的原則
然而,有一個共同的原則,即所有監督機器學習算法預測建模的基礎。
機器學習算法被描述為學習一個目標函數,將輸入變量(X)最佳映射到輸出變量(Y)的目標函數(f):Y = f(X)
這是一個通用的學習任務,我們希望在未來(Y)給出預測輸入變量(X)的新例子。我們不知道函數(f)是什么樣子或是它的形式。如果這樣做,我們會直接使用它,不需要使用機器學習算法從數據中學習它。
最常見的機器學習類型是學習映射Y = f(X)來預測新的X。這被稱為預測建模或預測分析,我們的目標是使最準確的預測成為可能。
對于渴望了解機器學習基礎知識的機器學習新手,請瀏覽數據科學家使用的前10位的機器學習算法。
1 - 線性回歸
線性回歸可能是統計學和機器學習中最知名和最易理解的算法之一。
預測建模主要關注最小化模型的誤差或者以可解釋性為代價來做出最準確的預測。我們將借用、重用和竊取包括統計數據在內的許多不同領域的算法,并將其用于這些目的。
線性回歸的表示是一個方程,通過找到稱為系數(B)的輸入變量的特定權重來描述最適合輸入變量(x)和輸出變量(y)之間關系的線。
例如:y = B0 + B1 * x
給定輸入x,我們將預測y,線性回歸學習算法的目標是找到系數B0和B1的值。
可以使用不同的技術從數據中學習線性回歸模型,例如用于普通最小二乘和梯度下降優化的線性代數解。
線性回歸已經存在了200多年,并且已經被廣泛研究。如果可能的話,使用這種技術的一些經驗法則是去除非常相似的變量(相關),并從數據中去除噪聲。這是一個快速和簡單的技術,也是一個好的算法。
2 - Logistic回歸
邏輯回歸是機器學習從統計領域借鑒的另一種技術。這是二進制分類問題的首選方法(有兩個類值的問題)。
邏輯回歸就像線性回歸,因為目標是找出加權每個輸入變量的系數值。與線性回歸不同,輸出的預測使用稱為邏輯函數的非線性函數進行變換。
邏輯函數看起來像一個大S,并將任何值轉換為0到1的范圍。這是有用的,因為我們可以將規則應用到邏輯函數的輸出,將值捕設為0和1(例如,IF小于0.5,則輸出1)并預測一個類別值。
由于模型的學習方式,邏輯回歸的預測也可以作為一個給定數據實例的概率,屬于第0類或第1類。這對于需要為預測提供更多理由的問題很有用。
像線性回歸一樣,邏輯回歸在刪除與輸出變量無關的屬性以及非常相似(相關)的屬性時效果更好。對于二元分類問題,這是一個快速學習和且有效的二元分類問題的模型。
3 - 線性判別分析
Logistic回歸是傳統上僅限于兩類分類問題的分類算法。如果你有兩個以上的類,那么,線性判別分析算法是首選的線性分類技術。
LDA的表示非常簡單。它由你的數據統計屬性組成,為每個類別計算。對于單個輸入變量,這包括:
·在所有類中計算的方差
·線性判別分析
預測是通過計算每個類別的識別值并對具有最大值的類別進行預測來進行的。該技術假定數據具有高斯分布(鐘形曲線),因此在手之前從數據中移除異常值是個好主意。這是一個簡單而強大的分類預測建模問題的方法。
4 - 分類和回歸樹
決策樹是機器學習預測建模的重要算法。
決策樹模型的表示是二叉樹,來自算法和數據結構,沒什么特別的。每個節點代表一個單獨的輸入變量(x)和該變量上的一個拆分點(假定變量是數值)。
樹的葉節點包含用于進行預測的輸出變量(y)。預測是通過遍歷樹的分裂進行的,直到到達葉節點并輸出該葉節點的類值。
樹的學習速度快,預測速度快。對于廣泛的問題,它們也經常是準確的,不需要為你的數據做任何特別準備。
5 - 樸素貝葉斯
樸素貝葉斯是一個簡單但又強大的預測建模算法。
該模型由兩種概率組成,可以從你的訓練數據中直接計算:1)每個類別的概率;和2)給定每個x值的每個類別的條件概率。一旦計算出來,就可以使用概率模型來使用貝葉斯定理對新數據進行預測。當你的數據是實值時,通常假定一個高斯分布(鐘形曲線),這樣你可以很容易地估計這些概率。
樸素貝葉斯假定每個輸入變量是獨立的,這是一個強大的假設,對于真實的數據是不切實際的,但是,這種技術在大范圍的復雜問題上是非常有效的。
6-K-近鄰算法
KNN算法非常簡單而且非常有效。 KNN的模型表示是整個訓練數據集,比較簡單。
通過搜索K個最相似的實例(鄰居)的整個訓練集并且匯總這些K個實例的輸出變量來預測新的數據點。對于回歸問題,這可能是平均輸出變量,對于分類問題,這可能是模式(或最常見的)類值。
訣竅在于如何確定數據實例之間的相似性。最簡單的方法就是就是使用Euclidean距離,你可以根據每個輸入變量之間的差異直接計算一個數字。
KNN可能需要大量的內存或空間來存儲所有的數據,但是只有在需要預測時才會執行計算(或學習)。你也可以隨時更新和管理你的訓練實例,以保持預測的準確性。
距離或貼近度的概念可能在非常高的維度(大量的輸入變量)中分解,這會對算法在你的問題上的性能產生負面影響。它建議你只使用那些與預測輸出變量最相關的輸入變量。
7 - 學習矢量量化
KNN的一個缺點是你需要堅持你的整個訓練數據集,學習矢量量化算法(簡稱LVQ)是一種人工神經網絡算法,可以讓你選擇多少個訓練實例,并精確地學習這些實例應該是什么樣的。
LVQ的表示是codebook vector的集合。這些在開始時是隨機選擇的,并且適合于在學習算法的多次迭代中最佳地總結訓練數據集。在學習之后,codebook vector可以用來做如KNN一樣的預測。通過計算每個codebook vector和新數據實例之間的距離來找到最相似的鄰居(最佳匹配碼本向量)。然后將最佳匹配單元的類別值或(在回歸情況下的實際值)作為預測返回。如果你重新調整數據以使其具有相同的范圍(如0和1之間),則可以獲得最佳結果。
如果你發現KNN在你的數據集上給出了很好的結果,請嘗試使用LVQ來減少存儲整個訓練數據集的內存要求。
8 - 支持向量機
支持向量機也許是最受歡迎和討論的機器學習算法之一。
超平面是分割輸入變量空間的線。在SVM中,選擇一個超平面,以便通過它們的類(類0或類1)將輸入變量空間中的點最好地分開。在二維中,可以將其視為一條線,讓我們假設所有的輸入點都可以被這條線完全分開。 SVM學習算法找到導致由超平面對類進行最佳分離的系數。
超平面和最近的數據點之間的距離被稱為邊界。可以分離兩個類的最好或最優超平面是具有最大邊界的直線。只有這些點與定義超平面和分類器的構造有關。這些點被稱為支持向量,他們支持或定義超平面。在實踐中,使用優化算法來找到最大化邊界的系數的值。
支持向量機可能是最強大的現成分類器之一,值得在你的數據集上嘗試。
9 - Bagging 和隨機森林
隨機森林是最流行和最強大的機器學習算法之一。它是一種稱為Bootstrap Aggregation或Bagging的集成機器學習算法。
Bootstrap 是從數據樣本中估算數量的一種強大的統計方法。你需要大量的數據樣本、計算平均值,然后平均所有的平均值,以便更好地估計真實的平均值。
在Bagging 中,使用相同的方法,而是用于估計整個統計模型,最常見的是決策樹。你的訓練數據的多個樣本被采取,然后為每個數據樣本構建模型。當你需要對新數據進行預測時,每個模型都會進行預測,并對預測進行平均,以更好地估計真實的產出值。
隨機森林是對這種方法的一種調整,在這種方法中創建決策樹,而不是選擇最佳分割點,通過引入隨機性來進行次優分割。
因此,為每一個數據樣本創建的模型比它們本來的樣子更不一樣,但是它們以其獨特和不同的方式仍然是準確的。結合他們的預測可以更好地估計真實的潛在產出價值。
如果用高方差的算法(如決策樹)獲得較好的結果,那么通常可以通過bagging算法來獲得更好的結果。
10 - 增強和AdaBoost
Boosting是一種集成技術,試圖從一些弱分類器中創建一個強分類器。這是通過從訓練數據構建模型,然后創建第二個模型來嘗試糾正第一個模型的錯誤。添加模型,直到完美預測訓練集或添加最大數量的模型。
AdaBoost是為二進制分類開發的第一個真正成功的增強算法。這是理解提升的最佳起點。現代的助推方法建立在AdaBoost上,最顯著的是隨機梯度提升機。
AdaBoost與短決策樹一起使用。在創建第一棵樹之后,使用每個訓練實例上的樹的性能來衡量所創建的下一棵樹應該關注每個訓練實例的注意力。難以預測的訓練數據被賦予更多的權重,而易于預測的實例被賦予更少的權重。依次創建模型,每個模型更新影響由序列中下一棵樹執行的學習的訓練實例的權重。在建立所有樹之后,對新數據進行預測,并且通過訓練數據的精確度對每棵樹的性能進行加權。
因為如此多的注意力放在了糾正算法的錯誤上,所以清除掉異常值的數據非常重要。
初學者在面對各種各樣的機器學習算法時所提出的一個典型問題是“我應該使用哪種算法?”問題的答案取決于許多因素,包括:(1)數據的大小、質量和性質;(2)可用的計算時間; (3)任務的緊迫性; (4)你想要如何處理數據。
即使是一位經驗豐富的數據科學家,在嘗試不同的算法之前,也無法分辨哪種算法會表現最好。雖然還有很多其他的機器學習算法,但這些算法是最受歡迎的算法。如果你是機器學習的新手,這將是一個很好的學習起點。