进阶 #ml#clustering#unsupervised

聚类(k-Means, DBSCAN)

聚类把数据分成几组——"物以类聚"。k-Means 指定组数迭代优化,DBSCAN 按密度聚类,自动发现任意形状的簇

🧩 没有标签——但能看出”哪些是一伙的”

前面的问题都有”标签”——垃圾邮件标记了”是/否”、房价标签了实际价格。这叫监督学习

但如果数据没有标签——给你 1000 个用户的购买记录,没有说”哪些用户是一类”——你能自己找出群组吗?

聚类(Clustering) 就是无监督学习中最典型的任务——让数据自己”物以类聚”。


🎯 k-Means——最常用的聚类算法

思路:把数据分成 k 个组,每个组有一个”中心点”。

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3)  # 分成 3 组
kmeans.fit(X)                   # 自动找出 3 个中心
labels = kmeans.labels_         # 每个数据属于哪个组
centers = kmeans.cluster_centers_  # 3 个中心的位置

算法步骤

1. 随机选 k 个点作为初始"中心"
2. 把每个数据点分配给最近的中心
3. 更新中心 = 每组所有点的平均位置
4. 重复 2-3 步直到中心不再变化

选择 k:用”肘部法则”——画 k vs 每个点到其中心距离的图,找”拐点”。


🏔️ DBSCAN——发现任意形状的簇

k-Means 假设簇是”球形”的,且所有簇大小相近——但现实数据不这样。

DBSCAN 按密度聚类——在”密集”的区域画簇,“稀疏”的区域视为噪声。

DBSCAN 的参数:
- eps:两个点距离多远算"邻居"
- min_samples:一个区域至少有多少点才算"密集"

优点:不需要指定 k、能发现任意形状的簇、能识别噪声点
缺点:对 eps 参数敏感

📝 小结

算法是否需要 k簇形状噪声处理
k-Means✅ 要指定球形❌ 不能
DBSCAN❌ 自动发现任意形状✅ 能识别噪声

为什么先学这个? 聚类是高维数据的探索方法。另一个重要的无监督方法——主成分分析(PCA)——降维。