每當提到機器學習,大家總是被其中的各種各樣的算法和方法搞暈,覺得無從下手。确實,機器學習的各種套路确實不少,但是如果掌握了正确的路徑和方法,其實還是有迹可循的,這裡我推薦SAS的Li Hui的這篇部落格,講述了如何選擇機器學習的各種方法。
另外,Scikit-learn 也提供了一幅清晰的路線圖給大家選擇:
其實機器學習的基本算法都很簡單,下面我們就利用二維資料和互動圖形來看看機器學習中的一些基本算法以及它們的原理。(另外向Bret Victor緻敬,他的 Inventing on principle 深深的影響了我)
所有的代碼即示範可以在我的Codepen的這個Collection中找到。
首先,機器學習最大的分支的監督學習和無監督學習,簡單說資料已經打好标簽的是監督學習,而資料沒有标簽的是無監督學習。從大的分類上看,降維和聚類被劃在無監督學習,回歸和分類屬于監督學習。
無監督學習
如果你的資料都沒有标簽,你可以選擇花錢請人來标注你的資料,或者使用無監督學習的方法
首先你可以考慮是否要對資料進行降維。
降維
降維顧名思義就是把高次元的資料變成為低次元。常見的降維方法有PCA, LDA, SVD等。
主成分分析 PCA
降維裡最經典的方法是主成分分析PCA,也就是找到資料的主要組成成分,抛棄掉不重要的成分。

