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

目录

一、初识聚类

1. 认识聚类算法

2. 聚类的流程

3. 簇内误差平方和

    Inertia越小模型越好吗?

二、KMeans介绍

1. 重要参数n_clusters

2. 模型评估指标

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

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

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

1. 类型

2. KMeans参数列表

3. 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 可能设定得 太大或者太小。

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接口列表

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值