6.2 构建并评价聚类模型

2023-09-21 10:28:47

6.2.1 使用sklearn估计器构建聚类模型

1、聚类的概念

  • 聚类是把各不相同的个体分割为有更多相似性子集合的工作。
  • 聚类生成的子集合称为簇

聚类的要求

  • 生成的簇内部的任意两个对象之间具有较高的相似度
  • 属于不同簇的两个对象间具有较高的相异度

  聚类与分类的区别在于聚类不依赖于预先定义的类,没有预定义的类和样本——聚类是一种无监督的数据挖掘任务

  聚类的输入是一组未被标记的样本,聚类根据数据自身的距离或相似度将它们划分为若干组,划分的原则是组内(内部)距离最小化,而组外(外部)距离最大化,如下图所示。
在这里插入图片描述

2、常见聚类方法

在这里插入图片描述

3、使用sklearn估计器构建聚类模型

sklearn常用的聚类算法模块cluster提供的聚类算法及其适用范围如下所示。
在这里插入图片描述

4、sklearn估计器

  聚类算法实现需要sklearn估计器(estimator)。sklearn估计器和转换器类似,拥有fit和predict两个方法。
在这里插入图片描述

代码:构建K-Means聚类模型

from sklearn.datasets import load_iris  # 鸢尾花数据集 三分类
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler

iris = load_iris()
iris_data = iris['data']
# print(iris_data)
iris_target = iris['target']
# print(iris_target)
scale = MinMaxScaler().fit(iris_data)  # 训练规则
dataScale = scale.transform(iris_data)  # 应用规则
# print(iris_data)
kmeans = KMeans(n_clusters=3, random_state=123)  # 构建模型
kmeans.fit(dataScale)  # 训练模型
print("KMeans模型:", kmeans)

# 聚类结果可视化
import pandas as pd
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

# 使用TSNE进行数据降维,降成二维
tsne = TSNE(n_components=2, init='random', random_state=177).fit(iris_data)
df = pd.DataFrame(tsne.embedding_)
df['labels'] = kmeans.labels_
# 提取不同的标签
df0 = df[df['labels'] == 0]
df1 = df[df['labels'] == 1]
df2 = df[df['labels'] == 2]
# 绘制图形
fig = plt.figure(figsize=(9, 6))
plt.plot(df0[0], df0[1], 'bo',
         df1[0], df1[1], 'r*',
         df2[0], df2[1], 'gD')
plt.show()  # 显示图片

在这里插入图片描述

6.2.2 评价聚类模型

  聚类评价的标准是组内的对象相互之间是相似的(相关的),而不同组中的对象是不同的(不相关的)。即组内的相似性越大,组间差别越大,聚类效果就越好。
sklearn的metrics模块提供的聚类模型评价指标。
在这里插入图片描述
  上表总共列出了6种评价的方法,其中前4种方法均需要真实值的配合才能够评价聚类算法的优劣,后2种则不需要真实值的配合。但是前4种方法评价的效果更具有说服力,并且在实际运行的过程中在有真实值做参考的情况下,聚类方法的评价可以等同于分类算法的评价。
  除了轮廓系数以外的评价方法,在不考虑业务场景的情况下都是得分越高,其效果越好,最高分值均为1。而轮廓系数则需要判断不同类别数目的情况下其轮廓系数的走势,寻找最优的聚类数目。

1、FMI评价法

# 1、使用FMI评价KMeans聚类模型
from sklearn.metrics import fowlkes_mallows_score
from sklearn.datasets import load_iris  # 鸢尾花数据集 三分类
from sklearn.cluster import KMeans
iris = load_iris()
iris_data = iris['data']
iris_target = iris['target']
for i in range(2, 7):
    # 构建并训练模型
    kmeans = KMeans(n_clusters=i, random_state=123).fit(iris_data)
    score = fowlkes_mallows_score(iris_target, kmeans.labels_)
    print('iris数据聚%d类FMI评价分值为:%f' %(i, score))

在这里插入图片描述
  iris数据聚3类的时候FMI评价分值最高,故聚类为3类的时候K-Means聚类模型最好。

2、轮廓系数评价法

  使用轮廓系数评价法评估K-Means模型,然后做出轮廓系数走势图,根据图形判断聚类效果。

# 2、使用轮廓系数评价法评价K-Means聚类模型
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris  # 鸢尾花数据集 三分类
from sklearn.cluster import KMeans
iris = load_iris()
iris_data = iris['data']
iris_target = iris['target']
si = []
for i in range(2, 15):
    kmeans = KMeans(n_clusters=i, random_state=0).fit(iris_data)  # 构建并训练模型
    score = silhouette_score(iris_data, kmeans.labels_)
    si.append(score)

plt.figure(figsize=(10, 6))
plt.plot(range(2, 15), si, linewidth=1.5)
plt.show()

在这里插入图片描述
  从图形结果可以看出,聚类数目为2、3和5、6时平均畸变程度最大。由于iris数据本身就是3种鸢尾花的花瓣、花萼长度和宽度的数据,侧面说明了聚类数目为3的时候效果最佳。

3、Calinski-Harabasz指数评价法

