前言
本文主要就之前学习的算法加以应用,练习使用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('原数据集样本的标签\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降维
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
P_data = pca.fit(wine_data).transform(wine_data)
print('降维后数据集的形状', P_data.shape)
2.T-SNE降维
from sklearn.manifold import TSNE
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_)
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
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指数
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降维具有一定的随机效果,结果不太确定,但是多跑几轮还是有重合的结果。最后就是各种评价指标,侧重点不一样,得出的结果也不近相同。
可以看到数据实验结果,我选择的是准确率较高的实验结果,但是使用不同的降维算法会将同一个样本划分到不同的类簇中,并且两个降维算法可能会产生同样的错误。
|