本文最初發表於 Towards Data Science 博客,經原作者 Soner Yildirim 授權,InfoQ 中文站翻譯並分享。
由於有了各種庫和框架,我們只需一行代碼就可以實現機器學習算法。有些庫和框架更進一步,可以讓你在短時間內實現和比較多種算法。
但在使用方便的同時,也帶來了一些缺點。我們可能會忽略這些算法背後的關鍵概念或思想,而這些概念或思想對於這些算法的理解是必不可少的。
在本文中,我將提到關於 7 種機器學習算法的 7 個要點。我想指出的是,這些並不是對算法的完整解釋,所以,如果你對它們有基本瞭解的話,那就更好不過了。
閒話少敘,言歸正題。
1. 支持向量機
要點:C 參數
支持向量機(Support Vector Machine,SVM)創建一個決策邊界,用於區分兩個或多個類。
Soft-Margin SVM 試圖解決一類優化問題,其目標如下:
- 增加決策邊界到類(或支持向量)的距離。
- 最大化訓練集中正確分類的點的數量。
這兩個目標之間顯然存在一個權衡。決策邊界可能必須非常接近一個特定的類,才能正確標註所有的數據點。然而,在這種情況下,由於決策邊界對噪聲和自變量的微小變化過於敏感,新觀測值的正確率可能會有所降低。
另一方面,決策邊間可能會被儘可能地放置在每個類上,但代價是一些錯誤分類的異常。這種權衡由C 參數控制。
C 參數對每一個錯誤分類的數據點增加了一個懲罰。如果 C 較小,則對錯誤分類點的懲罰較低,所以選擇一個餘量較大的決策邊界,以犧牲較多的錯誤分類次數爲代價。
如果 C 較大,支持向量機會盡量減少錯誤分類樣本的數量,從而導致決策邊界具有較小的邊際。對於所有錯誤分類的例子,懲罰是不一樣的。它與到決策邊界的距離成正比。
2. 決策樹
要點:信息增益
在選擇要分割的特徵時,決策時算法會試圖實現:
- 更多的預測性。
- 更少的雜質。
- 更低的熵。
熵是對不確定性或隨機性的度量。一個變量的隨機性越大,熵就越高。具有均勻分佈的變量就具有最高的熵。例如,擲一個公平的骰子,有 6 種可能的結果,概率相等,所以它具有均勻分佈和高熵。
選擇導致更多純節點的拆分。所有這些都表明“信息增益”(Information gain),基本上就是拆分前後的熵之差。
$信息增益=(拆分之前的熵)-(拆分之後的加權熵)$
3. 隨機森林
要點:自助法與特徵隨機性
隨機森林是許多決策樹的集合。隨機森林的成功在很大程度上取決於使用不相關的決策樹。如果我們使用相同或非常相似的樹,那麼整體結果與單個決策樹的結果差別並不大。隨機森林通過自助法(bootstrapping)和特徵隨機性(feature randomness)得到不相關的決策樹。
特徵隨機性是通過隨機深林中的每個決策樹隨機選擇特徵來實現的。隨機森林中每棵樹使用的特徵數量可以通過max_features
參數進行控制。
4. 梯度提升決策樹
要點:學習率和子模型數
梯度提升決策樹(Gradient Boosted Decision Tree,GBDT)是一個決策樹的集合,結合提升(boosting)方法,即將決策樹按順序連接起來。
學習率(Learning rate)和子模型數(n_estimators)是用於梯度提升決策樹的兩個關鍵超參數。
學習率簡單來說就是模型學習的速度。學習率慢的好處是模型會變得過更加穩健和泛化。然而,學習率慢是有代價的。它需要更多的時間來訓練模型,這就給我們帶來了另一個重要的超參數。
n_estimators參數是模型中使用的樹的數量。如果學習率低,我們需要更多的樹來訓練模型。然而,我們在選擇數目的數量時需要非常小心。使用過多的樹會產生過擬合的高風險。
5. 樸素貝葉斯分類器
要點:樸素的好處是什麼?
樸素貝葉斯(Naive Bayes)是一種用於分類的監督式機器學習分類算法,因此其任務是在給定特徵值的情況下找到觀測值所述的類別。樸素貝葉斯分類器計算給定一組特徵值(即$p(y_i|x_1,x_2,…,x_n)$的類的概率。
樸素貝葉斯假設特徵彼此獨立,並且特徵之間不存在相關性。然而,在現實生活中卻並非如此。這種特徵不相關的樸素假設,這就是這種算法被稱爲“樸素”的原因。
假設所有特徵都是獨立的,因此與複雜的算法相比,它的速度非常快。在某些情況下,比起更高的正確率,速度更受青睞。
樸素貝葉斯適用於文本分類、電子郵件垃圾郵件檢測等高維數據的處理。
6. K-最近鄰算法
要點:何時使用?何時不使用?
K-最近鄰算法(K-nearest neighbors,KNN)是一種監督式機器學習算法,可用於解決分類問題,也可用於解決迴歸問題。KNN 的主要原理是數據點的值由其周圍的數據點確定。
隨着數據點數量的增加,KNN 算法將會變得非常慢,這是因爲模型需要存儲所有的數據點來計算它們之間的距離。這個原因也使得算法的內存效率不高。
另一個缺點就是 KNN 對異常值很敏感,因爲異常值對最近點有影響(即使它的距離很遠)。
積極的一面是:
- 簡單易懂。
- 不做任何假設,所以它可以在非線性任務中實現。
- 在多個類別的分類上效果很好。
- 適用於分類任何和迴歸任務。
7. K-均值聚類
要點:何時使用?何時不使用?
K-均值聚類(K-Means Clustering)的目的是將數據分成 K 個聚類,使得同一個聚類中的數據點相似,而不同聚類中的數據點相距更遠。
K-均值聚類算法無法猜測數據中存在多少個聚類。聚類的數量必須預先確定,這可能是一項具有挑戰性的任務。
隨着樣本數量的增加,K-均值聚類算法將會變慢。因爲在每一步中,它都要訪問所有的數據點並計算距離。
K-均值聚類只能繪製線性邊界。如果數據中存在分組的非線性結構,那麼這種情況下,K-均值聚類就不是一個好選擇。
積極的一面是:
- 易於理解。
- 相對較快。
- 可針對大型數據集進行擴展。
- 能夠巧妙地選擇初始質心的位置,從而加快收斂速度。
- 保證收斂性。
我們已經介紹了關於每種算法的一些關鍵概念。給出的要點和註釋絕對不是算法的全部解釋。然而,我給出的這些內容肯定很重要,要在實施這些算法時,瞭解這些內容纔能有所作爲。
作者介紹:
Soner Yildirim,數據科學愛好者,撰寫關於數據科學、人工智能、機器學習、深度學習、統計學、數學等文章。
原文鏈接:
https://towardsdatascience.com/7-key-points-on-7-machine-learning-algorithms-945ebda7a79