kmeans聚类算法python

[pytorch]K-means算法的实现 K-MEANS算法是输入聚类个数k,以及包含 n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法。k-means 算法接受输入量 k ;然后将n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。 基本步骤 (1) 从 n个数据对象任意选择 k 个对象作为初始聚类中心; (2) 根据每个聚类对象的均值(中心对象),计算每个对象与这... 阅读详情

前言

日常生活中,从人脸识别、语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地。尽管全球每日新增数据量以PB或EB级别增长,但是大部分数据属于无标注甚至非结构化。所以相对于监督学习,不需要标注的无监督学习蕴含了巨大的潜力与价值。

需要Python零基础学习资料的伙伴,可以在公众号【码农资料库】中回复【py】自行领取 包括以下学习资料:

① Python所有方向的学习路线图,清楚各个方向要学什么东西

②Python课程视频,涵盖必备基础、爬虫和数据分析

③ Python实战案例,学习不再是只会理论

④ Python电子好书,从入门到高阶应有尽有

⑤ 华为出品独家Python漫画教程,手机也能学习 ⑥ 历年互联网企业Python面试真题,复习时非常方便

在这里插入图片描述

聚类算法KMeans是无监督学习的杰出代表之一。本文是记录自己过去学习KMeans算法的系统小结,将从“KMeans简介,优缺点与优化策略,结合EM算法解释KMeans以及手推KMeans”几个方面来尽可能彻底、清晰地搞明白这个算法,希望对大家能有所帮助。

一、聚类与KMeans

与分类、序列标注等任务不同,聚类是在事先并不知道任何样本标签的情况下,通过数据之间的内在关系把样本划分为若干类别,使得同类别样本之间的相似度高,不同类别之间的样本相似度低(即增大类内聚,减少类间距)。

聚类属于非监督学习,K均值聚类是最基础常用的聚类算法。它的基本思想是,通过迭代寻找K个簇(Cluster)的一种划分方案,使得聚类结果对应的损失函数最小。其中,损失函数可以定义为各个样本距离所属簇中心点的误差平方和:

在这里插入图片描述
在这里插入图片描述
(文末送读者福利)

二、具体步骤

KMeans的核心目标是将给定的数据集划分成K个簇(K是超参),并给出每个样本数据对应的中心点。具体步骤非常简单,可以分为4步:

在这里插入图片描述
KMeans最核心的部分就是先固定中心点,调整每个样本所属的类别来减少 J ;再固定每个样本的类别,调整中心点继续减小 J。两个过程交替循环, J单调递减直到最(极)小值,中心点和样本划分的类别同时收敛。

在这里插入图片描述

三、优缺点与优化方法

KMenas的优点:

在这里插入图片描述
根据以上特点,我们可以从下面几个角度对算法做调优。

1、数据预处理:归一化和异常点过滤

KMeans本质上是一种基于欧式距离度量的数据划分方法,均值和方差大的维度将对数据的聚类结果产生决定性影响。所以在聚类前对数据(具体的说是每一个维度的特征)做归一化和单位统一至关重要。此外,异常值会对均值计算产生较大影响,导致中心偏移,这些噪声点最好能提前过滤。

2.合理选择K值

K值的选择一般基于实验和多次实验结果。例如采用手肘法,尝试不同K值并将对应的损失函数画成折线。手肘法认为图上的拐点就是K的最佳值

为了将找寻最佳K值的过程自动化,研究人员提出了Gap Statistic方法。它的有点是我们不再需要肉眼判断,只需要找到最大的Gap Statistic对应的K即可。

在这里插入图片描述
3.改进初始值的选择

之前我们采取随机选择K个中心的做法,可能导致不同的中心点距离很近,就需要更多的迭代次数才能收敛。如果在选择初始中心点时能让不同的中心尽可能远离,效果往往更好。这类算法中,以K-Means++算法最具影响力。

4.采用核函数

主要思想是通过一个非线性映射,将输入空间中的数据点映射到高位的特征空间中,并在新的空间进行聚类。非线性映射增加了数据点线性可分的概率(与SVM中使用核函数思想类似)对于非凸的数据分布可以达到更为准确的聚类结果。

四、从EM算法解释KMeans

