AI時代系列(1) 機器學習三部曲: 🔹 第一部:《機器學習 —— AI 智慧的啟航》
41/100 第五週:非監督學習
41. K-Means 聚類 🎯 把資料分成 K 組,適用於客戶分群與圖像壓縮!
K-Means 聚類 🎯
核心概念:沒有標籤,AI 自己找出資料的結構與分群規律!
________________________________________
✅ 什麼是 K-Means 聚類?
K-Means 是最經典、最常用的非監督學習演算法之一。
目標是把資料自動分成 K 個群組(Cluster),讓同一群內的資料彼此相似,不同群之間差異大。
📌 關鍵應用場景:
• 客戶分群(Customer Segmentation)
• 圖像壓縮(Image Compression)
• 市場分析(Market Segmentation)
• 社群偵測(Social Network Analysis)
________________________________________
✅ K-Means 演算法流程(核心步驟)
1️⃣ 決定 K 值(分幾群)
2️⃣ 隨機選出 K 個初始中心點(Centroids)
3️⃣ 分群:每筆資料指派到最近的中心點形成群組
4️⃣ 更新:重新計算每一群的中心點
5️⃣ 重複步驟 3 和 4,直到中心點不再改變(收斂)
________________________________________
✅ 數學公式概念
目標是最小化所有點到其所屬中心點的距離平方和(WCSS:Within-Cluster Sum of Square):
✨ 白話說明:
K-means 就是在反覆調整每一個群中心的位置,讓:
每個資料點離自己的「中心點」越近越好(平方距離越小)
最後所有這些距離的總和是最小的
________________________________________
✅ K-Means 優點與缺點
✅ 優點
計算速度快,容易理解與實作
適合大量數據(Big Data)
適合資料型態明確的分群
⚠ 缺點
對初始中心點敏感,可能陷入局部最佳解
需事先決定 K 值
對離群值(Outliers)敏感
________________________________________
✅ Python 範例實作
python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
# 產生模擬數據
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.6, random_state=42)
# 建立 K-Means 模型(假設分 4 群)
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
# 視覺化結果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=200, c='red', marker='X')
plt.title("K-Means 聚類結果")
plt.show()
________________________________________
✅ K 值怎麼選?(Elbow Method)
• 計算不同 K 值下的 WCSS
• 畫出「肘部圖(Elbow Curve)」
• 找到「彎曲點」作為最佳 K 值(平衡分群效果與模型簡單度)
________________________________________
✅ 應用案例延伸
• 銀行客戶分群 → 找出高價值客群
• 電子商務推薦 → 相似客戶推相似商品
• 圖像壓縮 → 用 K 個顏色代表整張圖,降低檔案大小
• 市場區隔策略設計
________________________________________
✅ 總結重點:
💡 K-Means 聚類 = 自動分群好幫手,讓 AI 幫你找到隱藏的群體結構!
📌 適合用於 客戶分群、圖像壓縮、行為分析 等場景
📌 重點在選對 K 值,避免過度分群或分群不足
________________________________________
如果你想知道:
✅ 如何評估 K-Means 分群效果(Silhouette Score)
✅ Mini-Batch K-Means 處理大數據集範例
✅ K-Means++ 初始值改進方法
都可以告訴我,我完整補上!