【机器学习】聚类算法|KMeans实现流程|SSE误差平法和|SC轮廓系数法|顾客数据聚类分析案例

聚类算法

聚类算法简介

  • 什么是聚类算法?
    • 根据样本之间的相似性,将样本划分到不同的类别中;不同的相似度计算方法,会得到不同的聚类结果,
    • 常用的相似度计算方法有欧式距离法。
    • 聚类算法的目的是在没有先验知识的情况下,自动发现数据集中的内在结构和模式。
    • 无监督学习算法
  • 使用不同的聚类准则,产生的聚类结果不同

在这里插入图片描述

  • 聚类算法在现实中的应用
    • 用户画像,广告推荐,Data Segmentation,搜索引擎的流量推荐,恶意流量识别(搜广推)
    • 基于位置信息的商业推送,新闻聚类,筛选排序
    • 图像分割,降维,识别,离群点检测,信用卡异常消费,发掘相同功能的基因片段
      • 图像分类|目标检测|图像分割

聚类算法分类

  • 1.根据聚类颗粒度分类

在这里插入图片描述

  • 2.根据实现方法分类
    • K-means:按照质心分类,主要介绍K-means,通用、普遍
    • 层次聚类:对数据进行逐层划分,直到达到聚类的类别个数]]
    • DBSCAN聚类(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法
    • 谱聚类是一种基于图论的聚类算法

聚类算法API

sklearn.cluster.KMeans(n_clusters=8)
  • 参数: n_clusters : 开始的聚类中心数量
    • 整型,缺省值=8,生成的聚类数,及产生的质心数
  • 方法
    • estimator.fit(x)
    • estimator.predict(x)
    • estimator.fit_predict(x)
    • 计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)
    • calinski_harabasz_score(x,y_pred) 用来评估聚类效果,数值越大越好

案例 使用KMeans模型数据探索聚类

  • 随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类,尝试分别聚类不同数量的簇,并观察聚类效果:

在这里插入图片描述

  • 实现流程

    • 1.导入依赖包
      • sklearn.cluster.KMeans
      • sklearn.datasets.make_blobs
    • 2.构建数据集
    • 3.模型训练并预测(实例化Kmeans)
    • 4.展示聚类效果
    • 5.评估聚类效果好坏
  • 代码实现

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import calinski_harabasz_score
import matplotlib.pyplot as plt

# 构建数据集1000个样本,每个样本2个特征4个质心簇数据标准差0.4 0.2 0.2 0.2
x, y = make_blobs(n_samples=1000, n_features=2, centers=4, cluster_std=[0.4, 0.2, 0.2, 0.2], random_state=9)
plt.figure()
plt.scatter(x[:, 0], x[:, 1], marker='o')
plt.show()

# 使用k_means聚类
estimator = KMeans(n_clusters=3, random_state=21, n_init='auto')
estimator.fit(x)
y_predict = estimator.predict(x)
# 展示聚类结果
plt.figure()
plt.scatter(x[:, 0], x[:, 1], marker='o', c=y_predict)
plt.show()

# 模型评估 使用CH方法评估
print(calinski_harabasz_score(x, y_predict))
  • 运行结果

    • 预测前

      在这里插入图片描述

    • 预测后

在这里插入图片描述

在这里插入图片描述

KMeans实现流程***

  • 1、事先确定常数K ,常数K意味着最终的聚类类别数
  • 2、随机选择 K 个样本点作为初始聚类中心
  • 3、计算每个样本到 K 个中心的距离,选择最近的聚类中心点作为标记类别
  • 4、根据每个类别中的样本点,重新计算出新的聚类中心点(平均值),如果计算得出的新中心点
    ​ 与原中心点一样则停止聚类,否则重新进行第 2 步过程,直到聚类中心不再变化

模型评估方法

误差平方和 SSE(The sum of squares due to error)

在这里插入图片描述

  • Ci 表示簇
  • k 表示聚类中心的个数
  • p 表示某个簇内的样本
  • m 表示质心点

在这里插入图片描述

结论:SSE 越小,表示数据点越接近它们的 中心,聚类效果越好

“肘”方法 (Elbow method) - K值确定
  • “肘” 方法通过 SSE 确定 n_clusters 的值
    • 对于n个点的数据集,迭代计算 k (from 1 to n),每次聚类完成后计算 SSE
    • SSE 是会逐渐变小的,因为每个点都是它所在的簇中心本身。
    • SSE 变化过程中会出现一个拐点,下降率突然变缓时即认为是最佳 n_clusters 值。
    • 在决定什么时候停止训练时,肘形判据同样有效,数据通常有更多的噪音,在增加分类无法带来更多回报时,我们停止增加类别。

在这里插入图片描述

SC轮廓系数法(Silhouette Coefficient)

  • 轮廓系数法考虑簇内的内聚程度(Cohesion),簇外的分离程度(Separation)。其计算过程如下
    • 对计算每一个样本 i 到同簇内其他样本的平均距离𝑎i,该值越小,说明簇内的相似程度越大
    • 计算每一个样本 i 到最近簇 j 内的所有样本的平均距离 bij,该值越大,说明该样本越不属于其他簇 j
    • 根据下面公式计算该样本的轮廓系数:S = b −a/max⁡(a, b)
    • 计算所有样本的平均轮廓系数
    • 轮廓系数的范围为:[-1, 1]

在这里插入图片描述

  • 结论: SC值越大,聚类效果越好

聚类效果评估 – CH轮廓系数法(Calinski-Harabasz Index)

  • CH系数考虑簇内的内聚成程度,簇外的离散程度,质心的个数

    • 类别内部数据的距离平方和越小越好,类别之间的距离平方和越大越好.聚类的种类数越少越好

    在这里插入图片描述

  • SSW 的含义:相当于SSE,蔟内距离

    • C_pi表示质心</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值