欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于K-Means聚類算法演示及可視化展示

 更新時間:2022年11月02日 09:38:58   作者:Eureka丶  
這篇文章主要介紹了基于K-Means聚類算法演示及可視化展示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

K-Means聚類算法演示及可視化展示

#導入包
from sklearn.cluster import KMeans
X = [[0.0888, 0.5885], [0.1399, 0.8291], [0.0747, 0.4974], [0.0983, 0.5772], [0.1276, 0.5703],
     [0.1671, 0.5835], [0.1906, 0.5276], [0.1061, 0.5523], [0.2446, 0.4007], [0.167, 0.477],
     [0.2485, 0.4313], [0.1227, 0.4909], [0.124, 0.5668], [0.1461, 0.5113], [0.2315, 0.3788],
     [0.0494, 0.559], [0.1107, 0.4799], [0.2521, 0.5735], [0.1007, 0.6318], [0.1067, 0.4326],
     [0.1956, 0.428]]
# 輸出數(shù)據(jù)集
print(X)

"""
KMeans聚類
clf = KMeans(n_clusters=3) 表示類簇數(shù)為3,聚成3類數(shù)據(jù),clf即賦值為KMeans
y_pred = clf.fit_predict(X) 載入數(shù)據(jù)集X,并且將聚類的結果賦值給y_pred
"""
clf = KMeans(n_clusters=3)
y_pred = clf.fit_predict(X)
# 輸出聚類預測結果,20行數(shù)據(jù),每個y_pred對應X一行,聚成3類,類標為0、1、2
print(y_pred)

#可視化繪圖
import matplotlib.pyplot as plt
# 獲取第一列和第二列數(shù)據(jù) 使用for循環(huán)獲取 n[0]表示X第一列
x = [n[0] for n in X]
print(x)
y = [n[1] for n in X]
print(y)
# 繪制散點圖 參數(shù):x橫軸 y縱軸 c=y_pred聚類預測結果 marker類型 o表示圓點 *表示星型 x表示x
plt.scatter(x, y, c=y_pred, marker='o')
# 繪制標題
plt.title("Kmeans-Basketball Data")
# 繪制x軸和y軸坐標
plt.xlabel("assists_per_minute")
plt.ylabel("points_per_minute")
plt.legend([0,1,2])
# 顯示圖形
plt.show()

5分鐘帶你弄懂K-Means聚類

聚類與分類的區(qū)別

  • 分類:類別是已知的,通過對已知分類的數(shù)據(jù)進行訓練和學習,找到這些不同類的特征,再對未分類的數(shù)據(jù)進行分類。屬于監(jiān)督學習。
  • 聚類:事先不知道數(shù)據(jù)會分為幾類,通過聚類分析將數(shù)據(jù)聚合成幾個群體。聚類不需要對數(shù)據(jù)進行訓練和學習。屬于無監(jiān)督學習。

關于監(jiān)督學習和無監(jiān)督學習,這里給一個簡單的介紹:是否有監(jiān)督,就看輸入數(shù)據(jù)是否有標簽,輸入數(shù)據(jù)有標簽,則為有監(jiān)督學習,否則為無監(jiān)督學習。更詳盡的解釋會在后續(xù)博文更新,這里不細說。

k-means 聚類

聚類算法有很多種,K-Means 是聚類算法中的最常用的一種,算法最大的特點是簡單,好理解,運算速度快,但是只能應用于連續(xù)型的數(shù)據(jù),并且一定要在聚類前需要手工指定要分成幾類。

K-Means 聚類算法的大致意思就是“物以類聚,人以群分”:

  • 首先輸入 k 的值,即我們指定希望通過聚類得到 k 個分組;
  • 從數(shù)據(jù)集中隨機選取 k 個數(shù)據(jù)點作為初始大佬(質(zhì)心);
  • 對集合中每一個小弟,計算與每一個大佬的距離,離哪個大佬距離近,就跟定哪個大佬。
  • 這時每一個大佬手下都聚集了一票小弟,這時候召開選舉大會,每一群選出新的大佬(即通過算法選出新的質(zhì)心)。
  • 如果新大佬和老大佬之間的距離小于某一個設置的閾值(表示重新計算的質(zhì)心的位置變化不大,趨于穩(wěn)定,或者說收斂),可以認為我們進行的聚類已經(jīng)達到期望的結果,算法終止。
  • 如果新大佬和老大佬距離變化很大,需要迭代3~5步驟。

說了這么多,估計還是有點糊涂,下面舉個非常形象簡單的例子:

有6個點,從圖上看應該可以分成兩堆,前三個點一堆,后三個點另一堆。現(xiàn)在我手工地把 k-means 計算過程演示一下,同時檢驗是不是和預期一致:

1.設定 k 值為2

2.選擇初始大佬(就選 P1 和 P2)

3.計算小弟與大佬的距離:

從上圖可以看出,所有的小弟都離 P2 更近,所以次站隊的結果是:

A 組:P1

B 組:P2、P3、P4、P5、P6

4.召開選舉大會:

A 組沒什么可選的,大佬就是自己

B 組有5個人,需要重新選大佬,這里要注意選大佬的方法是每個人 X 坐標的平均值和 Y 坐標的平均值組成的新的點,為新大佬,也就是說這個大佬是“虛擬的”。因此,B 組選出新大哥的坐標為:P 哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)。

綜合兩組,新大哥為 P1(0,0),P哥(6.2,5.6),而P2-P6重新成為小弟。

5.再次計算小弟到大佬的距離:

這時可以看到P2、P3離P1更近,P4、P5、P6離P哥更近,所以第二次站隊的結果是:

A 組:P1、P2、P3

B 組:P4、P5、P6(虛擬大哥這時候消失)

6.第二屆選舉大會:

同樣的方法選出新的虛擬大佬:P哥1(1.33,1),P哥2(9,8.33),P1-P6都成為小弟。

7.第三次計算小弟到大佬的距離:

這時可以看到 P1、P2、P3 離 P哥1 更近,P4、P5、P6離 P哥2 更近,所以第二次站隊的結果是:

A 組:P1、P2、P3

B 組:P4、P5、P6

我們可以發(fā)現(xiàn),這次站隊的結果和上次沒有任何變化了,說明已經(jīng)收斂,聚類結束,聚類結果和我們最開始設想的結果完全一致。

K-Means 聚類 MATLAB 實現(xiàn)

關于 K-Means 的算法具體代碼,網(wǎng)上有各種版本,這里也不贅述了,下面結合 MATLAB 中的一些函數(shù)給出一個較為簡潔的版本:

X2 = zscore(X);   	 % zscore方法標準化數(shù)據(jù)  
Y2 = pdist(X2);      % 計算距離(默認歐式距離)
Z2 = linkage(Y2);  	 % 定義變量之間的連接,用指定的算法計算系統(tǒng)聚類樹
T = cluster(Z2,6);   % 創(chuàng)建聚類
H = dendrogram(Z2);  %作出系譜圖

最終聚類系譜圖如下所示:

當然,MATLAB 也提供了 kmeans() 函數(shù)可供直接聚類使用,詳情可參與其文檔。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論