教你做企业网站,门户网站建设的必要性,网站到期时间,如何用服务器ip地址做网站第7集#xff1a;聚类算法——发现数据中的隐藏模式
在机器学习中#xff0c;聚类#xff08;Clustering#xff09; 是一种无监督学习方法#xff0c;用于发现数据中的隐藏模式或分组。与分类任务不同#xff0c;聚类不需要标签#xff0c;而是根据数据的相似性将其划…第7集聚类算法——发现数据中的隐藏模式
在机器学习中聚类Clustering 是一种无监督学习方法用于发现数据中的隐藏模式或分组。与分类任务不同聚类不需要标签而是根据数据的相似性将其划分为不同的簇。今天我们将深入探讨 K-Means 聚类 的原理并通过实践部分使用 顾客消费行为数据 进行分组。 K-Means 聚类的原理
什么是 K-Means
K-Means 是一种基于距离的聚类算法其目标是将数据划分为 K 个簇使得每个样本点与其所属簇的中心质心的距离最小化。算法步骤如下
随机选择 K 个初始质心。将每个样本分配到最近的质心所在的簇。更新质心为当前簇内所有样本的均值。重复步骤 2 和 3直到质心不再变化或达到最大迭代次数。 图1K-Means 聚类过程 图片描述二维平面上展示了 K-Means 算法的迭代过程初始随机质心逐渐调整位置最终收敛到稳定状态。 如何选择最佳的 K 值肘部法则
选择合适的 K 值是 K-Means 聚类的关键问题之一。常用的 肘部法则Elbow Method 通过绘制簇内误差平方和SSE, Sum of Squared Errors随 K$ 值的变化曲线来确定最佳 K 值。当 SSE 下降速度明显减缓时对应的 K 值即为最佳值。
公式如下 SSE ∑ i 1 K ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 \text{SSE} \sum_{i1}^{K} \sum_{x \in C_i} ||x - \mu_i||^2 SSEi1∑Kx∈Ci∑∣∣x−μi∣∣2 其中 C i 是第 i 个簇。 C_i 是第 i 个簇。 Ci是第i个簇。 μ i 是第 i 个簇的质心。 \mu_i 是第 i 个簇的质心。 μi是第i个簇的质心。 图2肘部法则示意图 图片描述折线图展示了 SSE 随 K 值的变化随着 K 增加SSE 逐渐减小但在某个 K 值后下降趋于平缓形成“肘部”。图中 K 3 时形成“肘部”。 层次聚类与 DBSCAN 简介
1. 层次聚类
层次聚类是一种基于树形结构的聚类方法分为两种类型
凝聚式Agglomerative从单个样本开始逐步合并最相似的簇。分裂式Divisive从整个数据集开始逐步分裂成更小的簇。
优点无需指定 K 值缺点计算复杂度较高。
2. DBSCANDensity-Based Spatial Clustering of Applications with Noise
DBSCAN 是一种基于密度的聚类算法能够发现任意形状的簇并对噪声点具有鲁棒性。其核心思想是
核心点在某半径范围内有足够多的邻居点。边界点在核心点的邻域内但自身不是核心点。噪声点既不是核心点也不是边界点。
优点无需指定 K 值缺点对参数敏感。 聚类结果的可视化
聚类结果通常通过散点图进行可视化不同簇用不同颜色表示。对于高维数据可以使用降维技术如 PCA 或 t-SNE将其投影到二维或三维空间。 实践部分使用 K-Means 对顾客消费行为数据进行分组
数据集简介
我们使用一个模拟的顾客消费行为数据集包含以下特征
Annual Income年收入单位千美元。Spending Score消费评分范围 1-100越高表示消费能力越强。
目标是对顾客进行分组以便制定个性化的营销策略。
完整代码
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler# 加载数据
url https://raw.githubusercontent.com/DennisKimt/datasets/main/Mall_Customers.csv
data pd.read_csv(url)# 提取特征
X data[[Annual Income (k$), Spending Score (1-100)]]# 数据标准化
scaler StandardScaler()
X_scaled scaler.fit_transform(X)# 使用肘部法则选择最佳 K 值
sse []
K_range range(1, 11)
for k in K_range:kmeans KMeans(n_clustersk, random_state42)kmeans.fit(X_scaled)sse.append(kmeans.inertia_)# 绘制肘部法则图
plt.figure(figsize(8, 5))
plt.plot(K_range, sse, markero)
plt.title(Elbow Method for Optimal K, fontsize16)
plt.xlabel(Number of Clusters (K), fontsize12)
plt.ylabel(Sum of Squared Errors (SSE), fontsize12)
plt.grid()
plt.show()# 选择 K5 构建 K-Means 模型
kmeans KMeans(n_clusters5, random_state42)
clusters kmeans.fit_predict(X_scaled)# 可视化聚类结果
plt.figure(figsize(10, 6))
plt.scatter(X.iloc[:, 0], X.iloc[:, 1], cclusters, cmapviridis, s100, edgecolork)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s300, cred, labelCentroids, markerX)
plt.title(Customer Segmentation using K-Means, fontsize16)
plt.xlabel(Annual Income (k$), fontsize12)
plt.ylabel(Spending Score (1-100), fontsize12)
plt.legend()
plt.show()运行结果
肘部法则图 图3肘部法则图 图片描述折线图展示了 SSE 随 $ K $ 值的变化当 $ K5 $ 时曲线出现明显的“肘部”表明这是最佳的簇数。 聚类结果可视化 图4K-Means 聚类结果 图片描述二维散点图展示了顾客的年收入与消费评分分布不同簇用不同颜色表示红色叉号标记了各簇的质心位置。 总结
本文介绍了 K-Means 聚类的基本原理及其应用并通过实践部分展示了如何使用 K-Means 对顾客消费行为数据进行分组。希望这篇文章能帮助你更好地理解聚类算法 参考资料
Scikit-learn 文档: https://scikit-learn.org/stable/documentation.htmlMall Customers 数据集: https://github.com/stedy/Machine-Learning-with-R-datasets