這裡我們先用滑鼠随機生成8個資料點,然後繪制出表示主成分的白色直線。這根線就是二維資料降維後的主成分,藍色的直線是資料點在新的主成分次元上的投影線,也就是垂線。主成分分析的數學意義可以看成是找到這根白色直線,使得投影的藍色線段的長度的和為最小值。
聚類
因為在非監督學習的環境下,資料沒有标簽,那麼能對資料所做的最好的分析除了降維,就是把具有相同特質的資料歸并在一起,也就是聚類。
層級聚類 Hierachical Cluster
該聚類方法用于建構一個擁有層次結構的聚類
如上圖所示,層級聚類的算法非常的簡單:
初始時刻,所有點都自己是一個聚類
找到距離最近的兩個聚類(剛開始也就是兩個點),形成一個聚類
兩個聚類的距離指的是聚類中最近的兩個點之間的距離
重複第二步,直到所有的點都被聚集到聚類中。
KMeans
KMeans中文翻譯K均值算法,是最常見的聚類算法。
随機在圖中取K(這裡K=3)個中心種子點。
然後對圖中的所有點求到這K個中心種子點的距離,假如點P離中心點S最近,那麼P屬于S點的聚類。
接下來,我們要移動中心點到屬于他的“聚類”的中心。
然後重複第2)和第3)步,直到,中心點沒有移動,那麼算法收斂,找到所有的聚類。
KMeans算法有幾個問題:
如何決定K值,在上圖的例子中,我知道要分三個聚類,是以選擇K等于3,然而在實際的應用中,往往并不知道應該分成幾個類
由于中心點的初始位置是随機的,有可能并不能正确分類,大家可以在我的Codepen中嘗試不同的資料
如下圖,如果資料的分布在空間上有特殊性,KMeans算法并不能有效的分類。中間的點被分别歸到了橙色和藍色,其實都應該是藍色。
DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)中文是基于密度的聚類算法。
DBSCAN算法基于一個事實:一個聚類可以由其中的任何核心對象唯一确定。
算法的具體聚類過程如下:
掃描整個資料集,找到任意一個核心點,對該核心點進行擴充。擴充的方法是尋找從該核心點出發的所有密度相連的資料點(注意是密度相連)。
周遊該核心點的鄰域内的所有核心點(因為邊界點是無法擴充的),尋找與這些資料點密度相連的點,直到沒有可以擴充的資料點為止。最後聚類成的簇的邊界節點都是非核心資料點。
之後就是重新掃描資料集(不包括之前尋找到的簇中的任何資料點),尋找沒有被聚類的核心點,再重複上面的步驟,對該核心點進行擴充直到資料集中沒有新的核心點為止。資料集中沒有包含在任何簇中的資料點就構成異常點。
如上圖所示,DBSCAN可以有效的解決KMeans不能正确分類的資料集。并且不需要知道K值。
當然,DBCSAN還是要決定兩個參數,如何決定這兩個參數是分類效果的關鍵因素:
一個參數是半徑(Eps),表示以給定點P為中心的圓形鄰域的範圍;
另一個參數是以點P為中心的鄰域内最少點的數量(MinPts)。如果滿足:以點P為中心、半徑為Eps的鄰域内的點的個數不少于MinPts,則稱點P為核心點。
監督學習
監督學習中的資料要求具有标簽。也就是說針對已有的結果去預測新出現的資料。如果要預測的内容是數值類型,我們稱作回歸,如果要預測的内容是類别或者是離散的,我們稱作分類。
其實回歸和分類本質上是類似的,是以很多的算法既可以用作分類,也可以用作回歸。
回歸
線性回歸
線性回歸是最經典的回歸算法。
在統計學中,線性回歸(Linear regression)是利用稱為線性回歸方程的最小二乘函數對一個或多個自變量和因變量之間關系進行模組化的一種回歸分析。
這種函數是一個或多個稱為回歸系數的模型參數的線性組合。 隻有一個自變量的情況稱為簡單回歸,大于一個自變量情況的叫做多元回歸。
如上圖所示,線性回歸就是要找到一條直線,使得所有的點預測的失誤最小。也就是圖中的藍色直線段的和最小。這個圖很像我們第一個例子中的PCA。仔細觀察,分辨它們的差別。
如果對于算法的的準确性要求比較高,推薦的回歸算法包括:随機森林,神經網絡或者Gradient Boosting Tree。
如果要求速度優先,建議考慮決策樹和線性回歸。
分類
支援向量機 SVM
如果對于分類的準确性要求比較高,可使用的算法包括Kernel SVM,随機森林,神經網絡以及Gradient Boosting Tree。
給定一組訓練執行個體,每個訓練執行個體被标記為屬于兩個類别中的一個或另一個,SVM訓練算法建立一個将新的執行個體配置設定給兩個類别之一的模型,使其成為非機率二進制線性分類器。
SVM模型是将執行個體表示為空間中的點,這樣映射就使得單獨類别的執行個體被盡可能寬的明顯的間隔分開。然後,将新的執行個體映射到同一空間,并基于它們落在間隔的哪一側來預測所屬類别。
如上圖所示,SVM算法就是在空間中找到一條直線,能夠最好的分割兩組資料。使得這兩組資料到直線的距離的絕對值的和盡可能的大。
上圖示意了不同的核方法的不同分類效果。
決策樹
如果要求分類結果是可以解釋的,可以考慮決策樹或者邏輯回歸。
決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。
其每個非葉節點表示一個特征屬性上的測試,每個分支代表這個特征屬性在某個值域上的輸出,而每個葉節點存放一個類别。
使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特征屬性,并按照其值選擇輸出分支,直到到達葉子節點,将葉子節點存放的類别作為決策結果。
決策樹可以用于回歸或者分類,下圖是一個分類的例子。
如上圖所示,決策樹把空間分割成不同的區域。
邏輯回歸
邏輯回歸雖然名字是回歸,但是卻是個分類算法。因為它和SVM類似是一個二分類,數學模型是預測1或者0的機率。是以我說回歸和分類其實本質上是一緻的。
這裡要注意邏輯回歸和線性SVM分類的差別
樸素貝葉斯
當資料量相當大的時候,樸素貝葉斯方法是一個很好的選擇。
15年我在公司給小夥伴們分享過bayers方法,可惜speaker deck被牆了,如果有興趣可以自行想辦法。
如上圖所示,大家可以思考一下左下的綠點對整體分類結果的影響。
KNN
KNN分類可能是所有機器學習算法裡最簡單的一個了。
如上圖所示,K=3,滑鼠移動到任何一個點,就找到距離該點最近的K個點,然後,這K個點投票,多數表決獲勝。就是這麼簡單。
總 結
本文利用二維互動圖幫助大家了解機器學習的基本算法,希望能增加大家對機器學習的各種方法有所了解。
原文釋出時間為:2018-01-22