python 机器学习——Kmeans之K值的选取原理

news/2024/5/20 10:15:47 标签: 聚类, 算法, python, 机器学习

Kmeans之K值的选取

  • 参考

一般而言,没有所谓最好的选择聚类数的方法,通常情况下是需要根据不同的问题,人工进行选择的。选择的时候思考我们运用 K-means 算法聚类的动机是什么,然后选择能最好服务于该目的标聚类数。当人们在讨论选择聚类数目的方法时,有一个可能会谈及的方法叫作“肘部”观察法,下面就来详细介绍这种方法。

(1)原理思路

“肘部”观察法用于粗略预估相对合理的类个数。

思路:因为 K-means 模型最终期望所有数据点到其所属的类簇距离的平方和趋于稳定,所以可以通过观察这个数值随着 K 的走势来找出最佳的类簇数量。理想条件下,这个折线在不断下降并且趋于平缓的过程中会有斜率的拐点,同时也意味着从这个拐点开始对应的 K 值开始,类簇中心的增加不会过于破坏数据聚类的结构。

关于“肘部法则”,我们所需要做的是改变 K 值,也就是聚类类别数目的总数,然后分别运行 Kmeans 聚类方法,然后计算代价函数 J 。

在这里插入图片描述

我们可能会得到一条类似于上图的曲线,好像人的手臂,如果你伸出你的胳膊,那么这就是你的肩关节、肘关节、手,这就是“肘部法则”。这种模式的代价值会迅速下降,从 1 到 2 ,从 2 到 3 之后,会在 3 的时候达到一个肘点。在此之后,代价函数就下降的非常慢,看起来就像使用 3 个聚类来进行聚类是正确的(随着K的增加代价函数总是不会减小的,所以样本自成一类的时候代价函数为0)。应用“肘部法则”的时候,如果得到了一个像上面这样的图,那么这将是一种用来选择聚类个数的合理方法。

(2)K-Means 算法步骤

① 随机初始化 K 个聚类中心( cluster centroid ) μ1,μ2,…,μK

② Cluster Assignment : 对于每个数据点 x(i) ,寻找离它最近的聚类中心,将其归入该类,即:

在这里插入图片描述
其中 c(i) 表示 x(i) 所在的类。

③ Move Centroid : 更新聚类中心 uk 的值为所有属于类 k 的数据点的平均值

④ 重复 ②③ 步直到收敛或者达到最大迭代次数

注意:K-Means 算法的两大缺陷在于:

a. 容易收敛到局部最优解;

b. 需要预先设定簇的数量。

(3)K-Means 算法的优化目标

用 μc(i) 表示第 i 个数据点 x(i) 所在类的中心,则 K-Means 优化的代价函数为:

在这里插入图片描述

希望找到最优参数使得该函数最小化,即:

在这里插入图片描述
① 随机初始化:常用的初始化方法是,从训练数据点中随机选择 K( K < m ) 个数据点,作为初始的聚类中心 μ1,μ2,…,μK 。具体步骤如下:

1、确保 K < m ,也就是确保簇的数量应该小于样本数;

2、随机选择 K 个训练样本;

3、令 K 个簇中心 μ1,…,μK 等于 K 个训练样本。

② 局部最优:算法聚类的性能与初始聚类中心的选择有关,为避免陷入局部最优,应该运行多次( 一般取50 次 )取使得代价函数 J 最小的结果。

在这里插入图片描述

如上图所示,对左图的实际数据做聚类,右上图为收敛至全局最优;右下图为受到随机初始类簇中心点位置影响而最终迭代得到的局部最优,这样便导致无法继续更新聚类中心,使得聚类结果与正确结果有很大出入。

K 均值算法可能陷入局部最优,为了减少这种情况的发生,我们可以基于随机初始化,多次运行 K 均值算法。即进行不同的随机初值设定( 50-1000 次 ),对每一种初值设定的情况分别进行聚类,最后选取代价函数 J(C,U) 最小的作为聚类结果。

K 值选择:Elbow 方法(肘部观察法),绘制 J 随 K 的变化曲线,选择下降速度突然变慢的转折点作为 K 值;对于转折不明显的曲线,可根据 K-Means 算法后续的目标进行选择。

