十分鐘搞懂python實現無監督K均值聚類算法

本文簡要介紹了一種常用的無監督學習算法:K 均值聚類,主要用python實現

無監督學習是一類用於在數據中尋找模式的機器學習技術。無監督學習算法使用的輸入數據都是沒有標註過的,這意味著數據只給出了輸入變量(自變量 X)而沒有給出相應的輸出變量(因變量)。在無監督學習中,算法本身將發掘數據中有趣的結構。

十分鐘搞懂python實現無監督K均值聚類算法

監督學習 VS 無監督學習

在監督學習中,系統試圖從之前給出的示例中學習。因此,如果數據集被標註過了,提前做好了分類的信息的這就是一個監督學習問題;而如果數據沒有被標註過,這就是一個無監督學習問題,學習過程中並不知道分類結果是否正確。

十分鐘搞懂python實現無監督K均值聚類算法

左圖是一個監督學習的例子,它使用迴歸技術找到在各個特徵之間的最佳擬合曲線。

而右無監督學習中,根據特徵對輸入數據進行劃分,並且根據數據所屬的簇進行預測。

一:模型原理:

K-Means算法的思想:對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為K個簇。讓簇內的點儘量緊密的連在一起,而讓簇間的距離儘量的大。

如果用數據表達式表示,假設簇劃分為,則我們的目標是最小化平方誤差E:

十分鐘搞懂python實現無監督K均值聚類算法

算法都包含一個過程,即找出和某一個點最近的點。利用了最近鄰(nearest neighbors)的思想。

二:算法步驟:

(1) 首先要注意的是k值的選擇,一般來說,我們會根據對數據的先驗經驗選擇一個合適的k值,如果沒有什麼先驗知識,則可以通過交叉驗證選擇一個合適的k值。並隨機初始化它們各自的中心點。中心點是與每個數據點向量長度相同的位置。這需要我們提前預知類的數量(即中心點的數量)。

(2) 計算每個數據點到中心點的距離,數據點距離哪個中心點最近就劃分到哪一類中。

(3) 計算每一類中中心點作為新的中心點。

(4) 重複以上步驟,直到每一類中心在每次迭代後變化不大為止。也可以多次隨機初始化中心點,然後選擇運行結果最好的一個。

三:重要的參數

n_clusters:聚類的個數K值,一般根據經驗,也可以先畫出樣本的散點圖,查看樣本的分佈情況再初步確定聚類的個數

max_iter:最大迭代次數,超過這個次數,則停止迭代

四:數據準備

我們使用sklearn自帶Iris 數據集-額鳶尾花卉數據集,這個數據集包含 150 條記錄,每條記錄由 5 個特徵構成——花瓣長度、花瓣寬度、萼片長度、萼片寬度、花的類別。花的類別包含 Iris Setosa、Iris VIrginica 和 Iris Versicolor 三種。本文中向無監督算法提供了鳶尾花的後兩個特徵,sepal length 萼片長度(釐米),sepal width 萼片寬度(釐米)預測它屬於哪個類別。

數據探索

首先使用 matplotlib 進行數據可視化,代碼如下:

十分鐘搞懂python實現無監督K均值聚類算法

十分鐘搞懂python實現無監督K均值聚類算法

五:K 均值算法的 Python 實現

十分鐘搞懂python實現無監督K均值聚類算法

結果如下:類別特徵,類別數量

十分鐘搞懂python實現無監督K均值聚類算法

六:模型檢驗:

1,畫出聚類散點圖

十分鐘搞懂python實現無監督K均值聚類算法

如下圖,聚類之後形成包含聚類中心的散點圖

十分鐘搞懂python實現無監督K均值聚類算法

十分鐘搞懂python實現無監督K均值聚類算法

2,Calinski-Harabasz分數值:在(0-1)區間,越大說明組與組之間界限越明顯,組內之間樣本界限越小,說明模型越好,

3,蘭德指數:在(0-1)區間,越大越好,但是前提得知道確定的分類結果

六:結果解讀

如果聚類的效果好,就需要對每個類別的特徵根據業務需要進行解讀或者定義,使之能真正在業務中使用


分享到:


相關文章: