k均值聚類


目錄

一.k均值簡介

二.應用簡介

三.算法

四.選擇合適的K

五.具體實例


 

 
 

一.k均值簡介

  K均值聚類是一種無監督學習,對未標記的數據(即沒有定義類別或組的數據)進行分類。 該算法的目標是在數據中找到由變量K標記的組。該算法迭代地工作基於所提供的特征,將每個數據點分配給K個組中的一個。 基於特征相似性對數據點進行聚類。 K均值聚類算法的結果是:
  1.K簇的質心,可用於標記新數據
  2.訓練數據的標簽(每個數據點分配給一個集群)
  

二.應用簡介

  K均值聚類算法用於查找未在數據中明確標記的組。這可用於判別存在哪些類別特征或用於識別復雜數據集中的未知組。一旦運行算法並定義了組,就可以輕松地將任何新數據分配給正確的組。

  這是一種多功能算法,可用於任何類型的分組。具體的一些示例是:

  行為細分:

  • 按購買歷史記錄細分
  • 按應用程序,網站或平台上的活動進行細分
  • 根據興趣定義角色
  • 根據活動監控創建配置文件

  庫存分類:

  • 按銷售活動分組庫存
  • 按制造指標對庫存進行分組

  分類傳感器測量:

  • 檢測運動傳感器中的活動類型
  • 分組圖像
  • 單獨的音頻
  • 確定健康監測中的群體

  檢測機器人或異常:

  • 從機器人中分離出有效的活動組
  • 將有效活動分組以清除異常值檢測

  此外,監視跟蹤數據點是否隨時間在組之間切換可用於檢測數據中的有意義的變化。

三.算法

  Κ-means聚類算法使用迭代細化來產生最終結果。 算法輸入是簇Κ的數量和數據集。 算法從Κ質心的初始估計開始,可以隨機生成或從數據集中隨機選擇。 然后算法在兩個步驟之間迭代:

  1.數據分配步驟:

  每個質心定義一個簇。 在此步驟中,基於平方歐幾里德距離將每個數據點分配到其最近的質心。 更正式地說,如果ci是集合C中的質心集合,那么每個數據點x都被分配給一個基於集群的集群。

  其中,dist(·)是標准的歐幾里德距離

  2.質心更新步驟:

  在此步驟中,重新計算質心。 這是通過獲取分配給該質心簇的所有數據點的平均值來完成的。

  

  該算法在步驟1和步驟2之間迭代,直到滿足停止標准(即沒有數據點改變,或簇距離的總和最小化,或者達到一些最大迭代次數)。

  保證該算法收斂於結果。 結果可以是局部最優(不一定是最佳可能結果),這意味着用隨機化起始質心評估算法需要次運行可以給出更好的結果。

四.選擇合適的K

 

  該算法找到特定的K個簇和數據集標簽。為了找到數據中的簇數,需要針對一系列K值運行K均值聚類算法並比較結果通常,沒有用於確定K的精確值的方法,但是可以使用以下技術獲得准確的估計:
  通常用於比較不同K值的結果的度量是我方法是數據點與其聚類質心之間的平均距離。由於增加簇的數量將總是減少到數據點的距離,因此當K與數據點的數量相同時,增加K將總是減小該度量,達到零。因此,該指標不能用作唯一目標。相反,繪制作為K的函數的到質心的平均距離,並且可以使用減小率急劇變化的“肘點”來粗略地確定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,譜聚類和使用高斯混合模型等等。

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM