资源软件动作暨昝绳鹤锁多好 /494b36Tkwj😕
链接:https://pan.quark.cn/s/43159509c536
「微信被删好友检测工具」筷莱坌教狴犴狾夺郝 链接:https://pan.quark.cn/s/43159509c536
链接:https://pan.quark.cn/s/4598337f6b3e
「【美剧系列】」链接:https://pan.quark.cn/s/663e3ca79519

复制群口令 !0b7236TlXn!😕
将加入群聊免费医院分享

引言:当数据没有“标签”时,我们能做什么?

假设你是一家电商公司的数据分析师,面对海量用户行为数据却无明确分类标签:

  • 任务:将用户划分为不同群体,实现精准营销
  • 挑战
    • 用户特征复杂(浏览时长、购买频率、品类偏好等)
    • 需自动发现隐藏模式,而非依赖人工定义规则
  • 需求:算法需高效处理百万级数据,且结果可解释

这正是无监督学习的核心价值! 本文将深入解析K均值聚类算法,教你从无标签数据中挖掘潜在规律。


一、无监督学习与聚类基础

1.1 无监督学习 vs 监督学习

维度 监督学习 无监督学习
数据要求 需要带标签数据 仅需特征数据
目标 预测已知标签 发现数据内在结构
典型任务 分类、回归 聚类、降维

1.2 聚类的核心目标

  • 将数据划分为同质子集,满足:
    • 簇内相似性高(同一簇样本彼此接近)
    • 簇间差异性大(不同簇样本明显分离)

二、K均值算法原理与数学推导

2.1 算法步骤图解

  1. 初始化质心:随机选择K个点作为初始簇中心
  2. 分配样本:将每个点分配到最近的质心所属簇
  3. 更新质心:重新计算每个簇的均值作为新质心
  4. 迭代优化:重复2-3步直至质心稳定或达到最大迭代次数

可视化过程

[初始随机质心] → [样本分配] → [质心更新] → [重新分配] → ... → [收敛]  

2.2 数学形式化

  • 目标函数(畸变函数,SSE):
    SSE = Σ_{i=1}^K Σ_{x∈C_i} ||x - μ_i||²  
    
    • μ_i:第i个簇的质心
    • C_i:第i个簇的样本集合
  • 优化目标:最小化SSE

三、代码实战:从二维数据到图像压缩

3.1 基础聚类实现

import numpy as np  
import matplotlib.pyplot as plt  
from sklearn.cluster import KMeans  

# 生成合成数据  
X, y_true = make_blobs(n_samples=500, centers=3, random_state=42)  

# 训练K均值模型  
kmeans = KMeans(n_clusters=3, init='k-means++', n_init=10)  
kmeans.fit(X)  
labels = kmeans.labels_  
centers = kmeans.cluster_centers_  

# 可视化结果  
plt.scatter(X[:,0], X[:,1], c=labels, cmap='viridis', s=20)  
plt.scatter(centers[:,0], centers[:,1], c='red', s=200, alpha=0.8, marker='X')  
plt.title("K均值聚类结果")  
plt.show()  

3.2 图像颜色压缩应用

from sklearn.datasets import load_sample_image  
china = load_sample_image("china.jpg")  

# 预处理:将图像转换为二维数组  
X = china.reshape(-1, 3) / 255.0  

# 使用K均值压缩颜色  
kmeans = KMeans(n_clusters=16)  
kmeans.fit(X)  
X_compressed = kmeans.cluster_centers_[kmeans.labels_]  
X_compressed = X_compressed.reshape(china.shape)  

# 对比原图与压缩图  
plt.figure(figsize=(12,6))  
plt.subplot(121).imshow(china).set_title("原图(16万色)")  
plt.subplot(122).imshow(X_compressed).set_title("压缩图(16色)")  
plt.show()  

四、聚类质量评估:科学衡量“好坏”

4.1 肘部法则(Elbow Method)

  • 原理:SSE随K增大而下降,选择拐点对应的K值
  • 代码实现
sse = []  
K_range = range(1, 10)  
for k in K_range:  
    kmeans = KMeans(n_clusters=k).fit(X)  
    sse.append(kmeans.inertia_)  

plt.plot(K_range, sse, 'bo-')  
plt.xlabel("K值")  
plt.ylabel("SSE")  
plt.title("肘部法则选择最佳K值")  
plt.show()  

4.2 轮廓系数(Silhouette Score)

  • 定义:衡量样本与同簇/异簇的相似度,范围[-1,1]
  • 公式
    s(i) = (b(i) - a(i)) / max(a(i), b(i))  
    
    • a(i):样本i到同簇其他点的平均距离
    • b(i):样本i到最近异簇的平均距离

代码计算

from sklearn.metrics import silhouette_score  

scores = []  
for k in range(2, 10):  
    labels = KMeans(n_clusters=k).fit_predict(X)  
    scores.append(silhouette_score(X, labels))  

plt.plot(range(2,10), scores, 'ro-')  
plt.xlabel("K值")  
plt.ylabel("轮廓系数")  
plt.title("轮廓系数评估聚类质量")  
plt.show()  

五、K均值的优化策略与局限

5.1 常见问题与解决方案

问题 解决方案
初始质心敏感 使用k-means++初始化
局部最优解 多次随机初始化取最优结果
高维数据效果差 先降维(如PCA)再聚类
非球形簇失效 改用DBSCAN或谱聚类

5.2 算法优缺点总结

优势 局限
简单高效,适合大规模数据 需预先指定K值
结果可解释性强 对异常值敏感
易于扩展到分布式计算 只能发现球形簇

六、实战案例:客户价值分群

6.1 数据预处理

import pandas as pd  
from sklearn.preprocessing import StandardScaler  

# 加载零售数据(用户ID、消费频率、客单价、最近购买间隔)  
data = pd.read_csv("customer_data.csv")  
X = data[['frequency', 'amount', 'recency']]  

# 标准化与异常值处理  
X = StandardScaler().fit_transform(X)  
X = X[(np.abs(X) < 3).all(axis=1)]  # 剔除3σ外的异常值  

6.2 聚类分析与业务解读

kmeans = KMeans(n_clusters=4)  
labels = kmeans.fit_predict(X)  

# 分析簇特征  
cluster_profile = pd.DataFrame(X, columns=['frequency', 'amount', 'recency'])  
cluster_profile['cluster'] = labels  
print(cluster_profile.groupby('cluster').mean())  

"""  
         frequency    amount   recency  
cluster                                
0        1.22      0.95     -1.32   → 高价值活跃用户  
1       -0.83     -0.72      0.21   → 低频低价值用户  
2        0.31     -0.11     -0.98   → 中频唤醒用户  
3       -1.02      1.85      1.09   → 高客单价沉睡用户  
"""  

七、总结与进阶方向

7.1 核心要点回顾

  1. K均值通过迭代优化质心实现数据划分,适合处理球形簇
  2. 肘部法则与轮廓系数是评估聚类效果的关键工具
  3. 业务场景中需结合领域知识解读簇含义

7.2 延伸学习建议

  1. 层次聚类:探索数据分层结构(AGNES算法)
  2. 密度聚类:DBSCAN处理任意形状簇
  3. 深度聚类:结合自编码器与K均值
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