Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习之K均值(K-Means)算法

机器学习之K均值(K-Means)算法

作者头像
小一
发布于 2019-08-14 07:42:59
发布于 2019-08-14 07:42:59
4.2K01
代码可运行
举报
文章被收录于专栏:谓之小一谓之小一
运行总次数:1
代码可运行

1.K-Means简介

K均值(K-Means)算法是无监督的聚类方法,实现起来比较简单,聚类效果也比较好,因此应用很广泛。K-Means算法针对不同应用场景,有不同方面的改进。我们从最传统的K-Means算法讲起,然后在此基础上介绍初始化质心优化K-Means++算法,距离计算优化Elkan K-Means算法和大样本情况下Mini Batch K-Means算法。

K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽可能紧密的连在一起,而让簇间的距离尽量的大,下面我们引入K-Means目标函数。

假设样本集输入变量为(x1,x2,x3,…,xm),样本集划分为K个簇(C1,C2,C3,…,Ck),则我们的目标是最小化平方误差E。

其中μi是簇Ci的均值向量,也可称作质心,表达式为

如果直接求解上述最小值的话,那么为NP Hard问题,因此K-Means算法采用启发式的迭代方法。下面我们通过一个简单聚类来介绍K-Means算法迭代过程。

  • 如图(a)所示:表示初始化数据集。
  • 如图(b)所示:假设K=2,随机选择两个点作为类别质心,分别为图中的红色和蓝色质心。
  • 如图(c)所示:分别求样本点xi到这两个质心的距离,并标记每个样本点的类别为距离质心最近的类别。划分得到两个簇C1和C2,完成一次迭代。
  • 如图(d)所示:对标记为红色的点和蓝色的点分别求新的质心。
  • 如图(e)所示:重复图(c)(d)过程,标记每个样本点的类别为距离质心最近的类别,重新划分得到两个簇C1和C2。
  • 如图(f)所示:直到质心不再改变后完成迭代,最终得到两个簇C1和C2。

2.K-Means算法流程

对于K-Means算法,首先要注意K值的选择和K个初始化质心的选择。

  • 对于K值的选择:我们可以通过对数据的先验经验选择合适的K值,如果没有先验条件的话,还可以通过交叉验证选择合适的K值。
  • 对于K个初始化质心:由于我们采用启发式迭代方法,K个初始化质心的位置选择对最后的聚类结果和运行时间都有较大的影响,最好选择的K个质心不要离得太近。

3.初始化优化K-Means++

如果是完全随机的选择, 算法的收敛可能很慢。我们在此介绍K-Means++算法,针对随机初始化质心进行优化,具体算法流程如下所示。

  • 从输入的数据点集合中随机选择一个点作为第一个聚类中心μ1。
  • 对于数据集中的每个点xi,计算与他最近的聚类中心距离。
  • 选择一个数据点作为新的聚类中心,其中D(x)较大的点被选作新的聚类中心的概率较大。
  • 重复上述两步,直到选择出K个聚类中心。然后利用这K个质心来作为初始化质心去运行传统K-Means算法。

4.距离计算优化Elkan K-Means算法

传统K-Means算法中,我们每次迭代时都要计算所有样本点到所有质心之间的距离,那么有没有什么方法来减少计算次数呢? Elkan K-Means算法提出利用两边之和大于第三边、两边之差小于第三边的三角形特性来减少距离的计算。

Elkan K-Means迭代速度比传统K-Means算法迭代速度有较大提高,但如果我们的样本特征是稀疏的,或者有缺失值的话,此种方法便不再使用。

5.大样本优化Mini Batch K-Means算法

传统的K-Means算法中需要计算所有样本点到所有质心的距离,计算复杂度较高。如果样本量非常大的情况下,比如数据量达到10万,特征在100以上,此时用传统K-Means算法非常耗时。故此针对大样本情况下采用Mini Batch K-Means算法。

Mini Batch K-Means采用无放回随机采样的方法从样本集中选取部分数据,然后用选取的数据进行传统的K-Means算法训练。然后进行迭代并更新质心,直到质心稳定或达到指定的迭代次数。

Mini Batch K-Means可以避免样本量太大带来的计算问题,算法收敛速度也能够加快,当然带来的代价就是我们的聚类精确度降低。为增加算法的准确性,我们可以多训练几次Mini Batch K-Means算法,用不同的随机采样集来得到聚类簇,选择其中最优的聚类簇。

6.Sklearn实现K-Means算法

我们经常需要通过改变参数来让模型达到聚类结果,具体参数设置可参考sklearn官方教程。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

#load iris
iris=load_iris()
X=iris.data[:,:2]
print(X.shape)
#150,2

#plot data
plt.figure()
plt.scatter(X[:,0],X[:,1],c='blue',
            marker='o',label='point')
plt.legend(loc=2)
plt.show()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# fit data
kmeans=KMeans(n_clusters=3)
kmeans.fit(X)
label_pred=kmeans.labels_

#plot answer
plt.figure()
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c = "red",
            marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c = "green",
            marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c = "blue",
            marker='+', label='label2')
plt.legend(loc=2)
plt.show()

7.K-Means算法优缺点

7.1优点
  • 聚类效果较优。
  • 原理简单,实现容易,收敛速度快。
  • 需要调整的参数较少,通常只需调整簇数K。
7.2缺点
  • K值选取不好把握。
  • 对噪音和异常点比较敏感。
  • 采用迭代方法,得到的结果是局部最优。
  • 如果各隐含类别的数据不平衡,则聚类效果不佳。

参考:刘建平Pinard_K-Means聚类算法原理

你看到的这篇文章来自于公众号「谓之小一」,欢迎关注我阅读更多文章。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 谓之小一 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
解码 K-Means 聚类:开启数据星河的炫酷聚类新纪元
K-Means 是一种基于划分的无监督学习算法,旨在将数据集划分为 K 个簇,使得簇内数据点之间的相似度尽可能高,而簇间数据点的相似度尽可能低。相似度通常通过计算数据点与簇中心之间的距离来衡量,常用的距离度量方式是欧氏距离。
羑悻的小杀马特.
2025/06/12
720
机器学习(7)——聚类算法聚类算法
聚类算法 前面介绍的集中算法都是属于有监督机器学习方法,这章和前面不同,介绍无监督学习算法,也就是聚类算法。在无监督学习中,目标属性是不存在的,也就是所说的不存在“y”值,我们是根据内部存在的数据特征,划分不同的类别,使得类别内的数据比较相似。 我们对数据进行聚类的思想不同可以设计不同的聚类算法,本章主要谈论三种聚类思想以及该聚类思想下的三种聚类算法。666 本章主要涉及到的知识点有: “距离” K-Means算法 几种优化K-Means算法 密度聚类 算法思想:“物以类聚,人以群分” 本节首先通过聚类算法
DC童生
2018/04/27
3.8K0
机器学习(7)——聚类算法聚类算法
机器学习20:聚类(k-means模型、高斯混合聚类模型)
在无监督学习中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据内在的性质及规律,其中,应用最广的是聚类算法。
用户5473628
2019/08/08
3.3K0
机器学习20:聚类(k-means模型、高斯混合聚类模型)
机器学习(25)之K-Means聚类算法详解
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 K-Means算法是无监督的聚类算法,它实现起来比较简单,聚类效果也不错,因此应用很广泛。K-Means算法有大量的变体,本文就从最传统的K-Means算法讲起,在其基础上讲述K-Means的优化变体方法。包括初始化优化K-Means++, 距离计算优化elkan K-Means算法和大数据情况下的优化Mini Batch K-Means算法。 K-M原理 K-Means算法的思
昱良
2018/04/04
2.7K0
机器学习(25)之K-Means聚类算法详解
K-means算法及python实现
        K-means(Thek-meansalgorithm)是机器学习十大经典算法之一,同时也是最为经典的无监督聚类(Unsupervised Clustering)算法。接触聚类算法,首先需要了解k-means算法的实现原理和步骤。本文将对k-means算法的基本原理和实现实例进行分析。
