最全!导入csv文件+归一化+PCA降维+K-Means聚类+效果评估+可视化 项目实战

news/2024/7/5 6:55:22

数据说明

 目标要求是实现wine数据集的聚类算法

实现思路及步骤

(1)使用pandas库读取wine数据集

(2)将wine数据集的数据和标签拆分开。

(3)将wine数据集划分为训练集和测试集。

(4)标准化wine数据集。

(5)对wine数据集进行PCA降维。

(6)构建聚类数目为3的K-Means模型。

(7)对比真实标签和聚类标签求取FMI。

(8)在聚类数目为2~10类时,确定最优聚类数目。

(9)求取模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目。

(10)求取Calinski-Harabasz指数,确定最优聚类数目。

具体实现

(1)使用pandas库读取wine数据集。

import pandas as pd
import numpy as np
wine = pd.read_csv(r'C:\Users\alan\Desktop\归档课后实训\第6章\wine.csv')
print('wine:',wine.shape)         
       

(2)将wine数据集的数据和标签拆分开。

根据数据说明,我们发现wine数据集的标签为class

 wine数据集的标签

wine_target = wine['Class']#酒类的标签为类别
print('wine数据集的标签为:\n',wine_target)

 wine数据集的特征

wine_names = wine.iloc[:,1:]#wine数据集的特征名
print(wine_names.head(n = 2))#输出前两列

(3)将wine数据集划分为训练集和测试集。

使用train_test_split()函数,如果传入的是一组数据(2个,分别为训练集和测试集),那么生成的就是这一组数据随机划分后的训练集和测试集总共两组(4个)。

接受的参数test_size若为浮点数代表测试集占总数的百分比,若为int型则为测试集的指定数目。

random_state参数代表随机种子编号

print('原始数据集标签的形状为: ',wine_target.shape)
print('原始数据集特征的形状为: ',wine_names.shape)
from sklearn.model_selection import train_test_split
wine_data_train, wine_data_test, \
wine_target_train, wine_target_test = \
train_test_split(wine_names, wine_target, test_size = 0.2, random_state = 42)
#测试集和训练集2,8分,随机种子代码为42
print('训练集数据的形状为: ',wine_data_train.shape)
print('训练集标签的形状为: ',wine_target_train.shape)
print('测试集数据的形状为: ',wine_data_test.shape)
print('测试集标签的形状为: ',wine_target_test.shape)

(4)标准化wine数据集。

转换器主要有两个方法。

fit()通过分析特征和目标值提取有价值的信息

transform()对特征进行转换

from sklearn.preprocessing import StandardScaler
stdScale = StandardScaler().fit(wine_data_train)#生成规则
#将规则应用于训练集
wine_trainScaler = stdScale.transform(wine_data_train)
#将规则应用于测试集
wine_testScaler = stdScale.transform(wine_data_test)
print('标准差标准化后训练集数据的方差为:',np.var(wine_trainScaler))
print('标准差标准化后训练集数据的均值为:',np.mean(wine_trainScaler))
print('标准差标准化后测试集数据的方差为:',np.var(wine_testScaler))
print('标准差标准化后测试集数据的均值为:',np.mean(wine_testScaler))

(5)对wine数据集进行PCA降维。

from sklearn.decomposition import PCA
#生成规则
pca = PCA(n_components = 5).fit(wine_trainScaler)
#应用于测试集
wine_trainPca = pca.transform(wine_trainScaler)
#应用于训练集
wine_testPca = pca.transform(wine_testScaler)
print('降维后数据集测试集的形状为:',wine_testPca.shape)
print('降维后数据集训练集的形状为:',wine_trainPca.shape)

 (6)构建聚类数目为3的K-Means模型。

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 3, random_state = 123).fit(wine_trainPca)#构建并训练模型
print('构建的k-Means模型为:\n',kmeans);

同时进行了聚类结果的可视化

#聚类结果可视化
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
#使用TSNE进行数据降维,降成两维
tsne = TSNE(n_components = 2, init = 'random', random_state = 177).fit(wine_trainPca)
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]
#绘制图像
fig = plt.figure(figsize = (9, 6))#设定空白画布并制定大小
#用不同颜色表示不同数据
plt.plot(df1[0], df1[1], 'bo', df2[0], df2[1], 'r*', df3[0], df3[1], 'gD')
plt.show()

 

(7)对比真实标签和聚类标签求取FMI。

from sklearn.metrics import fowlkes_mallows_score
score = fowlkes_mallows_score(wine_target_train,kmeans.labels_)
print('wineTrain数据集类FMI评价分值为: %f'%(score))

