先降维后聚类+评价指标sklearn+wine数据集实战


前言

本文主要就之前学习的算法加以应用,练习使用sklearn库,初学者建议参考,利用wine数据集做实验,该数据集偏小,对电脑要求不高且具有较好的效果。先降维后聚类是本例子的思想。


提示:以下是本篇文章正文内容,下面案例可供参考

一、数据集(wine)

from sklearn import datasets

wine = datasets.load_wine()
wine_data = wine['data']
wine_target = wine['target']
# 数据集的描述信息
wine_desc = wine['DESCR']
print('数据集的描述信息', wine_desc)
print('原始数据集数据的形状为:', wine_data.shape)
print('原始数据集标签的形状为:', wine_target.shape)
print('数据集的长度', len(wine_data))
print('数据集中数据的类型', wine_data.dtype)
print('数据集的类型', type(wine_data))
# print('数据集的数据', wine_data)
print('原数据集样本的标签\n', wine_target)

wine_name = wine['feature_names']
print('数据集的特征名', wine_name)

研究明白数据集是数据处理的第一步

二、对数据的标准化

a)

# 标准差标准化
from sklearn.preprocessing import StandardScaler
wine_data = StandardScaler().fit(wine_data).transform(wine_data)

b)

# 最大最小值归一化
from sklearn.preprocessing import MinMaxScaler
wine_data = MinMaxScaler().fit(wine_data).transform(wine_data)

三、降维

1.PCA降维

# 利用PCA降维,降到二维
from sklearn.decomposition import PCA
# 设置参数n_components=2维度为2 
pca = PCA(n_components=2)
# 传入数据
P_data = pca.fit(wine_data).transform(wine_data)
print('降维后数据集的形状', P_data.shape)

2.T-SNE降维

# 利用TSNE降维,降到二维
from sklearn.manifold import TSNE
# 参数n_components=2设置维度
tsne = TSNE(n_components=2)
# 传入数据
T_data = tsne.fit_transform(wine_data)
print('降维后数据集的形状', T_data.shape)

四、聚类(K-means++)

# 降维前聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3,random_state=10).fit(wine_data)
print(kmeans.labels_)
# 采用降维后的数据进行聚类(K-means)
from sklearn.cluster import KMeans
kmeans_P = KMeans(n_clusters=3,random_state=10).fit(P_data)
kmeans_T = KMeans(n_clusters=3, random_state=10).fit(T_data)
print('构建的KMeans模型为:', kmeans)
print(kmeans.labels_)

五、评估

1、FMI评价法

from sklearn.metrics import fowlkes_mallows_score  # FMI评价法
score_P = fowlkes_mallows_score(wine_target, kmeans_P.labels_)
score_T = fowlkes_mallows_score(wine_target, kmeans_T.labels_)
print("PCA降维后聚类wine数据集的FMI:%f" % (score_P))
print("TSNE降维后聚类wine数据集的FMI:%f" % (score_T))

2、准确率评价

from sklearn.metrics import accuracy_score
arr_P = accuracy_score(kmeans_P.labels_,wine_target)
print('PCA降维后准确率:%f'%(arr_P))
arr_T = accuracy_score(kmeans_T.labels_,wine_target)
print('TSNE降维后准确率:%f'%(arr_T))

3、Calinski-Harabaz 指数

from sklearn import metrics
CH_P=metrics.calinski_harabasz_score(wine_data, kmeans_P.labels_)
print('PCA降维后CH指数:%f' % (CH_P))
CH_T=metrics.calinski_harabasz_score(wine_data, kmeans_T.labels_)
print('PCA降维后CH指数:%f' % (CH_T))

4、Davies-Bouldin Index指数

# Davies-Bouldin Index
from sklearn.metrics import davies_bouldin_score
DBI_P = davies_bouldin_score(wine_data, kmeans_P.labels_)
print('PCA降维后DBI指数:%f' % (DBI_P))
DBI_T = davies_bouldin_score(wine_data, kmeans_T.labels_)
print('T-SNE降维后DBI指数:%f' % (DBI_T))

六、 总结

经过实验,发现了下面几个问题,首先是参数的选择。利用sklearn库中的kmeans算法默认是K-means++,第一个参数是聚类簇的数量,通过对wine数据集分析已知是3类,第二个参数是用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个seed。最终确定为10,是我在0-100中选这个一个相对准确率较高的值。
其次就是PCA降维具有一定的随机效果,结果不太确定,但是多跑几轮还是有重合的结果。最后就是各种评价指标,侧重点不一样,得出的结果也不近相同。
在这里插入图片描述
在这里插入图片描述

可以看到数据实验结果,我选择的是准确率较高的实验结果,但是使用不同的降维算法会将同一个样本划分到不同的类簇中,并且两个降维算法可能会产生同样的错误。

  • 15
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhen-yu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值