EM(Expectation-Maximum)算法即期望最大化算法,是最常见的隐变量估计方法。EM算法是一种迭代优化策略,每一次迭代都分为两步:期望步(E)、极大步(M)。EM算法的提出最初是为了解决数据缺失情况下的参数估计问题,基本思想是首先根据已有的观测数据,通过极大似然估计估计出模型的参数;再根据上一步估计出的参数值估计缺失数据的值;最后根据估计出的缺失数据和原有的观测数据重新对参数值进行估计,反复迭代直到收敛。

EM算法基础和收敛有效性等问题可以参考Dempster、Laird和Rubin三人于1977年所做的文章《Maximum likelihood from incomplete data via the EM algorithm》。

KMeans算法等价于用EM算法求解以下含隐变量的最大似然问题:

在这里插入图片描述
在这里插入图片描述

五、手推KMeans

最后,为大家提供一个pyTorch手推实现KMeans的代码(通过sklearn包也能方便调用),结合理论梳理一遍具体实现,相信可以理解的更为扎实。

在这里插入图片描述

小结

KMeans作为一种无监督聚类算法,在日常生活中有大量应用。经过适当的预处理,可以对数据做初步分析,甚至挖掘出隐含的价值信息(例如对用户日志做聚类,得到一些高频高质量的新FAQ)。相比于SVM、GBDT等机器学习算法,理解起来相对通俗易懂,实乃实在又实用。

Python实现聚类K-means算法 本文内容、数据参考周志华《机器学习》,代码部分为个人实现,如有错误还请指出。 阅读详情

相关推荐

Kmeans聚类算法 python sklearn 用户画像

1、基本概念; 聚类分析简称聚类(clustering),是一个把数据集划分成子集的过程,每一个子集是一个簇(cluster),使得簇中的样本彼此相似,但与其他簇中的样本不相似。 聚类分析不需要事先知道样本的类别,甚至不用知道类别个数,因此它是一种典型的无监督学习算法,一般用于数据探索,比如群组发现和离群点检测,还可以作为其他算法的预处理步骤。 在工作中遇到用户画像、群组划分问题

liuaaawen的博客 1万+

全面解析Kmeans聚类算法(Python)

Clustering (聚类) 是常见的unsupervised learning (无监督学习)方法,简单地说就是把相似的数据样本分到一组(簇),聚类的过程. 我们并不清楚某一类是什么(通常无标签信息),需要实现的目标只是把相似的样本聚到一起,即只是利用样本数据本身的分布规律。 在本文中,我将详细介绍聚类算法,喜欢本文记得收藏、关注、点赞。 【注】完整版代码、数据、技术交流文末提供。 聚类算法可以大致分为传统聚类算法以及深度聚类算法: 传统聚类算法主要是根据原特征+基于划分/密度/层次等方法。

Python学习与数据挖掘 4万+

python使用Kmeans算法实现文档聚类

实现文档聚类的总体思想: 将每个文档的关键词提取,形成一个关键词集合N; 将每个文档向量化,可以参看计算余弦相似度那一章; 给定K个聚类中心,使用Kmeans算法处理向量; 分析每个聚类中心的相关文档,可以得出最大的类或者最小的类等; 将已经分好词的文档提取关键词,统计词频: # 计算每个文档的关键词和词频 # 关键词统计和词频统计,以列表形式返回 def Count(...

weixin_33845477的博客 774

K-means聚类算法原理及python实现

文章目录一.聚类算法二.K-means聚类算法三.K-means算法步骤详解Step1.K值的选择Step2.距离度量2.1.欧式距离2.2.曼哈顿距离2.3.余弦相似度Step3.新质心的计算Step4.是否停止K-means四.K-means算法代码实现1.其伪代码如下2.python实现五.K-means算法补充六.小结 一.聚类算法     &nbs...

Flaneur-yz的博客 26万+

Python实现-Kmeans聚类算法

Python实现-Kmeans聚类算法 1.Kmeans聚类定义 2.问题描述 3.实现过程 1. Kmeans聚类算法 Kmeans聚类算法: k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给...

g1x2w3的博客 5295

python手写kmeans以及kmeans++聚类算法

自己用python手写实现了kmeans与kmeans++算法。记录一下,说不定以后就用着了呢。 首先是用到的几个自定义函数: def nearest(data,cluster_center): n = len(cluster_center) m = len(data) sum1 = 0 dis = [] for i in range(n): ...

