首页 > 其他分享 >【机器学习】机器学习的基本分类-无监督学习-K-Means聚类

【机器学习】机器学习的基本分类-无监督学习-K-Means聚类

时间:2024-12-09 10:31:25浏览次数:10  
标签:plt 机器 Means kmeans 学习 聚类 质心 centers

K-Means 是一种基于划分的无监督学习算法,用于数据聚类任务,它通过迭代优化将数据分组为 k 个互斥的簇,使得每个簇内数据点的相似性最大化,而簇间的相似性最小化。它通过最小化簇内样本点到簇中心的距离平方和(即误差平方和,SSE)来完成聚类任务。


1. 算法原理

目标函数

K-Means 的目标是最小化以下目标函数:

J = \sum_{i=1}^k \sum_{x \in C_i} \|x - \mu_i\|^2

  • k:簇的数量。
  • C_i:第 i 个簇的集合。
  • \mu_i:第 i 个簇的中心(质心)。
  • \|x - \mu_i\|:样本点 x 到质心 \mu_i 的欧几里得距离。
步骤
  1. 初始化:随机选择 k 个初始质心。
  2. 分配样本点到最近的质心:将每个样本点分配到最近的簇中心,形成 k 个簇。
  3. 更新质心:计算每个簇中所有样本点的均值,作为新的簇中心。
  4. 迭代:重复步骤 2 和 3,直到簇中心不再发生显著变化或达到预设迭代次数。

 2. 特点

优点
  1. 简单高效:算法容易理解和实现,适合中小型数据集。
  2. 快速收敛:在大多数情况下,K-Means 收敛速度较快。
缺点
  1. 需要指定 k:聚类数 k 需要预先指定,可能难以确定。
  2. 易受初始点影响:初始质心的选择可能导致不同的聚类结果。
  3. 对异常值敏感:异常点可能显著影响簇中心的位置。
  4. 仅适用于凸簇:不能有效处理非凸形状的簇。

3. 改进方法

  1. K-Means++ 初始化:通过优化初始质心选择,减少对初始点的敏感性。
  • 随机选择第一个质心。

  • 根据与已选质心的距离概率选择后续质心。

  • 应用标准 K-Means 算法。

  1. Mini-Batch K-Means:对大数据集进行小批量更新,提高效率。
  2. 层次聚类结合:先使用层次聚类生成 k 个簇,再进行 K-Means 优化。
  3. Elkan 算法:优化距离计算,加速收敛。

4. 确定 k 的方法

肘部法则 (Elbow Method)
  1. 计算不同 k 值下的误差平方和 (SSE)。
  2. 绘制 k-SSE 曲线,找到“肘部”点(即 SSE 的下降速度明显减缓的位置)。
  3. 该点对应的 k 值通常是最佳选择。
轮廓系数 (Silhouette Coefficient)

衡量聚类的质量:

s = \frac{b - a}{\max(a, b)}

  • a:样本点与同簇中其他点的平均距离。
  • b:样本点与最近簇中点的平均距离。

5. 实现 K-Means

Python 实现(使用 scikit-learn
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

# 生成数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=42)

# K-Means 聚类
kmeans = KMeans(n_init=10, n_clusters=4, random_state=42)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75)
plt.title('K-Means Clustering')
plt.show()


6. 应用场景

  1. 图像压缩:将像素颜色聚类到 k 个簇。
  2. 客户分群:根据消费行为对客户进行分组。
  3. 文本聚类:将文档划分为不同主题。
  4. 基因聚类:根据基因表达模式进行分组。
  5. 推荐系统:对用户或商品分组,提供个性化推荐。


 7. 实验与结果分析

评价指标
  1. SSE (Sum of Squared Errors):衡量簇内误差,值越小越好,但可能会过拟合。
  2. 轮廓系数 (Silhouette Coefficient):衡量聚类效果,值越接近 1,聚类效果越好。
  3. Davies-Bouldin 指数:值越小越好,反映簇的分离程度。
  4. Calinski-Harabasz 指数:簇的分离性和紧凑性,值越大越好。

通过以上指标,可以综合评价聚类效果,选择最佳参数 k 和优化方法。


K-Means 是一种经典而高效的聚类算法,适合初学者和实际应用。通过改进方法和调参,可以应对不同类型的数据和应用场景。

标签:plt,机器,Means,kmeans,学习,聚类,质心,centers
From: https://blog.csdn.net/IT_ORACLE/article/details/144337627

相关文章

  • 高斯混合模型(GMM)与K均值算法(K-means)算法的异同
    高斯混合模型(GaussianMixtureModel,GMM)和K均值(K-Means)算法都是常用于聚类分析的无监督学习方法,虽然它们的目标都是将数据分成若干个类别或簇,但在实现方法、假设和适用场景上有所不同。1.模型假设K均值(K-Means):假设每个簇的样本点在簇中心附近呈均匀分布,通常是球形的(即每个......
  • 强化学习 随机梯度下降
    在强化学习中,随机梯度下降(StochasticGradientDescent,SGD)是一种常用的优化算法,用于更新模型参数以最小化损失函数。这种方法通过在每次迭代中使用一个随机样本或小批量样本来近似梯度,从而加速训练过程并提高效率。随机梯度下降在强化学习中的应用具有一定的优势和挑战。......
  • 强化学习 不动点原理
    在强化学习中,不动点原理是一个重要的数学工具,用于求解最优策略和值函数。不动点是指一个函数$f(x)满足满足满足f(x)=x$的点,即该点在函数作用下保持不变。在强化学习中,贝尔曼最优公式是通过不动点原理来求解的,这基于Banach不动点定理,该定理指出如果一个函数是压缩......
  • 强化学习 蒙特卡洛算法
    蒙特卡洛方法在强化学习中是一种重要的算法,它主要用于策略评估和改进。这种方法不需要对环境的动态有完全的了解,因此特别适用于模型未知的情况。蒙特卡洛方法的基本思想是通过多次采样来估计状态值或动作值。具体来说,它通过执行完整的动作序列来评估状态价值或动作价值函数......
  • 强化学习 重要性采样
    在强化学习中,重要性采样(ImportanceSampling)是一种用于估计和优化策略下期望回报的技术。其核心思想是通过调整样本权重来修正不同策略之间的偏差,从而更准确地估计目标策略下的值函数。重要性采样通常o用于ff-policy方法中,即当行为策略(behaviorpolicy)与目标策略(targetpol......
  • 机器视觉 | 助力巴西工业生产线的自动化检测和智能控制
    随着人工智能和机器学习技术的快速发展,机器视觉作为其中的重要组成部分,在工业领域得到了广泛的应用。机器视觉技术通过数据采集、计算机图像处理和分析、AI深度学习等方式,可实现对物体信息的提取、处理并加以理解,在现代化工厂产线中,可对产品的外观质量、尺寸、形状等参数进行快......
  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第12周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第12周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • 基于Java+SSM+HTML5学生学情预警系统(源码+LW+调试文档+讲解等)/学生学情预警系统/学
    博主介绍......
  • 【机器学习】任务十二:循环神经网络
    1.循环神经网络1.1什么是循环神经网络(RNN)?循环神经网络(RecurrentNeuralNetwork,RNN)是一种用于处理序列数据的神经网络类型,它的主要特点是拥有循环连接,使得网络可以对序列中的每个时间步(timestep)进行处理,并将前一个时间步的信息传递到当前时间步,从而捕捉序列数据中的时序......
  • # 2024-2025-1 20241304 《计算机基础与程序设计》第14周学习总结
    2024-2025-120241304《计算机基础与程序设计》第14周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第十四周作业)这个作业的目标<学习计算机网络......