在機器學習中,K-means聚類是一種常用的無監督學習算法,用于將數據集劃分為K個簇。然而,選擇合適的K值是一個關鍵問題。手肘法(Elbow Method)是一種常用的方法,用于確定最佳的K值。本文將介紹如何使用Python通過手肘法實現K-means聚類。
手肘法的核心思想是通過計算不同K值下的聚類誤差平方和(SSE,Sum of Squared Errors),然后繪制K值與SSE的關系圖。隨著K值的增加,SSE會逐漸減小,但當K值增加到一定程度時,SSE的下降速度會顯著減緩,形成一個“手肘”形狀的拐點。這個拐點對應的K值通常被認為是最佳的K值。
首先,我們需要導入一些必要的Python庫,包括numpy
、matplotlib
和sklearn
。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
為了演示手肘法,我們可以使用make_blobs
函數生成一個模擬數據集。
# 生成模擬數據
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)
接下來,我們計算不同K值下的SSE,并繪制手肘圖。
# 計算SSE
sse = []
K_range = range(1, 11)
for k in K_range:
kmeans = KMeans(n_clusters=k, random_state=0)
kmeans.fit(X)
sse.append(kmeans.inertia_) # inertia_ 是SSE的別名
# 繪制手肘圖
plt.figure(figsize=(8, 5))
plt.plot(K_range, sse, 'bo-', markersize=8)
plt.xlabel('Number of clusters (K)')
plt.ylabel('Sum of Squared Errors (SSE)')
plt.title('Elbow Method For Optimal K')
plt.show()
通過觀察手肘圖,我們可以找到一個明顯的拐點。這個拐點對應的K值就是最佳的K值。例如,在上面的圖中,拐點可能出現在K=4附近,因此我們可以選擇K=4作為最佳的K值。
最后,我們可以使用最佳的K值進行K-means聚類。
# 使用最佳K值進行聚類
best_k = 4
kmeans = KMeans(n_clusters=best_k, random_state=0)
kmeans.fit(X)
# 可視化聚類結果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_, cmap='viridis', s=50)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], c='red', marker='x', s=200)
plt.title(f'K-means Clustering with K={best_k}')
plt.show()
手肘法是一種簡單而有效的方法,用于確定K-means聚類中的最佳K值。通過計算不同K值下的SSE并繪制手肘圖,我們可以直觀地找到最佳的K值。在實際應用中,手肘法可以幫助我們更好地理解數據集的聚類結構,從而提高聚類效果。
希望本文對你理解如何使用Python通過手肘法實現K-means聚類有所幫助!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。