共计 1779 个字符,预计需要花费 5 分钟才能阅读完成。
聚类算法核心概念与应用场景
聚类算法就像超市的商品分类员,它能把相似的数据自动归到同一组。实际业务中常见这些场景:

- 电商用户分群:根据购买行为划分高净值 / 普通用户
- 新闻话题归类:自动聚合相似主题的新闻报道
- 异常检测:识别信用卡交易中的离群点
新手常遇到的三大拦路虎:
1. 数据像一团乱麻不知从哪开始清洗
2. 调参时像盲人摸象找不到方向
3. 评估结果时陷入 ” 看起来不错 ” 的主观陷阱
实验环境准备与数据预处理
工欲善其事必先利其器,先准备好这些工具包:
# 基础工具三件套
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 算法全家桶
from sklearn.cluster import KMeans, DBSCAN
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score
数据预处理就像做菜前的食材处理,关键步骤:
- 处理缺失值:
- 数值型用均值填充
-
类别型用众数填充
-
特征标准化:
scaler = StandardScaler() scaled_data = scaler.fit_transform(raw_data) -
降维处理(当特征超过 10 个时):
from sklearn.decomposition import PCA pca = PCA(n_components=0.95) # 保留 95% 信息量 reduced_data = pca.fit_transform(scaled_data)
算法实现与调优
K-means 实战(适合球形分布数据)
# 肘部法则确定最佳 K 值
inertia = []
for k in range(2,10):
model = KMeans(n_clusters=k, random_state=42)
model.fit(reduced_data)
inertia.append(model.inertia_)
plt.plot(range(2,10), inertia, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()
DBSCAN 实战(适合不规则形状分布)
# 关键参数调试技巧
eps_values = np.linspace(0.1, 1.0, 10)
best_score = -1
for eps in eps_values:
dbscan = DBSCAN(eps=eps, min_samples=5)
labels = dbscan.fit_predict(reduced_data)
# 排除噪声点后计算轮廓系数
if len(set(labels)) > 1:
score = silhouette_score(reduced_data[labels!=-1], labels[labels!=-1])
if score > best_score:
best_score = score
best_eps = eps
结果评估与可视化
评估聚类效果的三板斧:
- 轮廓系数(- 1 到 1,越大越好)
- Calinski-Harabasz 指数(越大越好)
- 肉眼观察(降维到 2D/3D 观察分布)
# 可视化示例
from sklearn.manifold import TSNE
tsne = TSNE(n_components=2, perplexity=30)
vis_data = tsne.fit_transform(reduced_data)
plt.scatter(vis_data[:,0], vis_data[:,1], c=labels, cmap='viridis')
plt.colorbar()
plt.title('Cluster Visualization')
plt.show()
生产环境避坑指南
血泪经验总结:
- 数据标准化必须做:就像比较身高体重需要统一单位
- 特征工程比算法重要:垃圾进垃圾出(GIGO)
- 处理异常值的两种方式:
- 强硬派:直接删除
- 温和派:用 IsolationForest 检测后单独分析
总结与思考题
回顾本次实验,建议思考:
- 当数据量达到百万级时,K-means 和 DBSCAN 哪个更合适?为什么?
- 如何评估聚类结果在业务上的实际价值?
- 面对时间序列数据(如用户行为日志),聚类算法需要做哪些特殊处理?
(完整代码示例已上传 Github 仓库,文末可获取)
正文完