qq_41978536的博客 1288

kmeans聚类算法python实现_Python实现Kmeans聚类算法

本节内容:本节内容是根据上学期所上的模式识别课程的作业整理而来,第一道题目是Kmeans聚类算法,数据集是Iris(鸢尾花的数据集),分类数k是3,数据维数是4。关于聚类聚类算法是这样的一种算法:给定样本数据Sample,要求将样本Sample中相似的数据聚到一类。有了这个认识之后,就应该了解了聚类算法要干什么了吧。说白了,就是归类。首先,我们需要考虑的是,如何衡量数据之间的相似程度?比如说,有一...

weixin_39565300的博客 2453

python核心编程之实现Kmeans聚类算法

这篇文章主要为大家详细介绍了Python实现Kmeans聚类算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下关于聚类 聚类算法是这样的一种算法:给定样本数据Sample,要求将样本Sample中相似的数据聚到一类。有了这个认识之后,就应该了解了聚类算法要干什么了吧。说白了,就是归类。 首先,我们需要考虑的是,如何衡量数据之间的相似程度?比如说,有一群说不同语言的人,我们一般是根据他们的方言来...

python核心编程 1270

kmeans聚类算法代码python_Kmeans文档聚类算法实现之python

实现文档聚类的总体思想:将每个文档的关键词提取,形成一个关键词集合N;将每个文档向量化,可以参看计算余弦相似度那一章;给定K个聚类中心,使用Kmeans算法处理向量;分析每个聚类中心的相关文档,可以得出最大的类或者最小的类等;将已经分好词的文档提取关键词,统计词频:#计算每个文档的关键词和词频#关键词统计和词频统计,以列表形式返回defCount(resfile):t={}infile= open...

weixin_39540744的博客 416

Python3实现KMeans聚类算法

# -*- coding:utf-8 -*- __aithor__ = 'yangxin_ryan' from numpy import * from matplotlib import pyplot as plt class K_Means(object): def load_data_set(self, file_name): data_set = [] ...

杨鑫newlife的专栏 1228

Python实现聚类算法:KMeans与DBSCAN详解与应用

聚类算法是无监督学习中的一种核心算法,它将数据集中的样本划分为若干个不相交的子集,即所谓的“簇”,使得簇内的点尽可能相似,而簇间的点尽量相异。这一过程不依赖于预先标注的类别信息,因此被广泛应用于数据挖掘、模式识别和图像分析等领域。scikit-learn是基于Python的开源机器学习库,它提供了简单而强大的工具,用于数据挖掘和数据分析。它的设计遵循了SciPy(Scientific Python)的生态系统,旨在与NumPy和SciPy紧密集成,以提高科学计算的效率和准确性。

weixin_29317963的博客 1639

kmeans聚类算法python_基于Python——Kmeans聚类算法的实现

