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

相关推荐
海棠AI实验室11 分钟前
AI的进阶之路:从机器学习到深度学习的演变(一)
人工智能·深度学习·机器学习
hunteritself14 分钟前
AI Weekly『12月16-22日』:OpenAI公布o3,谷歌发布首个推理模型,GitHub Copilot免费版上线!
人工智能·gpt·chatgpt·github·openai·copilot
IT古董1 小时前
【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
人工智能·机器学习·分类
centurysee1 小时前
【最佳实践】Anthropic:Agentic系统实践案例
人工智能
mahuifa1 小时前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
四口鲸鱼爱吃盐1 小时前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
冷眼看人间恩怨1 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
蓝天星空1 小时前
Python调用open ai接口
人工智能·python
睡觉狂魔er1 小时前
自动驾驶控制与规划——Project 3: LQR车辆横向控制
人工智能·机器学习·自动驾驶
scan7242 小时前
LILAC采样算法
人工智能·算法·机器学习