当前位置: 首页 > news >正文

Pandas 构建并评价聚类模型② 第六章

构建并评价聚类模型

  • 构建并评价聚类模型
    • 一、数据读取与准备(代码6 - 6部分)
      • 结果
      • 代码解析
    • 二、Kmeans聚类(代码6 - 6部分)
      • 结果
      • 代码解析
    • 三、数据降维可视化(代码6 - 6部分)
      • 结果
      • 代码解析
    • 四、FMI评价(代码6 - 7部分)
      • 结果
      • 代码解析
    • 五、轮廓系数评价(代码6 - 8部分)
      • 结果
      • 代码解析
    • 六、calinski_harabaz指数评价(代码6 - 9部分)
      • 结果
      • 代码解析
    • 总结

构建并评价聚类模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文主要介绍了如何使用Python构建聚类模型,并对聚类结果进行评价。以下是整体的思维导图:

构建并评价聚类模型
数据读取
Kmeans聚类
数据降维可视化
聚类评价
读取customer.csv文件
设置聚类数为4
使用TSNE降维
绘制聚类结果图
FMI评价
轮廓系数评价
calinski_harabaz指数评价

一、数据读取与准备(代码6 - 6部分)

# 代码6-6
import pandas as pd
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
# 读取数据集
customer = pd.read_csv('./customer.csv', encoding='gbk')
customer_data = customer.iloc[:, :-1]
customer_target = customer.iloc[:, -1]
print(customer_data)
print(customer_target)

结果

在这里插入图片描述

代码解析

  • pd.read_csv('./customer.csv', encoding='gbk'):使用pandas库的read_csv方法读取customer.csv文件,指定编码为gbk
  • customer.iloc[:, :-1]:选取除最后一列之外的所有列作为特征数据。
  • customer.iloc[:, -1]:选取最后一列作为目标数据。

二、Kmeans聚类(代码6 - 6部分)

# Kmeans聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4, random_state=6).fit(customer_data)

结果

在这里插入图片描述

代码解析

  • KMeanssklearn库中的Kmeans聚类算法类。
  • n_clusters=4:指定聚类的数量为4。
  • random_state=6:设置随机种子,保证结果的可重复性。
  • .fit(customer_data):使用特征数据进行模型训练。

三、数据降维可视化(代码6 - 6部分)

# 使用TSNE进行数据降维,降成两维
tsne = TSNE(n_components=2, init='random',random_state=2). fit(customer_data)
df = pd.DataFrame(tsne.embedding_)  # 将原始数据转换为DataFrame
df['labels'] = kmeans.labels_  # 将聚类结果存储进df数据表
# 提取不同标签的数据
df1 = df[df['labels'] == 0]
df2 = df[df['labels'] == 1] 
df3 = df[df['labels'] == 2]
df4 = df[df['labels'] == 3]
# 绘制图形
fig = plt.figure(figsize=(9, 6))  # 设定空白画布,并制定大小
# 用不同的颜色表示不同数据
plt.plot(df1[0], df1[1], 'bo', df2[0], df2[1], 'r*', df3[0], df3[1], 'gD', df4[0], df4[1], 'kD')
plt.savefig('./聚类结果.jpg', dpi=1080) 
plt.show()  # 显示图片

结果

在这里插入图片描述

代码解析

  • TSNEsklearn库中的t - 分布随机邻域嵌入算法,用于数据降维。
  • n_components=2:指定降维后的维度为2。
  • init='random':初始化方式为随机。
  • random_state=2:设置随机种子。
  • pd.DataFrame(tsne.embedding_):将降维后的数据转换为DataFrame格式。
  • df['labels'] = kmeans.labels_:将聚类结果添加到DataFrame中。
  • plt.plot:使用matplotlib库绘制散点图,不同的符号和颜色表示不同的聚类。
  • plt.savefig:保存绘制的图形。
  • plt.show:显示图形。
    在这里插入图片描述

四、FMI评价(代码6 - 7部分)

# 代码6-7
from sklearn.metrics import fowlkes_mallows_score
from sklearn.cluster import KMeans  # 确保导入KMeansfor i in range(1, 7):# 构建并训练模型,显式设置n_init=10kmeans = KMeans(n_clusters=i, random_state=6, n_init=10).fit(customer_data)score = fowlkes_mallows_score(customer_target, kmeans.labels_)print('customer数据聚%d类FMI评价分值为:%f' % (i, score))

结果

在这里插入图片描述