# 3、使用Calinski-Harabasz 指数评价K-Means聚类模型
from sklearn.metrics import calinski_harabasz_score
from sklearn.datasets import load_iris  # 鸢尾花数据集 三分类
from sklearn.cluster import KMeans
iris = load_iris()
iris_data = iris['data']
iris_target = iris['target']
for i in range(2, 7):
    # 构建并训练模型
    kmeans = KMeans(n_clusters=i, random_state=123).fit(iris_data)
    score = calinski_harabasz_score(iris_data, kmeans.labels_)
    print('iris数据聚%d类calinski_harabasz指数为:%f' % (i, score))

在这里插入图片描述
  使用Calinski-Harabasz指数评价法,分值越高,聚类效果越好。从结果可以看出3的得分最高。
  在具备真实值作为参考的情况下,几种方法均可以很好地评估聚类模型。在没有真实值作为参考的时候,轮廓系数评价方法和Calinski-Harabasz指数评价方法可以结合使用。

更多推荐

docker介绍及入门举例

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。Docker的主要优点有:1.提供了一种在任何地方创建、运行和分发应用程序的方法,而不仅仅是在虚拟机

Centos系统常见配置(详细)总结

目录一、简介二、具体内容1、设置静态ip2、重启网络3、ssh登录时自动运行命令4、新增用户并创建家目录5、终端显示bash-4.2#6、更换yum源7、centos系统串口终端自动登陆8、系统启动通过rc.local自动执行脚本9、关闭防火墙10、设置samba三、其他相关链接Ubuntu系统设置常见问题处理详细总结

iOS16新特性:实时活动-在锁屏界面实时更新APP消息 | 京东云技术团队

简介之前在《iOS16新特性:灵动岛适配开发与到家业务场景结合的探索实践》里介绍了iOS16新的特性:实时更新(LiveActivity)中灵动岛的适配流程,但其实除了灵动岛的展示样式,LiveActivity还有一种非常实用的应用场景,那就是锁屏界面实时状态更新:上图是部分已经做出适配的APP,锁屏实时活动的展示。可

RabbitMQ常见问题

一、RabbitMQ如何保证消息不丢失?这是面试时最喜欢问的问题,其实这是个所有MQ的一个共性的问题,大致的解决思路也是差不多的,但是针对不同的MQ产品会有不同的解决方案。而RabbitMQ设计之处就是针对企业内部系统之间进行调用设计的,所以他的消息可靠性是比较高的。1、哪些环节会有丢消息的可能?我们考虑一个通用的MQ

微服务 第二章 CountDownLatch和Semaphone的应用

系列文章目录第二章CountDownLatch和Semaphone的应用第一章Java线程池技术应用文章目录系列文章目录前言1、CountDownLatch1.1、应用场景2、Semaphone前言JavaJUI之并发编程,CountDownLatch和Semaphone的应用1、CountDownLatchCount

【机器学习】TF-IDF以及TfidfVectorizer

TF-IDF定义TF-IDF:全称为"词频一逆文档频率"。TF:某一给定词语在该文档中出现的频率。TFw=词语w在该文档中个数该文档内总词个数TF_w=\frac{词语w在该文档中个数}{该文档内总词个数}TFw​=该文档内总词个数词语w在该文档中个数​。IDF:整个训练集文档集合一共由NNN篇文档组成,其中包含某个给

一文了解云计算

目录🍎云服务🍎云计算类型🍒公有云🍒私有云🍒混合云🍎云计算服务模式🍒IaaS基础设施即服务🍒PaaS平台即服务🍒SaaS软件即服务🍒三者之间区别🦐博客主页:大虾好吃吗的博客🦐专栏地址:闲谈专栏地址云服务云计算是通过互联网提供一个计算服务,其中包括服务器、数据库、存储以及各种应用服务,采用按需付费的

SpringBoot+MyBatisPlus+MySQL不能储存(保存)emoji表情问题解决

1.之前在学习过程中不知道utf8和utf8mb4的区别,也没过多去了解,直到最近设置的数据库编码全是utf8后发现问题所在了,居然不能储存表情包!!!整个人直接傻了,后面知道了utf8是3字节不能储存表情,utf8mb4才可以,废话不多说马上整改,接下来的一幕就令人头疼了。2.我的mysql版本是5.7.40,首先按

Jenkins :添加node权限获取凭据、执行命令

拥有Jenkinsagent权限的账号可以对node节点进行操作,通过添加不同的node可以让流水线项目在不同的节点上运行,安装Jenkins的主机默认作为master节点。1.Jenkins添加node获取明文凭据通过添加node节点,本地监听ssh认证,选则凭据(明文)进行ssh认证,拿到密码。1.新建节点-man

iOS应用上线需要注意的问题

将iOS应用上线到AppStore需要仔细注意一系列问题,以确保应用的质量、安全性和用户体验。以下是一些在iOS应用上线过程中需要注意的关键问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.开发者账号:确保你拥有有效的苹果开发者账号,可以在苹果开发者中心进行注册和管理。2.应

HTML5数据推送SSE原理及应用开发

JavaScript表达行为,CSS表达外观,注意HTML既表达结构(逻辑结构),又表达内容(数据本身)通常需要更新数据时,并不需要更新结构,正是这种不改变组织结构仅改变数据的诉求,推动了数据拉取和数据推送技术的产生。SSE是一种允许服务器端向客户端推送新数据(简称数据推送)的HTML5技术。数据推送有两种替代方案:无

热文推荐