一、聚類分析與K-means的核心價值
????????在無監督學習領域,聚類分析是探索數據內在結構的核心技術。?K-means算法因其簡潔高效成為最廣泛使用的聚類方法,在客戶分群、圖像壓縮、生物信息學等領域應用廣泛。其核心目標是將數據集劃分為K個簇,實現“簇內相似度高,簇間差異顯著”的理想狀態。接下來我們將深入解析這一經典算法的原理、實現與優化技巧。
二、K-means原理與數學本質
?算法工作流程?
K-means通過迭代優化實現聚類,其核心步驟為:
- ?初始化中心?:隨機選擇K個數據點作為初始質心(可優化)
- ?分配樣本?:計算每個點到質心的距離,分配到最近簇
- ?更新質心?:重新計算各簇樣本均值作為新質心
- ?迭代收斂?:重復2-3步直至質心變化小于閾值或達到最大迭代次數
?數學表示?
目標函數(SSE)是算法優化的核心:
其中:
- Ci??表示第i個簇
- μi??是該簇質心
- ∥x?μi?∥?為歐氏距離
?關鍵點?:K-means本質是通過迭代最小化SSE實現聚類。算法復雜度為O(n?K?t),其中n為樣本數,K為簇數,t為迭代次數。
?距離度量選擇?
雖然默認使用歐氏距離?但可根據數據類型替換為:
- 曼哈頓距離:
(適用于高維稀疏數據)
- 余弦相似度:
?(適用于文本向量)
三、API參數深度解析(sklearn.cluster.KMeans)
掌握API參數是模型效果的關鍵保障:
?參數? | 默認值 | 說明 | 調優建議 |
---|---|---|---|
n_clusters | 8 | 聚類簇數K | 通過肘部法則確定 |
init | 'k-means++' | 初始化方法 | 優先選'k-means++'避免局部最優 |
n_init | 10 | 不同初始化次數 | 增大值提升穩定性,但增加計算量 |
max_iter | 300 | 最大迭代次數 | 高維數據建議增加到500 |
tol | 1e-4 | 收斂閾值 | 值越小精度越高但可能不收斂 |
algorithm | 'auto' | 算法實現 | 大數據選'elkan'提升速度 |
?關鍵參數實踐?:
# 優化后的參數設置示例 from sklearn.cluster import KMeans model = KMeans(n_clusters=5, init='k-means++', n_init=20, max_iter=500,tol=1e-5,random_state=42 )
?屬性解析?
labels_
:樣本所屬簇標簽cluster_centers_
:質心坐標矩陣inertia_
:當前SSE值(核心評估指標)
四、實戰案例:酒聚類
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import metricsbeer = pd.read_table("data.txt",sep=' ',encoding='utf8',engine='python')
X=beer.iloc[:,1:]from sklearn.cluster import KMeans
scores=[]
K=[2,3,4,5,6,7,8,9]
for i in K:model = KMeans(n_clusters=i)model.fit(X)labels = model.labels_ #獲取分類之后的標簽score = metrics.silhouette_score(X,labels) #輪廓系數,可用來評價模型性能scores.append(score)best_K=K[np.argmax(scores)]
print('最佳K值',best_K)modle=KMeans(n_clusters=best_K)
modle.fit(X)
labels = modle.labels_
print('輪廓系數:',metrics.silhouette_score(X,labels))fig = plt.figure(figsize=(10, 8))
fig = plt.axes(projection="3d")# 繪制散點圖(顏色映射和大小漸變)
scatter = fig.scatter(xs=X.iloc[:,0],ys=X.iloc[:,1],zs=X.iloc[:,2],c=labels, # 按聚類結果著色# cmap='viridis', # 使用色圖映射alpha=0.8,s=50)# 設置標簽和標題
fig.set(xlabel='X Axis', ylabel='Y Axis', zlabel='Z Axis',title='3D Scatter Plot with Color Gradient')
plt.show()
五、模型評價:超越準確率的評估體系
無監督學習需依賴內部評價指標:
?指標? | 公式 | 評估目標 | 范圍 | 應用場景 |
---|---|---|---|---|
?輪廓系數? | max(a,b)b?a? | 樣本歸屬合理性 | [-1, 1] | 非凸簇評估 |
s_score = silhouette_score(X, labels) # 越接近1越好
print(f"輪廓系數: {s_score:.2f}")
?六?K值選擇策略
from sklearn.cluster import KMeans
scores=[]
K=[2,3,4,5,6,7,8,9]
for i in K:model = KMeans(n_clusters=i)model.fit(X)labels = model.labels_ #獲取分類之后的標簽score = metrics.silhouette_score(X,labels) #輪廓系數,可用來評價模型性能scores.append(score)best_K=K[np.argmax(scores)]
print('最佳K值',best_K)
給出幾個K值,循環帶入模型,保存輪廓系數,最后根據最優的輪廓系數找出最佳K值。
?????????????????????????????????????????????????????????????????