一 概述
- 聚類分析目的
- 將大量數據集中具有“相似”特征的數據點或樣本划分為一個類別
- 常見應用場景
- 在沒有做先驗經驗的背景下做的探索性分析
- 樣本量較大情況下的數據預處理工作
- 將數值類的特征分成幾個類別
- 聚類分析能解決的問題包括
- 數據集可以分為幾類
- 每個類別有多少樣本量
- 不同類別中各個變量的強弱關系如何
- 不同類別的典型特征是什么
- k均值聚類算法 KMeans
- 注意事項
- 需要處理異常值
- 如果建模的特征中,量綱差距比較大,需要做歸一化/標准化
- 創建KMeans對象 建模
- n_cluster 聚類個數
- init='k-means++' 在選點的時候,找距離初始點比較遠的點
- random_state 隨機種子數
- kmeans.inertia_ 簇內誤差平方和
- 輪廓系數 metrics.silhouette_score()
- kmeans_model.cluster_centers_ 聚類中心點
- kmeans_model.labels_ 聚類之后的標簽
二 案例
1 數據准備
import pandas as pd df = pd.read_csv('data.csv') # 使用最后兩列作為分群依據 x = df.iloc[:,3:].values

2 創建 KMeans 模型,進行聚類【核心代碼】
# 導包 from sklearn.cluster import KMeans # 模型創建 kmeans_model = KMeans(n_clusters=5, init='k-means++', random_state= 11) # 進行聚類處理 y_kmeans = kmeans_model.fit_predict(x)

此時已經將數據 分成了5類,將標簽加入數據中

3 聚類結果可視化
# 導入可視化工具包 import matplotlib.pyplot as plt %matplotlib inline # 顏色和標簽列表 colors_list = ['red', 'blue', 'green','yellow','pink'] labels_list = ['Traditional','Normal','TA','Standard','Youth'] # 需要將DataFrame轉成ndarray,才能進行 x[y_kmeans==i,0] x = x.values for i in range(5): plt.scatter(x[y_kmeans==i,0], x[y_kmeans== i,1], s=100,c=colors_list[i],label=labels_list[i]) # 聚類中心點 plt.scatter(kmeans_model.cluster_centers_[:,0],kmeans_model.cluster_centers_[:,1], s=300,c='black',label='Centroids') plt.legend() plt.xlabel('Annual Income (k$)') plt.ylabel('Spending Score (1-100)') plt.show()

4 評估聚類個數
# 用於盛放簇內誤差平方和的列表 distortion = [] for i in range(1,11): kmeans = KMeans(n_clusters=i,init='k-means++', random_state=11) kmeans.fit(x) distortion.append(kmeans.inertia_) plt.plot(range(1,11), distortion) plt.title('The Elbow Method') plt.xlabel('Number of cluster') plt.ylabel('Distortion') plt.show()

完成辣!
附幾個變量說明,便於復習

========================

========================

本文僅用於學習
