機器學習算法之 k-means 聚類算法

1. 機器學習基本概念

1.1 什么是機器學習

機器學習(Machine Learning)是一種基本數據的學習,是人工智能(AI, artificial intelligence) 領域中與算法相關的一個子領域,它允許計算不斷地根據一定的模型進行學習。通常來說, 這相當于將一組數據(通常說樣本)傳遞給算法,并由算法推斷出與這些數據屬性相關的一 些信息—借助這些信息,算法就能夠預測出未來可能會出現的其他數據。這種預測是完全有可能的,因為幾乎所有的隨機數當中,都包含一些這樣或那樣的模式(規律),這些模式的 存在使機器能夠據此進行歸納。為了實現歸納,機器會利用它所認定的出現于數據中的重要特征對數據進行“訓練”,并借此得到一個模型。這個過程就叫機器學習的過程,機器學習的一般流程如下圖1所示。


圖1. 機器學習流程圖

目前,機器學習已經滲入到多個領域,包括用戶分類、網頁聚類分類、廣告點擊率預測、精 準營銷等。其中,精準營銷是目前使用較廣泛的領域,它能夠幫助商家較準確地推斷出用戶 需求及喜好,及時作出精準的推銷方案。在精準營銷模型中,通常使用聚類算法將用戶進行分類,k-means 是較常用的分類算法。
  本篇我們首先給大家介紹下機器學習的基礎知識,然后給大家介紹下用 spark ML(spark 做 機器學習模型)的相關知識,最后分享一個比較常用的非監督學習算法—k-means 聚類算法。

1.2 機器學習算法分類

一般來說,從機器學習輸入樣本的類型以及要求訓練的結果來看,機器學習分為非監督學習、 監督學習、半監督學習和強化學習。其中非監督學習和監督學習使用的場景較多,而半監督學習由于對要求的樣本特征比較嚴格,所以使用較少,強化學習則是主要用在機器人控制領域。因此,下面我們主要來介紹下非監督學習和監督學習。機器學習算法的分類如下圖2所示。


圖2. 機器學習算法分類

1.2.1 非監督學習

非監督學習是沒有明確的目標訓練結果。它是通過對一些無標注的樣本集,通過某一種訓練模型找出這些樣本集之間的內在聯系的一種學習模式。 常見的應用場景包括關聯規則的學習以及聚類。這類算法并沒法制定訓練結果模型是神馬樣子的,而是找到訓練數據相互的近似關系。非監督學習包括聚類分析,非負矩陣因式分解和自組織映射等。非監督學習的常見組成類別如下圖3所示。


圖3. 非監督學習分類

聚類是非監督學習的一個最常見的例子,聚類算法往往是對當前訓練數據集中的數據點進行相似度計算,將相似的數據點聚在一起。聚類算法模型如下圖 4 所示。圖中,根據一定的相似度算法,將各個輸入的離散樣本點聚集成三個簇,每個簇內各個點的相似度較高。


圖4. 聚類算法模型

  因為非監督學習使用的是事先沒有分類的樣本,這樣可能出現更加好的分類,因為有時候我們自己擬定的分類也不一定是最佳的,因此非監督學習模型存在一定靈活性。它可以為我們提供更好的、更多樣的分類策略。

1.2.2 監督學習

監督學習更多的是用來訓練給定的算法模型的。它是需要同時有輸入和輸出的,輸入要求有標記的要本,而輸出是根據標記樣本和模型推斷的結果。它的大致過程就如下圖 5:


圖5. 監督學習流程

圖的上部分,藍色箭頭所示流程是離線訓練流程,而下面的綠色部分為對訓練出的模型預估的流程。詳細步驟如下:
  (1) 離線訓練:首先對數據進行數據篩選和清洗,后進行特征抽取,后根據一定的監督學習算法訓練出一個算法模型。
  (2) 模型預估:首先對需要預估的數據,進行特征提取后,將其輸入到離線訓練出的模型中,輸出預估的結果。

