机器学习——聚类算法K-Means

目录

一、初识聚类

[1. 认识聚类算法](#1. 认识聚类算法)

[2. 聚类的流程](#2. 聚类的流程)

[3. 簇内误差平方和](#3. 簇内误差平方和)

Inertia越小模型越好吗?

二、KMeans介绍

[1. 重要参数n_clusters](#1. 重要参数n_clusters)

[2. 模型评估指标](#2. 模型评估指标)

(1)真实标签己知的时候

(2)真实标签未知的时候

三、sklearn中的聚类算法(自查)

[1. 类型](#1. 类型)

[2. KMeans参数列表](#2. KMeans参数列表)

[3. KMeans属性列表](#3. KMeans属性列表)

[4. KMeans接口列表](#4. KMeans接口列表)


一、初识聚类

1. 认识聚类算法

聚类算法又叫做 " 无监督分类 " ,其目的是 ++将数据划分成有意义或有用的组(或族)++。这种划分可以 基于我们的 业务需求 或 建模需求来 完成,也可以 单纯地帮助我们 探索数据的 自然结构和分布。

聚类和分类的不同:

2. 聚类的流程

这个过程在可以 由下图来显示,我们规定,将数据分为 4 簇(K=4),其中白色 X 代表质心的位置:

在每次迭代中 被分配到 这个质心上的 样本都是 一致的,即 每次新生成的簇 都是 一致的,所有的样本点 都不会再 从一个簇转移到 另一个簇,质心就 不会变化了。

3. 簇内误差平方和

被分在同一个簇 中的数据是 有相似性的,而 不同簇中的数据是 不同的。聚类算法追求 " 簇内差异小、簇外差异大 〞。而这个"差异",由 样本点到 其所在簇的质心的 距离来衡量。++对于一个簇来说,所有 样本点到质心的 距离之和越小,就认为这个簇中的样本越相似,簇内差异就越小。++

距离的衡量方法有多种,令 x 表示簇中的 一个样本点,𝛍 表示该簇中的 质心,n 表示 每个样本点中的 特征数目,i 表示组成点 x 的每个特征,则 该样本点 到质心的距离 可以由以下距离 来度量:


如采用欧几里得距离,则一个簇中 所有样本点到质心的距离的 平方和为:

其中,m 为一个簇中样本的 个数,j 是每个样本的编号。这个公式被称为 簇内平方和 (cluster Sum of Square) 又叫做 Inertia。而将一个 数据集中的 所有簇的 簇内平方和相加,就得到了整体平方和 (Total Cluster Sum of Square) ,又叫做 total inertia。 Total Inertia 越小,代表着每个簇内样本 越相似,聚类的效果就越好。因此 KMeans 追求的是,求解能够让 Inertia 最小化的质心。

Inertia越小模型越好吗?

***① 它不是有界的。*我们只知道 Inertia 是 越小越好,是 0 最好,但我们不知道,一个较小的 Inertia 究竟 有没有达到 模型的极限,能否 继续提高。

② 计算太容易受到 特征数目的 影响。 数据维度很大的时候,Inertia 的计算量 会陷入++维度诅咒++之中,计算量 会爆炸,不适合 用来一次次 评估模型。

③ 会受到 超参数 K 的影响。 ++随着 K 越大,Inertia 注定会 越来越小++,但这并不代表 模型的效果 越来越好了。

④ Inertia 对数据的分布有假设。 它假设数据 ++满足 凸分布(即数据在 二维平面图像上 看起来是一个 凸函数的 样子),并且它 假设数据是 各向同性的( isotropic ),即是 说数据的属性 在不同方向上 代表着 相同的含义++。但是 现实中的 数据往往不是这样。所以使用Inertia 作为评估指标,会让聚类算法 在一些细长簇、环形簇、或者不规则形状的 流形时表现不佳:

补充:

每个距离都有自己对应的 Inertia。过去的经验 总结出 不同距离所对应的 质心选择方法和 Inertia,在 Kmeans 中,只要 使用了 正确的质心 和 距离组合,无论 使用什么样的 距离,都 可以达到 不错的 聚类效果。

二、KMeans介绍

涉及模块:sklearn.cluster

1. 重要参数n_clusters

使用 Kmeans 进行聚类。首先要 猜测一下,数据中有几个簇。

2. 模型评估指标

(1)真实标签己知的时候
(2)真实标签未知的时候

++完全 依赖于评价簇内的 稠密程度(簇内差异小)和 簇间的 离散程度(簇外差异大)来 评估聚类的效果++ 。其中 轮廓系数是最常用的聚类算法的评价指标。它对 每个样本来定义,能 够同时衡量:

① 样本与 其自身 所在的簇中的 其他样本的 相似度 a,等于 样本与 同一簇中 所有其他点之间的 平均距离。

② 样本 与 其他簇中的 样本的 相似度 b,等于 样本与 下一个最近的 簇中的 所有点之间的平均距离。

++根据聚类的要求 " 簇内差异小,簇外差异大 〞,我们希望 b 永远大于 a,并且大得越多越好。++

单个样本的 轮廓系数计算为:

经解析可得:

轮廓系数范围是(-1,1),其中++值 越接近 1 表示样本 与自己所在的簇中的样本 很相似,并且与 其他簇中的 样本不相似。当 样本点与 簇外的样本 更相似的时候,轮廓系数就 为负。当 轮廓系数为 0 时,则 代表两个簇中的 样本相似度一致,两个簇本 应该是一个簇++ 。可以 总结为 轮廓系数越接近于 1 越好,负数 则表示聚类 效果非常差。

如果一个簇中的大多数样本 具有比较高的轮廓系数,则 簇会有较高的 总轮廓系数,则整个数据集的 平均轮廓系数越高,则 聚类是合适的。如果 许多样本点具有低轮廓系数 甚至负值,则 聚类 是不合适的,聚类的超参数 K 可能设定得 太大或者太小。

python 复制代码
from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples

# X:样本特征
# y_pred:模型预测结果

# 返回的是一个数据集中 所有样本的轮廓系数的均值
silhouette_score(X, y_pred)
silhouette_score(X, cluster_.labels_)

# 返回的是数据集中 每个样本 自己的轮廓系数
silhouette_samples(X, y_pred)

补充:

三、sklearn中的聚类算法(自查)

1. 类型

聚类算法在 sklearn 中有两种表现形式 ,一种是类,需要实例化,训练 并使用 接口 和属性 来 调用结果。另一种是函数(function),只需要 输入特征矩阵 和 超参数,即可 返回聚类的 结果和 各种指标。

2. KMeans参数列表

3. KMeans属性列表

4. KMeans接口列表

相关推荐
万事可爱^2 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
牧歌悠悠3 小时前
【深度学习】Unet的基础介绍
人工智能·深度学习·u-net
敲敲敲-敲代码3 小时前
【SQL实验】触发器
数据库·笔记·sql
坚毅不拔的柠檬柠檬4 小时前
AI革命下的多元生态:DeepSeek、ChatGPT、XAI、文心一言与通义千问的行业渗透与场景重构
人工智能·chatgpt·文心一言
坚毅不拔的柠檬柠檬4 小时前
2025:人工智能重构人类文明的新纪元
人工智能·重构
jixunwulian4 小时前
DeepSeek赋能AI边缘计算网关,开启智能新时代!
人工智能·边缘计算
Archie_IT4 小时前
DeepSeek R1/V3满血版——在线体验与API调用
人工智能·深度学习·ai·自然语言处理
Moonnnn.4 小时前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
大数据追光猿4 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法
灵感素材坊5 小时前
解锁音乐创作新技能:AI音乐网站的正确使用方式
人工智能·经验分享·音视频