目錄
一.k均值簡介
二.應用簡介
三.算法
四.選擇合適的K
五.具體實例
一.k均值簡介
二.應用簡介
K均值聚類算法用於查找未在數據中明確標記的組。這可用於判別存在哪些類別特征或用於識別復雜數據集中的未知組。一旦運行算法並定義了組,就可以輕松地將任何新數據分配給正確的組。
這是一種多功能算法,可用於任何類型的分組。具體的一些示例是:
行為細分:
- 按購買歷史記錄細分
- 按應用程序,網站或平台上的活動進行細分
- 根據興趣定義角色
- 根據活動監控創建配置文件
庫存分類:
- 按銷售活動分組庫存
- 按制造指標對庫存進行分組
分類傳感器測量:
- 檢測運動傳感器中的活動類型
- 分組圖像
- 單獨的音頻
- 確定健康監測中的群體
檢測機器人或異常:
- 從機器人中分離出有效的活動組
- 將有效活動分組以清除異常值檢測
此外,監視跟蹤數據點是否隨時間在組之間切換可用於檢測數據中的有意義的變化。
三.算法
Κ-means聚類算法使用迭代細化來產生最終結果。 算法輸入是簇Κ的數量和數據集。 算法從Κ質心的初始估計開始,可以隨機生成或從數據集中隨機選擇。 然后算法在兩個步驟之間迭代:
1.數據分配步驟:
每個質心定義一個簇。 在此步驟中,基於平方歐幾里德距離將每個數據點分配到其最近的質心。 更正式地說,如果ci是集合C中的質心集合,那么每個數據點x都被分配給一個基於集群的集群。
其中,dist(·)是標准的歐幾里德距離
2.質心更新步驟:
在此步驟中,重新計算質心。 這是通過獲取分配給該質心簇的所有數據點的平均值來完成的。
該算法在步驟1和步驟2之間迭代,直到滿足停止標准(即沒有數據點改變,或簇距離的總和最小化,或者達到一些最大迭代次數)。
保證該算法收斂於結果。 結果可以是局部最優(不一定是最佳可能結果),這意味着用隨機化起始質心評估算法需要次運行可以給出更好的結果。
四.選擇合適的K
存在許多用於驗證K的其他技術,包括交叉驗證,信息標准,信息理論跳躍方法,輪廓方法和G均值算法。此外,監視跨組的數據點分布可以深入了解算法如何分割每個K的數據。

五.具體實例
下面進行實例聚類。考慮兩個駕駛員功能:平均每天行駛距離以及駕駛員超過限速的平均時間百分比> 5英里/小時。 通常,只要數據樣本的數量遠大於特征的數量,該算法就可以用於任何數量的特征。數據:https://pan.baidu.com/s/1yT3870M8whYlMiQFC9Qq7Q
密碼:wtcm
1.導入數據並可視化
import numpy as np import pandas as pd import matplotlib.pyplot as plt df=pd.read_table('F:/wd.jupyter/datasets/km_data.txt') X=np.array(df.iloc[:,1:]) plt.scatter(X[:,0],X[:,1])
數據實例:
下圖顯示了4,000個樣本,其中x軸為距離特征,y軸為超速特征。
2.選擇合適的K進行算法迭代
首先,選擇k=2,利用 scikit-learn進行計算:
from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=2).fit(X)
kmeans.labels_
. 可以用來查看類別。
3.可視化結果
利用kmeans.cluster_centers_來查看兩個中心點:
中心點1:(50.04763438, 8.82875 )
中心點2: (180.017075,18.29)
查看聚類結果:
y_pred =kmeans.fit_predict(X) plt.scatter(X[:,0], X[:,1],c=y_pred) plt.show()
4.重新選擇k進行聚類
選擇k=4重復上述步驟
kmeans2 = KMeans(n_clusters=4).fit(X) y_pred2 =kmeans2.fit_predict(X) plt.scatter(X[:,0], X[:,1],c=y_pred2) plt.show()
當然,存在許多替代聚類算法,包括DBScan,譜聚類和使用高斯混合模型等等。