Kmeans 聚类算法

K-means聚类算法

机器学习中有两类的大问题,一个是分类,一个是聚类。分类是监督学习,原始数据有标签,可以根据原始数据建立模型,确定新来的数据属于哪一类。聚类是一种无监督学习,聚类是指事先没有“标签”,在数据中发现数据对象之间的关系,将数据进行分组,一个分组也叫做“一个簇”, 组内的相似性越大,组间的差别越大,则聚类效果越好,也就是簇内对象有较高的相似度,簇之间的对象相似度比较低,则聚类效果越好。K-means就是一个聚类算法。
K-means聚类算法中K表示将数据聚类成K个簇,means表示每个聚类中数据的均值作为该簇的中心,也称为质心。K-means聚类试图将相似的对象归为同一个簇,将不相似的对象归为不同簇,这里需要一种对数据衡量相似度的计算方法,K-means算法是典型的基于距离的聚类算法,采用距离作为相似度的评价指标,默认以欧式距离作为相似度测度,即两个对象的距离越近,其相似度就越大。
聚类和分类最大的不同在于,分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来,也就是聚类分组不需要提前被告知所划分的组应该是什么样的,因为我们甚至可能都不知道我们再寻找什么,所以聚类是用于知识发现而不是预测,所以,聚类有时也叫无监督学习。

Kmeans 过程原理

假设有一批关于计算机科学和数学统计相关的人才,这批人才中计算机人才、机器学习人才、数学人才三类,那么该如何将这批数据进行聚类?
在这里插入图片描述
我们可以直观的感觉到应该如下分类:
在这里插入图片描述
但问题是计算机不会直观的去观察数据,首先将这批数据向量化,K-means聚类会随机在这些点中找到三个点,然后计算所有的样本到当前三个点的距离大小,判断样本点与当前三个点哪个距离比较
在这里插入图片描述
当经过一次计算之后,就是经过了一次迭代过程,当完成一次迭代后,就分出来是三个类别(簇),每个类别中都有质心。然后进行下一次迭代,继续计算所有点到三个类别中心点的距离,按照每个样本点与哪个质心距离最近就属于哪个簇,以此类推,继续迭代。
当本次计算的中心点的距离较上次计算的中心点的位置不再变化,那么停止迭代。
在这里插入图片描述在这里插入图片描述

K值得选择 (选择适当的聚类数 肘部法)

K值的选择一般可以根据问题的内容来确定,也可以根据肘部法来确定。如图:横轴表示K值的选择,纵轴表示对应的K值下所有聚类的平均畸变程度
在这里插入图片描述
每个类的畸变程度是每个类别下每个样本到质心的位置距离的平方和。类内部成员越是紧凑,那么类的畸变程度越低,这个类内部相似性越大,聚类也就越好。如图,在k=1请况下,相比k=2情况下,类的平均畸变程度变化大,说明,k=2的情况类的紧凑程度比k=1情况下要紧凑的多。同理,发现当k=3之后,随着k的增大,类的平均畸变程度变化不大,说明k=3是比较好的k值。k>3后类的平均畸变程度变化不大,聚类的个数越多,有可能类与类之间的相似度越大,类的内部反而没有相似度,这种聚类也是不好的。举个极端的例子,有1000个数据,分成1000个类,那么类的平均畸变程度是0,那么每个数据都是一类,类与类之间的相似度大,类内部没有相似性。

Kmeans算法主要思想

K-means算法的思想就是对空间K个点为中心进行聚类,对靠近他们的对象进行归类,通过迭代的方法,逐次更新聚类中心(质心)的值,直到得到最好的聚类结果。K-means过程:
1.首先选择k个类别的中心点
2.对任意一个样本,求其到各类中心的距离,将该样本归到距离最短的中心所在的类
3.聚好类后,重新计算每个聚类的中心点位置
4.重复2,3步骤迭代,直到k个类中心点的位置不变,或者达到一定的迭代次数,则迭代结束,否则继续迭代

Kmeans++算法

K-means算法假设聚类为3类,开始选取每个类的中心点的时候是随机选取,有可能三个点选取的位置非常近,导致后面每次聚类重新求各类中心的迭代次数增加。K-means++在选取第一个聚类中心点的时候也是随机选取,当选取第二个中心点的时候,距离当前已经选择的聚类中心点的距离越远的点会有更高的概率被选中,假设已经选取n个点,当选取第n+1个聚类中心时,距离当前n个聚类中心点越远的点越会被选中,这种思想是聚类中心的点离的越远越好,这样就大大降低的找到最终聚类各个中心点的迭代次数,提高了效率。
现在一般说的kmeans算法都是 kmeans++算法

python

数据

1.658985	4.285136

-3.453687	3.424321

4.838138	-1.151539

-5.379713	-3.362104

...

自己实现

# encoding:utf-8

import numpy as np


# 将每行数据放入一个数组内列表,返回一个二维列表

def loadDataSet(fileName):
    # 创建空列表
    dataMat = []
    fr = open(fileName, 
  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kmeans聚类算法是一种常用的基于划分的聚类算法,它通过计算数据对象之间的欧氏距离来衡量它们的相似度。相似度越大,距离越小。\[2\] Kmeans算法的基本思想是将给定的样本集分成K个簇,每个簇都有一个中心点,该中心点是簇中所有样本点的平均值。算法的步骤如下: 1. 随机选择K个初始中心点。 2. 将每个样本点分配给离它最近的中心点所在的簇。 3. 更新每个簇的中心点,即计算簇中所有样本点的平均值。 4. 重复步骤2和3,直到簇的分配不再改变或达到预定的迭代次数。 然而,当数据量较大时,Kmeans算法的计算时间会比较长。为了解决这个问题,MiniBatchKmeans算法被提出。MiniBatchKmeans是对Kmeans的一种优化算法,它在尽量保持聚类准确性的情况下,大幅度降低计算时间。\[1\] MiniBatchKmeans的步骤如下: 1. 从数据集中随机抽取一部分数据作为初始样本集。 2. 对初始样本集使用Kmeans算法进行聚类。 3. 继续抽取一部分数据,将其添加到模型中,并将它们分配给最近的聚类中心。 4. 更新聚类中心。 5. 重复步骤3和4,直到算法收敛为止。 MiniBatchKmeansKmeans聚类准确性方面相差不大,但对于数据量较大的情况,可以考虑使用MiniBatchKmeans来加快计算速度。\[1\] 此外,对于包含类别特征的数据,需要进行编码处理,例如使用onehot编码方法。如果数据包含混合类型的特征,还可以考虑使用其他算法如K-Modes和K-Prototypes来进行聚类。\[3\] #### 引用[.reference_title] - *1* [Kmeans均值聚类算法](https://blog.csdn.net/qq_45645521/article/details/123040810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [K-Means聚类算法](https://blog.csdn.net/u013288190/article/details/125274964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [全面解析Kmeans聚类算法(Python)](https://blog.csdn.net/weixin_38037405/article/details/124315032)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值