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

相关推荐
熙曦Sakura9 分钟前
完全竞争市场
笔记
WeeJot嵌入式26 分钟前
卷积神经网络:深度学习中的图像识别利器
人工智能
脆皮泡泡35 分钟前
Ultiverse 和web3新玩法?AI和GameFi的结合是怎样
人工智能·web3
机器人虎哥38 分钟前
【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测
人工智能·机器学习
码银1 小时前
冲破AI 浪潮冲击下的 迷茫与焦虑
人工智能
用户37791362947551 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法
何大春1 小时前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
uncle_ll1 小时前
PyTorch图像预处理:计算均值和方差以实现标准化
图像处理·人工智能·pytorch·均值算法·标准化
宋138102797201 小时前
Manus Xsens Metagloves虚拟现实手套
人工智能·机器人·vr·动作捕捉
SEVEN-YEARS1 小时前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow