机器学习——聚类算法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接口列表

相关推荐
春日见9 分钟前
如何入门端到端自动驾驶?
linux·人工智能·算法·机器学习·自动驾驶
光锥智能17 分钟前
从自动驾驶到 AI 能力体系,元戎启行 GTC 发布基座模型新进展
人工智能
luoganttcc17 分钟前
自动驾驶 世界模型 有哪些
人工智能·机器学习·自动驾驶
禁默27 分钟前
光学与机器视觉:解锁“机器之眼”的核心密码-《第五届光学与机器视觉国际学术会议(ICOMV 2026)》
人工智能·计算机视觉·光学
2401_8769075229 分钟前
Python机器学习实践指南
开发语言·python·机器学习
深小乐40 分钟前
不是DeepSeek V4!这两个神秘的 Hunter 模型竟然来自小米
人工智能
laozhao4321 小时前
科大讯飞中标教育管理应用升级开发项目
大数据·人工智能
rainbow7242441 小时前
AI人才简历评估选型:技术面试、代码评审与项目复盘的综合运用方案
人工智能·面试·职场和发展
CrystalShaw1 小时前
[AI codec]opus-1.6\DRED 编码侧 学习笔记
笔记·学习