探索sklearn | K均值聚類


1 K均值聚類

K均值聚類是一種非監督機器學習算法,只需要輸入樣本的特征 ,而無需標記。

K均值聚類首先需要隨機初始化K個聚類中心,然后遍歷每一個樣本,將樣本歸類到最近的一個聚類中,一個聚類中樣本特征值的均值作為這個聚類新的聚類中心,聚類中心的改變,又會改變樣本的類別,如此循環往復,直至每一個樣本的類別穩定后,也就是聚類中心不再改變是,完成。

我還是以我們熟悉地鳶尾花數據集來舉例子

 

2 對樣本進行聚類

sklearn對於所有的機器學習算法有一個一致的接口,一般需要以下幾個步驟來進行學習

  1. 初始化分類器,根據不同的算法,需要給出不同的參數,一般所有的參數都有一個默認值。對於K均值聚類,我們需要給定類別的個數n_cluster,通過先驗的知識,我們知道鳶尾花數據集里共有三種不同類型的鳶尾花,於是是3;K均值聚類,是一個循環更新聚類中心以及樣本類別的算法,需要設定循環的次數;最后K均值聚類的結果還與初始聚類中心有關,n_init設為10意味着進行10次隨機初始化,選擇效果最好的一種來作為模型
  2. 對於非監督機器學習,輸入的數據是樣本的特征,clf.fit(X)就可以把數據輸入到分類器里
  3. 用分類器對未知數據進行分類,需要使用的是分類器的predict方法
from sklearn.cluster import KMeans

clf = KMeans(n_clusters=3, max_iter=300, n_init=10)
clf.fit(X)
ypred = clf.predict(X)

 我們還可以一步完成,將數據輸入到分類器,同時對輸入數據進行分類的工作

ypred = clf.fit_predict(X)

 3 分析聚類的結果

一樣我們可以把結果畫在三維的散點圖里

但是完全看不出和原本正確的分類有什么區別,差異很大的山鳶尾花毫無疑問地全部分類正確

計算正確率可能是一個不錯的選擇,

>>y
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  #原數據集山鳶尾花的標簽是0
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
>>ypred
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  #分類器給出山鳶尾花的標簽是1
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2,
       0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,
       2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 2])

 查看正確的標簽和分類器給出的標簽,卻發現他們並非使用的是同一個標簽,那么想簡單地通過sum(y==ypred)計算正確率是不可能的了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM