前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >K-means聚类:原理简单的聚类算法

K-means聚类:原理简单的聚类算法

作者头像
生信修炼手册
发布于 2021-03-25 02:24:49
发布于 2021-03-25 02:24:49
2.6K00
代码可运行
举报
文章被收录于专栏:生信修炼手册生信修炼手册
运行总次数:0
代码可运行

对于监督学习而言,回归和分类是两类基本应用场景;对于非监督学习而言,则是聚类和降维。K-means属于聚类算法的一种,通过迭代将样本分为K个互不重叠的子集。

对于K-means聚类而言,首先要确定的第一个参数就是聚类个数K。具体的方法有以下两种,第一种是目的导向,根据先验知识或者研究目的,直接给定一个具体的K值,比如根据实验设计的分组数目定K值,根据样本的不同来源定K值等;第二种方法称之为Elbow, 适合没有任何先验的数据,通过比较多个K值的聚类结果,选取拐点值,图示如下

横坐标为不同的K值,纵坐标为样本点到聚类中心的距离总和。

K-means是一种启发式的聚类算法,通过迭代的方式来求解,在初次迭代时,随机选择两个样本点作为聚类的中心点,这样的中心点也叫做质心centroids,然后不断循环重复如下两个过程

1. cluster assignment,计算样本与聚类中心点的距离,选择距离近的中心点作为该样本的分类

2. move centroid, 移动聚类中心点,样本分类完毕之后,重新计算各个cluster的中心点

经过多次迭代,直到中心点的位置不在发生变化即可。下面用一系列示例图来展示其迭代过程,输入数据如下

根据先验知识,确定样本划分为两类,首先随机选择聚类的中心点

计算样本与中心点的距离,将样本划分为不同的cluster

根据划分好的结果,重新计算聚类中心点

重复迭代,直到中心点的位置不再变动,得到最终的聚类结果

在kmeans算法中,初始聚类中心点的选取对算法收敛的速度和结果都有很大影响。在传统kemans的基础上,又提出了kmeans++算法,该算法的不同之处在于初始聚类中心点的选取策略,其他步骤和传统的kmeans相同。

kmeans++的初始聚类中心选择策略如下

1. 随机选取一个样本作为聚类中心

2. 计算每个样本点与该聚类中心的距离,选择距离最大的点作为聚类中心点

3. 重复上述步骤,直到选取K个中心点

在scikit-learn中,使用kmeans聚类的代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from sklearn.cluster import KMeans
>>> from sklearn.datasets import make_blobs
>>> from sklearn.metrics.pairwise import pairwise_distances_argmin
>>> centers = [[1, 1], [-1, -1], [1, -1]]
>>> n_clusters = len(centers)
>>> X, labels_true = make_blobs(n_samples=3000, centers=centers, cluster_std=0.7)
>>> k_means = KMeans(init='k-means++', n_clusters=3, n_init=10)
>>> k_means.fit(X)
KMeans(n_clusters=3)

对于聚类结果,可以用以下代码进行可视化

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> k_means_cluster_centers = k_means.cluster_centers_
>>> k_means_labels = pairwise_distances_argmin(X, k_means_cluster_centers)
>>> colors = ['#4EACC5', '#FF9C34', '#4E9A06']
>>> fig, ax = plt.subplots()
>>> for k, col in zip(range(n_clusters), colors):
... my_members = k_means_labels == k
... cluster_center = k_means_cluster_centers[k]
... ax.plot(X[my_members, 0], X[my_members, 1], 'w', markerfacecolor=col, marker='.')
... ax.plot(cluster_center[0], cluster_center[1], 'o', markerfacecolor=col, markeredgecolor='k', markersize=6)
...
[<matplotlib.lines.Line2D object at 0x11322880>]
[<matplotlib.lines.Line2D object at 0x11322A48>]
[<matplotlib.lines.Line2D object at 0x11322BF8>]
[<matplotlib.lines.Line2D object at 0x11322DA8>]
[<matplotlib.lines.Line2D object at 0x11322F58>]
[<matplotlib.lines.Line2D object at 0x11330130>]
>>> ax.set_title('KMeans')
Text(0.5, 1.0, 'KMeans')
>>> ax.set_xticks(())
[]
>>> ax.set_yticks(())
[]
>>> plt.show()