代码解析

  • fowlkes_mallows_scoresklearn库中的Fowlkes - Mallows指数,用于评价聚类结果与真实标签的相似性。
  • for i in range(1, 7):循环尝试不同的聚类数,从1到6。
  • KMeans(n_clusters=i, random_state=6).fit(customer_data):使用不同的聚类数构建并训练Kmeans模型。
  • fowlkes_mallows_score(customer_target, kmeans.labels_):计算FMI得分。

五、轮廓系数评价(代码6 - 8部分)

# 代码6-8
import matplotlib.pyplot as plt  # 补充导入matplotlib.pyplot
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans  # 补充导入KMeanssilhouettteScore = []
for i in range(2, 10):# 构建并训练模型,显式设置n_init=10以消除警告kmeans = KMeans(n_clusters=i, random_state=6, n_init=10).fit(customer_data)score = silhouette_score(customer_data, kmeans.labels_)silhouettteScore.append(score)plt.figure(figsize=(10, 6))
plt.plot(range(2, 10), silhouettteScore, linewidth=1.5, linestyle='-')
plt.savefig('./轮廓系数.jpg', dpi=1080)
plt.show()

结果

在这里插入图片描述

代码解析

  • silhouette_scoresklearn库中的轮廓系数,用于评价聚类的紧密程度和分离程度。
  • for i in range(2, 10):循环尝试不同的聚类数,从2到9。
  • KMeans(n_clusters=i, random_state=6).fit(customer_data):使用不同的聚类数构建并训练Kmeans模型。
  • silhouette_score(customer_data, kmeans.labels_):计算轮廓系数得分。
  • plt.plot:绘制轮廓系数随聚类数变化的曲线。

六、calinski_harabaz指数评价(代码6 - 9部分)

# 代码6-9
from sklearn.metrics import calinski_harabasz_score
from sklearn.cluster import KMeans  # 补充导入(若未导入会报错,这里假设是遗漏)for i in range(2, 5):# 构建并训练模型,显式设置 n_init=10 以消除警告kmeans = KMeans(n_clusters=i, random_state=2, n_init=10).fit(customer_data)score = calinski_harabasz_score(customer_data, kmeans.labels_)print('customer数据聚%d类calinski_harabaz指数为:%f' % (i, score))	

结果

在这里插入图片描述

代码解析

  • calinski_harabasz_scoresklearn库中的Calinski - Harabasz指数,用于评价聚类的紧凑性和分离性。
  • for i in range(2, 5):循环尝试不同的聚类数,从2到4。
  • KMeans(n_clusters=i, random_state=2).fit(customer_data):使用不同的聚类数构建并训练Kmeans模型。
  • calinski_harabasz_score(customer_data, kmeans.labels_):计算Calinski - Harabasz指数得分。

总结

通过本文的学习,读者可以掌握以下知识与技能:

  1. 使用pandas库读取CSV文件。
  2. 使用sklearn库的Kmeans算法进行聚类分析。
  3. 使用TSNE算法对高维数据进行降维并可视化。
  4. 使用FMI、轮廓系数和Calinski - Harabasz指数对聚类结果进行评价。

这些技能可以帮助读者在实际项目中更好地处理聚类问题,选择合适的聚类数,提高聚类的效果。

相关文章:

  • 红黑树的实现
  • MidJourney生成王昭君全身像提示词
  • 学习是有方法的——费曼学习法
  • golang选项设计模式
  • 参考文献标准中与永久标识相关的PID、URN、DOI等概念的理解和区分
  • 【MyBatis-11】MyBatis批处理:提升数据操作性能的利器
  • 【LeetCode 热题100】17:电话号码的字母组合(详细解析)(Go语言版)
  • 【typenum】 11 私有模块(private.rs)
  • 开机自启rc.local
  • ctr查看镜像
  • 需求文档不完整,如何确保开发理解一致?
  • STM32八股【9】-----volatile关键字
  • 学习!FastAPI
  • ubuntu安装vmware启动虚拟机失败
  • 计算机组成与体系结构:缓存一致性(Cache Coherence)
  • 第四章:WebSocket 通信机制全解与客户端发包实录
  • BOM知识点
  • 线程池学习笔记
  • Linux系统编程——system函数和popen函数的使用方法以及区别
  • 三维重建(二十三)——各种参数的测试(废案)
  • 内蒙古赤峰市城建集团董事长孙广通拟任旗县区党委书记
  • 外媒:哈马斯一名高级指挥官尸体被发现,系辛瓦尔弟弟
  • 种植耐旱作物、启动备用水源,甘肃各地多举措应对旱情
  • 墨西哥海军帆船纽约撞桥事故已致2人死亡19人受伤
  • 上海虹桥国际咖啡文化节开幕,推出茶咖文化特色街区、宝妈咖啡师培训
  • 选址江南制造总局旧址,上海工业博物馆建设有新进展