1. 程式人生 > >機器學習筆記六:K-Means聚類,層次聚類,譜聚類

機器學習筆記六:K-Means聚類,層次聚類,譜聚類

前面的筆記搞了那麼多的數學,這篇來一點輕鬆的,提前適應一下除了監督問題以外的非監督學習。這篇筆記有沒有前面那麼多的數學了,要講的聚類算是無監督的學習方式。

一.一般問題

聚類分析的目標是,建立滿足於同一組內的物件相似,不同組的物件相異的物件分組.它作為一種無監督學習,將相似物件歸到同一個簇中去.因此,聚類有時候被稱為無監督分類.

二.K均值聚類(K-means)

Ⅰ.概念

假設有一些資料,但是沒有標籤.我們沒有他們的類別資訊,因此每個點都是一樣的.你並不能夠看出他們的類別資訊。如下圖.
這裡寫圖片描述

這時候我們需要引入距離相似性的概念:
我們認為距離越近的物件是越相似的.比如可以用點的歐式距離來衡量.當然,其他的距離度量方式也是可以的,都行.(在統計學習筆記中的KNN還會更加詳細地介紹各種各樣的距離)
我們的目標就是讓這些資料來自動為自己分組.

那為了實現這些自動分組的方法,這裡就要形式化地定義聚類.對於K-means來說,它是將某一類定義為具有代表性的點,就像一個數據物件.該點為該聚類中物件的均值(K-means就是這麼來的).
K-means能夠發現K個不同的簇,且每個簇的中心採用簇中所含值的均值計算而成.簇個數K是我們自己定的,每一個簇通過其質心,即該簇中所有點的中心來描述.

Ⅱ.演算法流程

第1步

隨機確定K個初試點作為其質心,然後根據每個點到這個質心的距離(相似程度來把所有的點都劃為給其中相應的質心(就是分配到相應的簇中)

第2步

上一步完成之後,將質心更新為該簇中所有點的平均值.

第3步

然後對於新的質點,再使用一次第1步.要是有變化,那麼就利用第2步的方式來變化.要是沒有變化.那麼該演算法就完成了.

從上面對於K-Means的演算法流程來看,這個演算法真的是很簡單的一個演算法了,思想很簡單,所以並不是很難掌握這個演算法。

Ⅲ.K-Means實現

我們的資料是N個二維的點,二維表示“座標”是二維的,格式如下圖所示,可以看到,這些資料並沒有帶一個標籤。
這裡寫圖片描述

首先是讀取資料的模組:data.py
這裡寫圖片描述

然後是K-Means演算法的核心模組
這裡寫圖片描述
這裡寫圖片描述

執行模組run.py
這裡寫圖片描述

畫圖模組
這裡寫圖片描述

執行結果(這裡設的是K=4其他的可以在程式中設定)
這裡寫圖片描述
幾個類都被正確的聚類了。(其中與眾不同的就是中心點啦)