機器學習從入門到放棄K-Means聚類

前言

在本系列前面的內容中,講述了一系列的機器學習方法。要知道機器學習算法中,比較經常使用的主要分紅有監督學習無監督學習(其實還有一個叫半監督學習,在這裏先不做討論),簡單點來講,所謂的有監督學習,就是人類會給訓練集指明label,天然的無監督學習就是不爲訓練集指明label。因此本系列前段時間所說的就屬於有監督學習html

站在使用者的角度來講,兩種模型的使用方法大體相同,都是我將測試樣本輸入模型,模型輸出該樣本所屬的類別(這裏以分類問題爲例),但模型產生的方式是不一樣的。對於有監督學習來講,你從新訓練一次樣本1類仍是那個1類,而對於無監督學習來講,你從新訓練一次1類說不定就不是上次那個1類了,正是由於這個緣由,因此在輸出類別後,必要時須要輸出同類別的其餘樣本,以做參考git

正如當你老師跟你說了一堆三角形的例子你就知道這堂課說的就是三角形同樣,沒錯,接下來就是爲了講述最基本的無監督學習的算法,K-Means聚類算法。github

在這篇文章中,做者舉了一個例子,將近年來各國球隊的戰績進行聚類,分出世界一流,二流,三流球隊,那麼,顯然當有一隻新球隊須要分類時,將他的戰績扔進模型裏跑一跑就ok了。算法

其實聚類算法還有一個妙用就是,當數據集過於龐大,而且原始數據並不存在label信息,你又須要跑一個有監督學習的算法的時候,你想要人爲的給數據打label顯然是不合適的,這時先跑一次聚類,記錄好聚類的狀況,再直接跑有監督學習的算法就能夠了。機器學習

K-Means

回到正題上,本文主要介紹K-Means方法,和爲了彌補K-Means不足而產生的二分K-Means方法學習

如下講解以二維數據爲例。測試

普通的K-Means方法

  • 隨機產生n個點爲簇心,n的取值爲用戶須要的類別個數。code

  • 計算全部樣本離簇心的距離,計算方法有多種,其中包括最易理解的歐式距離sqrt((x1-y1)^2 +(x2-y2)^2)htm

  • 每個樣本都概括到距離最近的簇心所在的類別。blog

  • 產生新的簇心,新的簇心計算方法爲每個簇內全部的樣本的算術平均數。新簇心座標(((x1+x2+……xn)/n),(y1+y2+……yn)/n))(x,y)爲同一簇內樣本點的座標

  • 產生新的簇心後,按照新的簇心進行分類,若分類結果不變,則結束聚類,不然重複該過程至分類結果不變或超出用戶指定的迭代次數。

普通K-Means有一個比較明顯的缺陷,就是他的起始簇心是隨機的。

隨機意味這什麼呢?一切皆有可能啊!

由於後續的質心迭代都是基於首次質心的選取,所以總體算法的結果和質心的選取極度敏感,雖然退一步來講,第一次聚類不理想,就重來算法一次好了,你能夠重複運行至結果可接受位置,但這種方法顯然是不能接受。因而便出現了二分K-Means算法。

二分K-Means方法

  • 以全部樣本點的中心爲第一個簇心

  • 判斷當前簇心數是否知足要求,若知足則退出算法

  • 若不知足,則選取劃分後偏差最小的點一分爲二(只有一個點時則選取自身)(一分爲二的操做是指對該簇進行普通的K-Means方法)

  • 直至簇心個數知足要求。

代碼實現

github

後話

自從開始這個機器學習從入門到放棄系列後,也多了一些關注者,最近文章更新緩慢我也有些抱歉,其實在github上已有其餘算法的實現,心癢的同窗能夠先自行學習,因文章須要知識上的梳理和總結加上一些私事,因此更新會較慢,各位關注者見諒哈。

文章若有不足或不明白的地方,歡迎留言指教或探討。

相關文章
相關標籤/搜索