(8)在聚类数目为2~10类时,确定最优聚类数目。

for i in range(2, 11):
    #构建并训练模型
    kmeans = KMeans(n_clusters = i, random_state = 123).fit(wine_trainPca)#构建并训练模型
    score = fowlkes_mallows_score(wine_target_train,kmeans.labels_)
    print('wineTrain数据集%d类FMI评价分值为: %f'%(i, score))

 

(9)求取模型的轮廓系数,绘制轮廓系数折线图,确定最优聚类数目。

通过图标发现当聚类数目为3时,效果最佳

from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
sillhouettteScore = []
for i in range(2, 11):
    #构建并训练模型
    kmeans = KMeans(n_clusters = i, random_state = 123).fit(wine_trainPca)#构建并训练模型

#     print(wine_trainPca.shape, ' ' ,kmeans.labels_.shape)

    score = silhouette_score(wine_trainPca,kmeans.labels_)
    sillhouettteScore.append(score)

plt.figure(figsize=(10, 6))
plt.plot(range(2, 11), sillhouettteScore, linewidth = 1.5, linestyle = '-')
plt.show()

(10)求取Calinski-Harabasz指数,确定最优聚类数目。

from sklearn import metrics
for i in range(2, 11):
    kmeans = KMeans(n_clusters = i, random_state = 123).fit(wine_trainPca)#构建并训练模型
    score = metrics.calinski_harabasz_score(wine_trainPca,kmeans.labels_)
    print('wineTrain数据集%d类calinski_harabaz指数为: %f'%(i, score))

 


http://lihuaxi.xjx100.cn/news/109695.html

相关文章

linux安装RabbitMQ

查看自己的linux发行版本 cat /etc/redhat-release安装依赖 yum -y install socat #Erlang内存管理依赖安装Erlang和RabbitMQ RabbitMQ 由于RabbitMQ是有Erlang开发的所有安装RabbitMQ需要使用到Erlang环境 Erlang GitHub下载地址: https://github.com/rabbi…

无量纲数:计算流体动力学和数值传热学常用准数总结

参考文献 (简称“数传”) 陶文铨. 数值传热学[M]. 第二版. 西安: 西安交通大学出版社, 2001年. (简称“V & M”) Versteeg H K, Malalasekera W. An Introduction to Computational Fluid Dynamics: The Finite Volume Meth…

网络编程:专业术语(IP、端口、字节序、套接字(socket))

一、IP 什么是ip:在因特网中用于区分主机的唯一标识 ​表现形式:点分形式的字符串 ” a.b.c.d“ ->192.168.16.58 0-255 ip地址分类: IP协议是为计算机网络相互连接进行通信而设计的协议 那就是给因特网上的每台计算机和其它设备…

MaxViT:多轴视觉Transformer

论文链接:https://arxiv.org/abs/2204.01697 代码链接:https://github.com/google-research/maxvit 如果进入不了github就直接在这里下载,不过没有权重文件,免费的:https://download.csdn.net/download/weixin_4491103…

使用布谷鸟过滤器对 logback 日志一定周期内重复异常堆栈打印进行压缩过滤

前因 前阵子日子线上有个bug,但是由于触发过于频繁导致日志打印全是这个bug的堆栈,全是重复堆栈内容日志一下变得不友好起来,搜索有没有什么优化办法。 偶然看到[近期业务大量突增微服务性能优化总结-2.开发日志输出异常堆栈的过滤插件]这篇…

网页批量下载图片-怎么一键快速下载网页图片的工具

网页批量下载图片,今天给大家分享一款免费图片批量下载软件,支持任意格式的图片批量下载,只需要输入关键词或批量导入网页链接即可批量下载图片。每个人都可以拥有各种高清图源。支持批量图片压缩/放大/添加水印等等处理/详细如图 这款免费图…

GBase8s jdbc 驱动url介绍

GBase8s jdbc 驱动url介绍 GBase8s jdbc驱动是一款实现jdbc3.0规范以及jdbc4.0绝大部分规范的标准通用接口,故在使用方式上同其它数据库驱动一样,并不存在学习成本。下面具体介绍一下使用方式 1、URL说明 标准格式如下: jdbc:gbasedbt-sqli:/…

渗透测试基础- - -windows网络安全常用dos命令

目录 一,DOS是什么 二,windows常用命令 1.查看系统分区 2.搜索指定文件:for 3.创建文件:echo 4.查看文件内容: 5.删除文件:del 6.隐藏文件命令:attrib 7.关机: 8.测试网络…