Flaneur
2020/03/25
5.1K0
[Python从零到壹] 十三.机器学习之聚类算法四万字总结(K-Means、BIRCH、树状聚类、MeanShift)
在过去,科学家会根据物种的形状习性规律等特征将其划分为不同类型的门类,比如将人种划分为黄种人、白种人和黑种人,这就是简单的人工聚类方法。聚类是将数据集中某些方面相似的数据成员划分在一起,给定简单的规则,对数据集进行分堆,是一种无监督学习。聚类集合中,处于相同聚类中的数据彼此是相似的,处于不同聚类中的元素彼此是不同的。本章主要介绍聚类概念和常用聚类算法,然后详细讲述Scikit-Learn机器学习包中聚类算法的用法,并通过K-Means聚类、Birch层次聚类及PAC降维三个实例加深读者印象。
Eastmount
2021/12/02
2.2K0
[Python从零到壹] 十三.机器学习之聚类算法四万字总结(K-Means、BIRCH、树状聚类、MeanShift)
机器学习算法之聚类算法
"If you set your goals ridiculously high and it's a failure, you will fail above everyone else's success.
小闫同学啊
2020/02/26
1.3K0
机器学习笔记之聚类算法K-Means
聚类算法是典型的无监督学习,其训练的样本中值包含样本的特征,不包含样本的标签信息。在聚类算法中。利用样本的特征,将具有相似属性的样本划分到统一类别中,它有点像全自动分类。
Jetpropelledsnake21
2021/04/01
9000
机器学习笔记之聚类算法K-Means
【机器学习】算法原理详细推导与实现(六):k-means算法
之前几个章节都是介绍有监督学习,这个章节介绍无监督学习,这是一个被称为k-means的聚类算法,也叫做k均值聚类算法。
机器学习和大数据挖掘
2020/02/25
1.3K0
【机器学习】算法原理详细推导与实现(六):k-means算法
K-means
对于”监督学习”(supervised learning),其训练样本是带有标记信息的,并且监督学习的目的是:对带有标记的数据集进行模型学习,从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learning)中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。对于无监督学习,应用最广的便是”聚类”(clustering)。
AngelNH
2020/04/15
7540
K-means
K-Means算法实例
版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/chengyuqiang/article/details/88819658
程裕强
2019/07/01
8300
K-Means算法实例
嘿,敢不敢来聚个类!
A 某和 B 某青梅竹马,A 某通过 B 某认识了 C 某,发现兴趣爱好出奇一致,这三人就搞到了一起,成为了一个形影不离的小团体。这个小团体的形成,是自下而上的迭代过程。
Jack_Cui
2021/04/27
9840
嘿,敢不敢来聚个类!
K-means 学习笔记
给定 K 值和 K 个初始类中心点,把每个点分到离其最近的类中心点所代表的类中,所有点分配完毕之后,根据一个类内的所有点重新计算该类的中心点(平均值),然后再迭代的进行分配点和更新类中心点的步骤,直至类中心点的变化很小,或者达到指定的迭代次数。
EmoryHuang
2022/10/31
4430
K-means 学习笔记
K-means 在 Python 中的实现
K-means算法简介 K-means是机器学习中一个比较常用的算法,属于无监督学习算法,其常被用于数据的聚类,只需为它指定簇的数量即可自动将数据聚合到多类中,相同簇中的数据相似度较高,不同簇中数据相似度较低。 K-menas的优缺点: 优点: 原理简单 速度快 对大数据集有比较好的伸缩性 缺点: 需要指定聚类 数量K 对异常值敏感 对初始值敏感 K-means的聚类过程 其聚类过程类似于梯度下降算法,建立代价函数并通过迭代使得代价函数值越来越小 适当选择c个类的初始中心; 在第k次迭代中,对任意一个样本,
小莹莹
2018/04/23
1.8K0
K-means 在 Python 中的实现
机器学习 | KMeans聚类分析详解
大量数据中具有"相似"特征的数据点或样本划分为一个类别。聚类分析提供了样本集在非监督模式下的类别划分。聚类的基本思想是"物以类聚、人以群分",将大量数据集中相似的数据样本区分出来,并发现不同类的特征。
数据STUDIO
2021/06/24
4.4K0
K-means聚类算法
机器学习算法主要分为两大类:有监督学习和无监督学习,它们在算法思想上存在本质的区别。 有监督学习,主要对有标签的数据集(即有“参考答案”)去构建机器学习模型,但在实际的生产环境中,其实大量数据是处于没有被标注的状态,这时因为“贴标签”的工作需要耗费大量的人力,如果数据量巨大,或者调研难度大的话,生产出一份有标签的数据集是非常困难的。再者就算是使用人工来标注,标注的速度也会比数据生产的速度慢的多。
zhangjiqun
2024/12/14
2030
K-means聚类算法
【模式识别】实验三:K均值算法和模糊C均值算法
本文采用了sonar和Iris数据集,完整的程序代码实验报告pdf,数据集可以戳下面的链接下载。 Link:https://download.csdn.net/download/qq1198768105/71411278 实验报告图片版 程序代码 以Iris数据集为例: k-means import numpy as np import matplotlib.pyplot as plt import random # 正常导入数据 def load_dataset(): data = n
zstar
2022/06/14
6700
【模式识别】实验三:K均值算法和模糊C均值算法
【Python】机器学习之聚类算法
这些聚类算法在不同场景和数据特性下有各自的优势和局限性,选择合适的算法取决于问题的性质和对结果的需求。聚类在图像分割、客户细分、异常检测等领域都有广泛的应用。
SarPro
2024/02/20
3540
【Python】机器学习之聚类算法
机器学习系列(八)K均值(kMeans)
K均值算法是一种聚类算法,自动的将数据组成聚类。该算法采用距离作为数据之间相似性的评价指标,认为两个数据距离越近,相似度越大。 算法步骤: 1) 从数据样本中随机选择K个数据作为聚类的中心(质心),初始化簇。 2) 计算每个数据样本到每个质心的距离,并划分到最近质心所在的类里。 3) 重新计算划分之后的每个类的质心 4) 重复迭代步骤(2)-(3),直到前后两次结果的质心相等或者距离小于给定阈值,结束聚类。 K均值的迭代过程如图,+为质心,经过3次迭代之后数据被分成三类。
Minerva
2020/05/25
1.4K0
机器学习(26)之K-Means实战与调优详解
关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 前言 在K-Means聚类算法原理(机器学习(25)之K-Means聚类算法详解)中对K-Means的原理做了总结,本文来讨论用scikit-learn来学习K-Means聚类。重点讲述如何选择合适的k值。 K-Means类概述 在scikit-learn中,包括两个K-Means的算法,一个是传统的K-Means算法,对应的类是KMeans。另一个是基于采样的Mini Batch K
昱良
2018/04/04
5.9K0
机器学习(26)之K-Means实战与调优详解
相关推荐
解码 K-Means 聚类:开启数据星河的炫酷聚类新纪元
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验