kmeans聚类算法python

前言

日常生活中,从人脸识别、语音识别到搜索引擎,我们看到越来越多人工智能领域的算法逐渐走向落地。尽管全球每日新增数据量以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等机器学习算法,理解起来相对通俗易懂,实乃实在又实用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值