输出结果如下

kmeans算法原理简单,运算速度快,适用于大样本的数据,但是注意由于采用了欧氏距离,需要在数据预处理阶段进行归一化处理。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

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

本文分享自 生信修炼手册 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
K-means算法
聚类(Clustering)是一种无监督学习(unsupervised learning),简单地说就是把相似的对象归到同一簇中。簇内的对象越相似,聚类的效果越好。
润森
2019/08/29
1.1K0
K-means算法
k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)
该文章介绍了如何使用K-means算法进行聚类,以及如何使用scikit-learn库中的KMeans函数进行实现。同时,文章还介绍了如何对数据进行标准化处理,以及如何使用scikit-learn库中的StandardScaler函数进行标准化处理。最后,文章介绍了如何使用K-means算法进行聚类,并给出了具体的代码示例和注释说明。
悟乙己
2018/01/02
13K0
k-means+python︱scikit-learn中的KMeans聚类实现( + MiniBatchKMeans)
机器学习(7)——聚类算法聚类算法
聚类算法 前面介绍的集中算法都是属于有监督机器学习方法,这章和前面不同,介绍无监督学习算法,也就是聚类算法。在无监督学习中,目标属性是不存在的,也就是所说的不存在“y”值,我们是根据内部存在的数据特征,划分不同的类别,使得类别内的数据比较相似。 我们对数据进行聚类的思想不同可以设计不同的聚类算法,本章主要谈论三种聚类思想以及该聚类思想下的三种聚类算法。666 本章主要涉及到的知识点有: “距离” K-Means算法 几种优化K-Means算法 密度聚类 算法思想:“物以类聚,人以群分” 本节首先通过聚类算法
DC童生
2018/04/27
3.7K0
机器学习(7)——聚类算法聚类算法
MLK | 非监督学习最强攻略
"MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,内容主要来自于《百面机器学习》一书,结合自己的经验与思考做的一些总结与归纳,本次主要讲解的内容是机器学习里的非监督学习经典原理与算法,非监督,也就是没有target(标签)的算法模型。"
Sam Gor
2019/07/17
9290
MLK | 非监督学习最强攻略
DBSCAN聚类算法详解
Density-Based Spatial Clustering of Applications with Noise
生信修炼手册
2021/03/24
1.2K0
DBSCAN聚类算法详解
探索Python中的聚类算法:K-means
在机器学习领域中,聚类算法被广泛应用于数据分析和模式识别。K-means 是其中一种常用的聚类算法,它能够将数据集分成 K 个不同的组或簇。本文将详细介绍 K-means 算法的原理、实现步骤以及如何使用 Python 进行编程实践。
Echo_Wish
2024/03/22
4330
sklearn调包侠之K-Means
k-均值算法(K-Means算法)是一种典型的无监督机器学习算法,用来解决聚类问题。
罗罗攀
2018/08/02
1.1K0
sklearn调包侠之K-Means
通透!十大聚类算法全总结!!
这些聚类算法各有优缺点,适用于不同类型的数据和不同的应用场景。选择合适的聚类算法通常取决于具体的需求、数据的特性和计算资源。
Python编程爱好者
2023/11/28
4.3K0
通透!十大聚类算法全总结!!
2、k-means聚类算法sklearn与手动实现
1、假定我们要对N个样本观测做聚类,要求聚为K类,首先选择K个点作为初始中心点; 2、接下来,按照距离初始中心点最小的原则,把所有观测分到各中心点所在的类中; 3、每类中有若干个观测,计算K个类中所有样本点的均值,作为第二次迭代的K个中心点; 4、然后根据这个中心重复第2、3步,直到收敛(中心点不再改变或达到指定的迭代次数),聚类过程结束。
zstar
2023/09/11
3220
2、k-means聚类算法sklearn与手动实现
算法金 | 再见!!!K-means
今天我们来聊聊达叔 6 大核心算法之 —— k-means 算法。最早由斯坦福大学的 J. B. MacQueen 于 1967 年提出,后来经过许多研究者的改进和发展,成为了一种经典的聚类方法。吴恩达:机器学习的六个核心算法!
算法金
2024/06/14
1090
算法金 | 再见!!!K-means
AI - 聚类算法
💥聚类算法是一种无监督学习方法,用于将数据集中的对象划分为若干个簇,使得同一个簇内的对象之间具有较高的相似性,而不同簇的对象之间具有较大的差异性。
@小森
2024/03/22
1960
机器学习聚类算法
聚类算法是一种无监督学习方法,用于将数据集中的样本划分为多个簇,使得同一簇内的样本相似度较高,而不同簇之间的样本相似度较低。在数据分析中,聚类算法可以帮助我们发现数据的内在结构和规律,从而为进一步的数据分析和挖掘提供有价值的信息。
@小森
2024/03/15
1220
机器学习聚类算法
[Python从零到壹] 十三.机器学习之聚类算法四万字总结(K-Means、BIRCH、树状聚类、MeanShift)
在过去,科学家会根据物种的形状习性规律等特征将其划分为不同类型的门类,比如将人种划分为黄种人、白种人和黑种人,这就是简单的人工聚类方法。聚类是将数据集中某些方面相似的数据成员划分在一起,给定简单的规则,对数据集进行分堆,是一种无监督学习。聚类集合中,处于相同聚类中的数据彼此是相似的,处于不同聚类中的元素彼此是不同的。本章主要介绍聚类概念和常用聚类算法,然后详细讲述Scikit-Learn机器学习包中聚类算法的用法,并通过K-Means聚类、Birch层次聚类及PAC降维三个实例加深读者印象。
Eastmount
2021/12/02
2.1K0
[Python从零到壹] 十三.机器学习之聚类算法四万字总结(K-Means、BIRCH、树状聚类、MeanShift)
使用Python实现K均值聚类算法
K均值(K-Means)算法是一种常用的聚类算法,它将数据集分成K个簇,每个簇的中心点代表该簇的质心,使得每个样本点到所属簇的质心的距离最小化。在本文中,我们将使用Python来实现一个基本的K均值聚类算法,并介绍其原理和实现过程。
Echo_Wish
2024/04/12
2890
数学建模--K-Means聚类分析
对数据进行自动分组,使得同一组内的数据样本尽可能相似,不同组之间的数据样本尽可能不同,以此来完成用户细分,这就是聚类。
阑梦清川
2025/02/24
2720
数学建模--K-Means聚类分析
讲解K-Means聚类算法进行压缩图片
在计算机视觉领域中,图像压缩是一个重要的问题。在本文中,我们将介绍如何使用K-Means聚类算法来压缩图像。K-Means算法是一种常用的聚类算法,它可以将数据分成几个不同的簇,每个簇的数据点都具有相似的特征。
大盘鸡拌面
2023/12/15
4370
【机器学习-无监督学习】聚类
  本文开始我们讲解无监督学习算法。在之前的文章中,我们给模型的任务通常是找到样本
Francek Chen
2025/01/22
1240
【机器学习-无监督学习】聚类
(数据科学学习手札11)K-means聚类法的原理简介&Python与R实现
kmeans法(K均值法)是麦奎因提出的,这种算法的基本思想是将每一个样本分配给最靠近中心(均值)的类中,具体的算法至少包括以下三个步骤:   1.将所有的样品分成k个初始类;   2.通过欧氏距离将某个样品划入离中心最近的类中,并对获得样品与失去样品的类重新计算中心坐标;   3.重复步骤2,直到所有的样品都不能在分类为止 kmeans法与系统聚类法一样,都是以距离的远近亲疏为标准进行聚类的。但是两者的不同之处也很明显:系统聚类对不同的类数产生一系列的聚类结果,而K均值法只能产生指定类数的聚类结果。具体类
Feffery
2018/04/17
2.2K0
(数据科学学习手札11)K-means聚类法的原理简介&Python与R实现
【白话机器学习】算法理论+实战之K-Means聚类算法
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法:
石晓文
2020/03/24
1.5K0
【白话机器学习】算法理论+实战之K-Means聚类算法
机器学习算法之聚类算法
"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算法
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文