數據聚類在python中常用k-means算法實現,其步驟包括:1.數據準備需標準化處理并清理缺失值;2.使用sklearn.cluster.kmeans進行聚類,設置n_clusters和random_state以獲得穩定結果;3.通過肘部法確定最佳聚類數,依據inertia值繪制曲線選擇“肘部”點;4.分析聚類結果,結合分組統計和可視化理解類別特征。需要注意的是,k-means對異常值敏感且假設簇為凸形,復雜結構可嘗試其他算法。
python進行數據聚類其實挺常見的,尤其是用K-means算法。它屬于無監督學習的一種方法,適合用來發現數據中的自然分組。如果你有數據但不知道怎么分類,K-means是個不錯的起點。
數據準備是關鍵
在做聚類之前,首先要確保你的數據是干凈的、適合分析的。通常我們會先對數據進行標準化處理,因為K-means對量綱敏感。比如身高和體重的數據單位不同,直接跑模型可能會出問題。
常用的方法是使用StandardScaler來做標準化:
立即學習“Python免費學習筆記(深入)”;
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_data = scaler.fit_transform(data)
另外,缺失值要提前處理好,可以用刪除或者填充的方式。如果原始數據里有很多噪聲,也可以考慮先做一些可視化或異常值檢測,避免影響聚類結果。
用KMeans實現聚類很簡單
Python中最方便的是用sklearn.cluster.KMeans這個模塊。你只需要指定你要分成幾類(n_clusters),然后fit數據就行。
舉個簡單的例子:
from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=3) kmeans.fit(scaled_data) labels = kmeans.predict(scaled_data)
這段代碼會把數據分成3類,并返回每個樣本所屬的類別標簽。你可以把這些標簽加到DataFrame里一起看。
不過要注意幾點:
- 初始中心點是隨機選的,所以最好設置random_state保證結果可重復。
- 可以通過inertia_屬性查看誤差平方和,數值越小說明聚得越緊。
如何確定最佳聚類數?
這是很多人容易卡住的地方。K-means需要你提前設定聚類數,但現實中這個數往往不明確。常用的判斷方法叫“肘部法”(Elbow Method)。
做法是:嘗試不同的n_clusters值,計算每個情況下的inertia,畫圖觀察變化趨勢。
import matplotlib.pyplot as plt inertias = [] for i in range(1, 11): kmeans = KMeans(n_clusters=i, random_state=42) kmeans.fit(scaled_data) inertias.append(kmeans.inertia_) plt.plot(range(1,11), inertias, marker='o') plt.xlabel('Number of clusters') plt.ylabel('Inertia') plt.show()
看到曲線明顯變緩的那個點,就是所謂的“肘部”,可以作為參考值。當然,實際中也要結合業務背景來判斷。
聚類結果怎么用?
得到標簽之后,下一步是理解和解釋這些類別。你可以按標簽分組統計各維度的均值、分布,看看每一類有什么特征。
例如:
df['cluster'] = labels df.groupby('cluster').mean()
這樣就能看出每類在各個指標上的差異。如果數據是二維或三維的,還可以用散點圖或3D圖可視化聚類結果。
此外,K-means也有局限性,比如對異常值敏感、假設簇是凸形的等。如果數據結構復雜,可以試試DBSCAN、層次聚類等其他方法。
基本上就這些步驟了。看起來不難,但調參和理解數據才是關鍵。