import numpy as npimport randomimport matplotlib.pyplot as pltfrom calculate_distance_algorithm import euclid_distanceplt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签plt.rcParams['axes.unico...

weixin_39711867的博客 302

kmeans_pytorch:使用PyTorch的kmeans

使用PyTorch的K均值 kmeans的PyTorch实现以利用GPU 入门 import torch import numpy as np from kmeans_pytorch import kmeans # data data_size, dims, num_clusters = 1000, 2, 3 x = np.random.randn(data_size, dims) / 6 x = torch.from_numpy(x) # kmeans cluster_ids_x, cluster_centers = kmeans( X=x, num_clusters=num_clu

kmeans聚类算法python实现、显示折线图_聚类算法kmeans,kmeans++及python实现

1、kmeanskmeans, k-均值聚类算法,能够实现发现数据集的 k 个簇的算法,每个簇通过其质心来描述。kmeans步骤:(1)随机找 k 个点作为质心(种子);(2)计算其他点到这 k 个种子的距离,选择最近的那个作为该点的类别;(3)更新各类的质心,迭代到质心的不变为止。Q:如何选择 k 值?A: 根据 k 取不同的值时,模型性能曲线图。横坐标是聚类数目k,纵坐标是各点到距离中心的距...

weixin_34013327的博客 2226

手把手教你用UC3844设计多路输出反激电源(附PCB布局避坑指南)

本文详细介绍了使用UC3844设计多路输出反激电源的实战技巧,包括核心电路设计、变压器参数计算、PCB布局优化及EMI抑制方法。通过实验室实测数据和项目经验,帮助工程师避开常见设计陷阱,提升电源性能和可靠性。特别附赠PCB布局避坑指南,助力高效完成开关电源设计。

weixin_30300225的博客 570

[南大ICS]PA1 - 开天辟地的篇章: 最简单的计算机

task PA1.1: 实现单步执行, 打印寄存器状态, 扫描内存 task PA1.2: 实现算术表达式求值 task PA1.3: 实现所有要求, 提交完整的实验报告

qq_42474104的博客 1571

Python学习—利用Kmeans聚类算法进行主颜色提取

Python学习—利用Kmeans聚类算法进行主颜色提取 目录 Python学习—利用Kmeans聚类算法进行主颜色提取 1、导入pyrhon需要的相关库 2、原图像 3、读取图像并进行数据类型转换 4、构造Kmeans聚类器 5、获取聚类中心 6、主颜色数据可视化 代码展示: 颜色是一张图像最具代表性的特征,那么如何去对一张图像进行主颜色提取呢?这是今天所要解决的问题。 通过查阅相关资料发现,最常使用的主颜色提取方法是利用Kmeans聚类的方法进行颜色提取。 颜色提取方法流程:

ISP行业的忠实粉丝 8084

保姆级教程:从 TLE 数据源获取到 Cesium 卫星轨迹可视化全流程(含常见报错排查)

本文提供从TLE数据源获取到Cesium卫星轨迹可视化的全流程保姆级教程,涵盖数据预处理、satellite.js计算、Cesium集成及性能优化等关键步骤,并针对常见报错提供详细排查方案,帮助开发者高效实现卫星轨迹可视化。

weixin_29002595的博客 296

聚类算法中 K均值聚类(KMeans)的python实现

** 聚类算法中 K均值聚类(KMeans)的python实现 ** import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_blobs from sklearn import cluster from sklearn.metrics import ...

weixin_44925720的博客 1365

J204B接口数据链路的建立

介绍J204B数据链路层的建立方式

QUACK_G的博客 6554

STM32F103xx / STM32F429VET6最小系统原理图

心血来潮想试一下STM32F4系列和F1系列在编程上有什么差别,手头没有开发板,本着能勤俭节约的原则自己先做一块看看能不能成,看了一下STM32F429VET6的芯片在F429xx中最便宜,对照着数据手册绘制了原理图画了PCB,目前打板中,焊接完如果跑不通回来修改文章。这里我们可以看到,VDD是标准工作电压,VDDA是模拟工作电压,且VDDA必须与VDD等电位,VBAT是备份工作电压,一般接纽扣电池电源,如果存在VREF+引脚,则要求VDDA-VREF+ < 1.2V。截图下来比较糊,不知道为什么。

m0_51294753的博客 1万+

python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现

第一步.随机生成质心由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质心,什么时候这一堆点能够根据这两个质心分为两堆就对了。如下图所示:第二步.根据距离进行分类红色和蓝色的点代表了我们随机选取的质心。既然我们要让这一堆点的分为两堆,且让分好的每一堆点离其质心最近的话,我们...

weixin_39562579的博客 2393

3D 结构光相机工作原理全解 | 从编码投射到三维重建,原理 + 代码 + 工业实战一站式掌握

本文从3D结构光相机的整体架构出发,层层拆解了编码投射、相位计算、相位解包裹、三维重建的核心原理,补充了工业实战所需的公式推导、代码实现、参数调优、设备选型和案例落地,核心总结如下:相位是3D结构光成像的“灵魂”,其精度、稳定性直接决定3D重建的效果,包裹相位与绝对相位的区分的是工业实战的基础;编码投射的核心是“正弦条纹+格雷码条纹”组合,正弦条纹负责高精度相位提取,格雷码条纹辅助解包裹,适配工业场景的精度与稳定性需求;

getusushu的博客 418
上一篇: 0基础Python小白入门进阶自学
下一篇: 养成这几个习惯,学习python并不难!
黑客老许
博客等级 码龄8年 6158粉丝 1028原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值