iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
AI/ ML & Data

Let's Go To The AI Party!系列 第 27

Day26-集群分析

  • 分享至 

  • xImage
  •  

集群分析(K-means Clustering)

一種非監督式機器學習算法,將數據集劃分為預定義數量集群。目標是將彼此相似數據點歸為一類,與其他集群中數據點不同

K-means聚類優缺點

優點

  • 簡單易懂,實現方便
  • 計算效率高,適合大規模數據集
  • 能夠發現球形簇

缺點

  • 需要預先指定簇的數量K
  • 對初始簇中心的選擇敏感
  • 只能發現凸形簇
  • 對噪聲和異常值敏感

K-means聚類應用

客戶分群 將客戶分為不同群體,以便進行個性化營銷
圖像分割 將圖像分割成不同區域
聚類分析 發現數據集中內在結構

https://ithelp.ithome.com.tw/upload/images/20240819/20163257ncyMkA7ulO.png
圖片來源:(https://www.researchgate.net/figure/K-means-clustering-process-flowchart_fig7_271305580)
https://ithelp.ithome.com.tw/upload/images/20240819/20163257MBMpPx18P7.png
圖片來源:K Means Clustering in Python | Step-by-Step Tutorials for Clustering in Data Analysis

K-means聚類公式

數學公式

通常使用歐式距離來計算數據點與簇中心的距離

歐式距離

(x, c) = sqrt(Σ(xi - ci)^2)

對於兩個數據點 x 和 y,它們之間的歐式距離為:
distance(x, y) = sqrt(Σ(xi - yi)^2)

x 數據點
c 簇中心
xi 數據點第 i 個特徵
ci 簇中心第 i 個特徵

簇中心更新

ci = (1/ni) * Σ(x)
μ_i = (1/n_i) * Σ(x_j)

ci 簇中心
ni 簇中數據點的數量
x 簇中所有數據點
n_i 屬於簇 i 數據點數量
x_j 屬於簇 i 的數據點

K-means程式碼(Python-Scikit-learn)

from sklearn.cluster import KMeans
import numpy as np

# 隨機生成一些數據
X = np.random.rand(100, 2)

# 創建 KMeans 模型,指定簇的數量
kmeans = KMeans(n_clusters=3, random_state=0)

# 訓練模型
kmeans.fit(X)

# 預測每個數據點屬於哪個簇
y_pred = kmeans.predict(X)

# 獲取簇中心
centers = kmeans.cluster_centers_

如何選擇最佳K值?

肘部法(Elbow Method):繪製不同 K 值下的誤差平方和(SSE),選擇SSE變化率下降最快的K 值
輪廓係數 (Silhouette Coefficient):計算每個數據點的輪廓係數,選擇輪廓係數最高的K值
Gap Statistic: 比較數據集的聚類結果與隨機數據的聚類結果,選擇差異最大的K值

總結

K-means 聚類是一種強大聚類算法,但也有局限性在實際應用中,需要根據數據特點和具體需求選擇合適聚類算法


上一篇
Day25-GBDT
下一篇
Day27-混合模型​​
系列文
Let's Go To The AI Party!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言