在这里插入图片描述
左图为用 Elbow 方法选择 K 值的情况,右图为用 Elbow 法不适用的情况:因为左图中出现一个突变点,这个点对应的 K 值就是可能的较好的分类数目 K , 如图 K 小于3时,代价函数值有突变,代价函数值下降速度较快,这说明更改 K 值会让整体聚类结果有很大改变,也意味着新的聚类数量有更大的改进空间,这样的 K 值不能反映真实的类簇数量;K>3 时代价函数值下降速度显著放缓,这意味着进一步增加 K 值不再会有利于算法的收敛。像这样 K=3 的点,就是肘点( elbow )。但实际上也有可能出现像右边的图的情况,这时的肘点就没有左图那么明显,于是用 Elbow 法不适用。

当然,我们有时应该根据后续目的( later/downstream purpose )来确定 K 的取值。以根据人的身高和体重划分 T 恤的大小码为例,若我们想将 T 恤大小划分为 S/M/L 这 3 种类型,那么 K 的取值应为 3 ;若想要划分为 XS/S/M/L/XL 这 5 种类型,那么 K 的取值应为 5 。如图所示:

在这里插入图片描述

参考

[1] 吴恩达机器学习课程
[2] 范淼,李超.Python 机器学习及实践[M].清华大学出版社, 北京, 2016.


http://www.niftyadmin.cn/n/1446776.html

相关文章

fzu 2082 过路费(树链剖分)

题目链接&#xff1a;fzu 2082 过路费 题目大意&#xff1a;略。 解题思路&#xff1a;树链剖分裸题。 #include <cstdio> #include <cstring> #include <algorithm>using namespace std; const int maxn 50005; typedef long long ll;#define lson(x) ((x…

跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架

misc子系统在Linux中是一个非常简单的子系统&#xff0c;但是其清晰的框架结构非常适合用来研究设备识别模型。本文从misc子系统的使用出发&#xff0c;通过了解其机制来总结一套的设备识别的驱动框架&#xff0c;即使用使用同一个驱动&#xff0c;向上提供多个设备文件接口&am…

【青梅快讯】快速迭代,最新版本Greenplum 6.10已发布

了解更多Greenplum技术干货&#xff0c;欢迎访问Greenplum中文社区网站 ​自Greenplum 6.0正式发布以来&#xff0c;Greenplum保持了每月一个小版本的快速迭代速度&#xff0c;持续为用户提供新功能与修复补丁。最新版本6.10已于8月10日发布。现在小编带你回顾一下6.8到6.10版本…

python机器学习——Kmeans之K值选取实现(肘部观察法)

Kmeans之K值选取实现# 导入必要的工具包。 import numpy as np from sklearn.cluster import KMeans from scipy.spatial.distance import cdist import matplotlib.pyplot as plt # 使用均匀分布函数随机三个簇&#xff0c;每个簇周围10个数据样本。 cluster1 np.random.unif…

hdu 5044 Tree(树链剖分)

题目链接&#xff1a;hdu 5044 Tree 题目大意&#xff1a;给定一棵树&#xff0c;两种操作&#xff1a; ADD1 u v w&#xff1a;路径uv上的节点值均加上wADD2 u v w&#xff1a;路径uv上的边均加上w 最后分别输出每个节点以及每条边的值。 解题思路&#xff1a;树链剖分&#…

带你了解Greenplum的锁管理机制

了解更多Greenplum技术干货&#xff0c;欢迎访问Greenplum中文社区网站 引言 数据库系统有多种实现并发控制的机制&#xff0c;而锁作为其中一种实现方式&#xff0c;具有非常重要的作用。在这篇文章中&#xff0c;我们将介绍Greenplum中的锁管理机制是如何实现的。本周五&…

10大严重安全问题及预防措施(上)(转)

黑客&#xff0c;诈骗者和专门窃取隐私的人&#xff0c;他们攻击电脑和窃取隐私的花招总是层出不穷。这里列举了最新的攻防策略&#xff0c;以便广大用户有所了解做好防备。  虽然笔者经常打上最新的系统补丁&#xff0c;定期更新病毒库并扫描系统&#xff0c;但读完这篇文章…

python机器学习——主成分分析理论简介

主成分分析理论简介一、特征降维1.1什么是特征降维&#xff1f;1.2为什么要进行特征降维&#xff1f;1.3特征选择和特征抽取二、主成分分析(PCA)理论2.1 算法描述2.2 PCA 在图像识别的应用2.3、主成分分析法优缺点参考一、特征降维 1.1什么是特征降维&#xff1f; 采用低维度…