【机器学习】聚类算法——K-Means算法(理论+图解)

简介: 【机器学习】聚类算法——K-Means算法(理论+图解)

简 介:下面是我在学习时候的记录并加上自己的理解。本文意在记录自己近期学习过程中的所学所得,如有错误,欢迎大家指正。

 

关键词:Python、机器学习、K-Means聚类

一、K-Means聚类

其实它是一种基于质心的聚类,为什么这么说呢?因为它的设计思想就是从总样本中找到几个标志性的数据,将其定为每个簇的数据中心,然后分别判断每个数据的距离状况,然后进行更新每个簇内的质心。

对于样本集 D = { x 1 , x 2 . . . x n } D=\{x_1,x_2...x_n\}D={x1,x2...xn} 来说,我们要将其分成k个数据簇,也就是对应 C = { C 1 , C 2 , . . . C k } C=\{C_1,C_2,...C_k\}C={C1,C2,...Ck} ,如果是这样,那么我们的目标优化函数就是:

E = ∑ i = 1 k ∑ x ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 2 E=\sum_{i=1}^k\sum_{x\in C_i}||x-\mu_i||_2^2E=i=1kxCixμi22

我们就是要优化该函数,也就是要E越小越好,但是该函数我们是很难进行优化的,因为如果我们要想计算出它的最优解,那么就要穷举出所有的簇分类可能,但是这在实际中是很难进行的,所以就要考虑局部最优采用贪心算法进行优化,我们每次只是进行更新该簇内的质心,然后不断迭代此过程。

二、算法详细流程

  1. 首先确定样本集和待划分的簇类数k
  2. 从样本集中随机初始k个数据中心点
  3. 迭代每一个样本,计算每一个样本对k个数据中心的距离
  4. 标记样本为距离该样本最近的类别簇中
  5. 第一轮遍历数据完成,所有的样本已经找到了自己所属的簇,但这还不是最终的类别,所以还要进行第二轮迭代
  6. 在第二轮迭代之前,需要更新每个簇内的质心
  7. 计算每个簇内的质心 μ = 1 C ∑ x ∈ C x \mu=\frac{1}{C}\sum_{x\in C}xμ=C1xCx
  8. 然后重复3-7的步骤,知道达到预期迭代次数或者两次迭代结果,簇内数据不发生任何变化

算法实现需要注意的几个问题:

  • 类中心向量的初值一般是采用随机初始化的,所以这可能导致每一次的模型聚类效果不同,因为算法内部使用了采用贪心,所以可能导致每次的效果分类不一样。
  • 簇的个数的确定,因为簇的个数事先是无法确定的,我们也不清楚到底将数据分为几个类别,所以我们需要不断地调整k的个数,来判断聚类的效果
  • 迭代终止原则,一般是会定义一个阈值,如果我们两次迭代后发现每个簇的类中心的变化距离小于我们设定的阈值,就说明本次迭代没有发生较大的数据变动,则迭代终止。
目录
相关文章
|
19天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
62 4
|
16天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
32 1
|
24天前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络
|
25天前
|
机器学习/深度学习 算法
深入探索机器学习中的决策树算法
深入探索机器学习中的决策树算法
34 0
|
26天前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
32 0
|
10天前
|
算法
基于WOA算法的SVDD参数寻优matlab仿真
该程序利用鲸鱼优化算法(WOA)对支持向量数据描述(SVDD)模型的参数进行优化,以提高数据分类的准确性。通过MATLAB2022A实现,展示了不同信噪比(SNR)下模型的分类误差。WOA通过模拟鲸鱼捕食行为,动态调整SVDD参数,如惩罚因子C和核函数参数γ,以寻找最优参数组合,增强模型的鲁棒性和泛化能力。
|
16天前
|
机器学习/深度学习 算法 Serverless
基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM
本项目利用鲸鱼优化算法(WOA)优化支持向量机(SVM)参数,针对乳腺癌早期诊断问题,通过MATLAB 2022a实现。核心代码包括参数初始化、目标函数计算、位置更新等步骤,并附有详细中文注释及操作视频。实验结果显示,WOA-SVM在提高分类精度和泛化能力方面表现出色,为乳腺癌的早期诊断提供了有效的技术支持。
|
4天前
|
存储 算法
基于HMM隐马尔可夫模型的金融数据预测算法matlab仿真
本项目基于HMM模型实现金融数据预测,包括模型训练与预测两部分。在MATLAB2022A上运行,通过计算状态转移和观测概率预测未来值,并绘制了预测值、真实值及预测误差的对比图。HMM模型适用于金融市场的时间序列分析,能够有效捕捉隐藏状态及其转换规律,为金融预测提供有力工具。
|
4天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如"How are you"、"I am fine"、"I love you"等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
12天前
|
算法
基于GA遗传算法的PID控制器参数优化matlab建模与仿真
本项目基于遗传算法(GA)优化PID控制器参数,通过空间状态方程构建控制对象,自定义GA的选择、交叉、变异过程,以提高PID控制性能。与使用通用GA工具箱相比,此方法更灵活、针对性强。MATLAB2022A环境下测试,展示了GA优化前后PID控制效果的显著差异。核心代码实现了遗传算法的迭代优化过程,最终通过适应度函数评估并选择了最优PID参数,显著提升了系统响应速度和稳定性。