sklearn KMeans聚類算法(總結)


基本原理

Kmeans是無監督學習的代表,沒有所謂的Y。主要目的是分類,分類的依據就是樣本之間的距離。比如要分為K類。步驟是:

  1. 隨機選取K個點。
  2. 計算每個點到K個質心的距離,分成K個簇。
  3. 計算K個簇樣本的平均值作新的質心
  4. 循環2、3
  5. 位置不變,距離完成

距離

Kmeans的基本原理是計算距離。一般有三種距離可選:

  • 歐氏距離

    \[d(x,u)=\sqrt{\sum_{i=1}^n(x_i-\mu_i)^2} \]

  • 曼哈頓距離

    \[d(x,u)=\sum_{i=1}^n(|x_i-\mu|) \]

  • 余弦距離

    \[cos\theta=\frac{\sum_{i=1}^n(x_i*\mu)}{\sqrt{\sum_i^n(x_i)^2}*\sqrt{\sum_1^n(\mu)^2}} \]

inertia

每個簇內到其質心的距離相加,叫inertia。各個簇的inertia相加的和越小,即簇內越相似。(但是k越大inertia越小,追求k越大對應用無益處)

代碼

模擬數據:

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
X, y = make_blobs(n_samples=500, # 500個樣本
                 n_features=2, # 每個樣本2個特征
                 centers=4, # 4個中心
                 random_state=1 #控制隨機性
                 )

畫出圖像:

color = ['red', 'pink','orange','gray']
fig, axi1=plt.subplots(1)
for i in range(4):
    axi1.scatter(X[y==i, 0], X[y==i,1],
               marker='o',
               s=8,
               c=color[i]
               )
plt.show()

使用KMeans類建模:

from sklearn.cluster import KMeans
n_clusters=3
cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X)

也可先用fit, 再用predict,但是可能數據不准確。用於數據量較大時。

此時就可以查看其屬性了:質心、inertia.

centroid=cluster.cluster_centers_
centroid # 查看質心

查看inertia:

inertia=cluster.inertia_
inertia

畫出所在位置。

color=['red','pink','orange','gray']
fig, axi1=plt.subplots(1)
for i in range(n_clusters):
    axi1.scatter(X[y_pred==i, 0], X[y_pred==i, 1],
               marker='o',
               s=8,
               c=color[i])
axi1.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black')


免責聲明!

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



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