2. spark ML 簡介

2.1為什么spark適合機器學習

Spark 在機器學習方面之所以有如此大的優勢,是因為 spark 有如下特征:
  (1) 方便使用,支持多種語言及算法庫。支持的語言主要由 scala、java、python 和 R,同時 支持多個算法庫,即 SparkR 等,還能與多種數據源進行交互,即 hdfs、hbase、cassandra
等等。
   (2) Spark 采用基于內存的計算,計算速度大大高于 hadoop,而機器學習的模型一般需要重復多次計算,而且模型訓練需要較大的樣本集,因此針對大數據的快速計算的 spark 相 對于 hadoop 當然就更適合機器學習,如下圖 6 所示,對于相同的數據集,spark 要比 hadoop 的執行速度快上 100 倍。

圖6. spark與Hadoop執行速度對比

(3) 易于部署,可運行在多種分布式集群上,主要的部署模式有 standalone、hadoop yarn 和 mesos 等。三種主要的部署模式以及區別將在后續的文章《spark集群部署》中講解。
  由于 spark 有上述諸多優勢,因此現在被廣泛地用于機器學習中。spark框架中也單獨提供了對機器學習的支持庫spark MLib。spark的體系結構如下圖7所示。

圖7. spark體系結構圖

spark MLib支持的算法庫

spark Mlib 庫目前支持 4 種常見的機器學習問題,包括分類、回歸、聚類和協同過濾。Spark MLib 庫目前支持的機器學習算法如圖 8所示:

圖8. MLib 庫目前支持的機器學習算法

3. k-means 聚類算法

所謂聚類,顧名思義就是將給定的樣本根據各個 樣本點之間的相似度分成多個群組。k-means 算法屬于非監督學習中的一種聚類算法,也是較常用的一種聚類算法,因 此,這里我們介紹下 k-means 算法的實現。

3.1 k-means 算法介紹

3.1.1 k-means算法原理

k-means算法原理用下圖 9 表示:


圖9. k-means 算法示意圖

從上圖中,我們可以看到,A,B,C,D,E 是五個在圖中點。而灰色的點是我們的種子點, 也就是我們用來找點群的點。有兩個種子點,所以 K=2。然后,K-Means 的算法如下:
  (1) 隨機在圖中取 K(這里 K=2)個種子點。
  (2) 然后對圖中的所有點求到這 K 個種子點的距離,假如點 A 離種子點 K1 最近,那么 A 屬于 K1 點群。(上圖中,我們可以看到 A,B 屬于上面的種子點,C,D,E 屬于下面中部的種子點)
  (3) 接著,我們要移動種子點到屬于他的“點群”的中心。
  (4) 然后重復第 2)和第 3)步,直到,種子點沒有移動(我們可以看到圖中的第四步上面的種子點聚合了 A,B,C,下面的種子點聚合了 D,E)。

3.1.2 k-means算法流程

根據上述步驟,畫出算法的執行流程如下圖10所示。圖中,(1) 到(4)步分別對應上面的(1) 到(4)。整個計算流程如下:
  (1) 確定樣本集,然后根據需要分成的類別數k,隨機選取k個中心點
  (2) 分組,將樣本點X1...Xn分給離它們最近的中心點,并計算每個中心點到樣本點的距離和,作為(4)判斷中心點是否變動的依據。
  (3) 重新選取中心點,用新的簇的均值最為新的中心點
  (4) 重新計算每個樣本點到中心點的距離和,與(2)中算出的距離和對比,判斷中心點是否改變,即算法是否收斂。


圖10. k-means算法流程圖

由上述流程可看出,流程中最關鍵的為最后三個步驟。下面我們用公式來表示后面三步所執行的操作。
  公式中,樣本為從??1...????的點,??1...????為樣本的中心點, ??i為分類后單個簇中的一個樣本點。表示上圖中最后的三個關鍵步驟的公式如下:
  (1) 分組,計算每個樣本點到每個中心點的距離和: 將樣本分配給距離它們最近的中心向量,并使目標函數值減小,目標函數值計算公式為:

其中,min 右側公式是為了尋找單個樣本點到所有的中心點中距離最小的那個 中心點,即計算樣本點和中心點的相似度,根據樣本數據的不同,可選擇多種相似度計算方法。下面兩節會介紹比較常用的兩種相似度計算方法。
  (2) 重新確定新的中心點,即計算每個簇的平均值作為新的中心點,計算公式為:

(3) 確定準則函數 E:計算各個簇中的樣本點到每個新的中心點的距離之和

第三步獲得準則函數E(第一輪分類后的距離和)的值后,與第一步計算的距離和相比,可看出距離和是否在減小,如在減小,回到第一步重新計算。直到第三步的準則函數值與第一步的距離和相等,算法收斂,即模型訓練結束。
  從 k-means 聚類算法中可以看出,其中最主要的是計算兩個樣本點之間的相似度,將相似度最大的點聚集到一起,因此,如何選擇相似度計算公式以及選擇何種相似度計算公式就成為該聚集算法的關鍵了。常見的相似度算法有歐幾里德距離和皮爾遜相似度系數。下面我們簡要介紹下這兩種相似度算法。

3.2 歐幾里德距離

歐幾里德距離是一個非常簡單的計算相似度評價值的方法。它以經過人們一致評價的物品為坐標軸,然后將參與評價的人繪制到圖上,并考查他們彼此間的距離遠近。如圖 11:


圖11. 處于“偏好空間”中的人們

該圖顯示了處于“偏好空間”中用戶的分布狀況。Toby 在 Snakes 軸線和 Dupree 軸線上所標 示的數值分別是 4.5 和 1.0。兩人在“偏好空間”中的距離越近,他們的興趣偏好就越相似。 因為這張圖是二維的,所以在同一時間內你只能看到兩項評分,但是這一規則對于更多數量 的評分項而言也是同樣適用的。
  為了計算圖上 Toby 和 LaSalle 之間的距離,我們可以計算出每一軸向上的差值,求平方后再相加,最后對總和取平方根。得出的這個值即為歐幾里德距離。設 Toby 的一般距離坐標用(x1,y1)表示,LaSalle 的距離坐標用(x2,y2)表示,則兩人在二維坐標點上的歐幾里得距離為 :

(注:此處用 1 除是為了讓相似度與距離成正比,即距離越小,相似度越高)

3.3 皮爾遜相關度系數

除了歐幾里得距離外,還有一種相對較復雜的方法來判斷兩個物品之間的相似度,它在數據不是很規范的時候會給出更好的結果。如下圖 12 所示,我們以 Gene Seymour 和 Mick LaSalle 兩人為《superman》電影的打分為例來介紹皮爾遜相關度算法原理。

圖12. 在散點圖上比較兩位影評者的評分結果

圖中,Mick LaSalle 為《superman》打了 3 分,而 Gene Seymour 打了 5 分,因此該影片被定位在圖(3,5)的位置。我們可以看到一條直線,因它的繪制原則盡可能地靠近圖中的所有坐標點,而被稱為最佳擬合線。如果兩個人對影片的評分都相同,則這條線將成為對角線,并且與圖上所有的坐標點都相交,從而得到一個結果為 1(相關系數)的理想相關度評價。而此圖中的相關度系數大概為 0.4 左右,由此可見,相關度系數越大,兩者的相似度越高,完全相同則為 1。
  假設有兩個變量 X、Y,那么兩變量間的皮爾遜相關系數可通過以下公式計算:


其中 E 是數學期望,cov 表示協方差,σ是標準差。

最后,為了方便理解,附上本篇的思維導讀

圖13. 本篇思維導圖
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容