ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

智能感知实验三:聚类方法在测试数据处理中的应用

2022-01-16 19:00:42  阅读:124  来源: 互联网

标签:pre plt tsne print score 聚类 数据处理 感知 data


实验内容

利用 Iris 数据集设计至少三种聚类模型对数据集进行聚类分析,聚类数为 3。
要求:
1、利用常用性能度量方法评价聚类效果,性能度量指标不少于 4 个。
2、评价不同聚类方法对模型聚类结果的影响。

from sklearn.cluster import * 
import pandas as pd 
import numpy as np 
from sklearn.model_selection import train_test_split 
from sklearn.metrics import * 
 
data=pd.read_csv(open('iris.csv',encoding='utf-8')) 
data['classes'] = data['classes'].apply(lambda x:0 if x=="Iris-setosa" else x) 
data['classes'] = data['classes'].apply(lambda x:1 if x=="Iris-versicolor" else x) 
data['classes'] = data['classes'].apply(lambda x:2 if x=="Iris-virginica" else x) 
 
y=data['classes'].values 
col=data.iloc[:,0:4] 
X=col.values 
X = 1.0*(X - X.mean())/X.std() 
### K-means 
kmeans = KMeans(n_clusters=3, random_state=0).fit(X) 
y_pre = kmeans.labels_ 
print(y_pre) 
print(y) 
print(kmeans.cluster_centers_) 
#外部指标:jaccard 系数,FM 指数,rand 指数 
print('Jaccard 系数:',jaccard_score(y, y_pre,average='weighted') ) 
print('FM 指数:',fowlkes_mallows_score(y, y_pre) ) 
print('Rand 指数:',rand_score(y, y_pre) ) 
#内部指标:DB 指数,轮廓系数,CH 指数 
print('DB 指数:',davies_bouldin_score(X, y_pre) ) 
print('轮廓系数:',silhouette_score(X, y_pre) ) 
print('CH 指数',calinski_harabasz_score(X, y_pre) ) 
output_data = pd.concat([data, pd.Series(kmeans.labels_, index=data.index)], axis=1) # 详
细输出每个样本对应的类别 
output_data.columns = list(data.columns) + ['Type'] 
from sklearn.manifold import TSNE 
tsne = TSNE() 
tsne.fit_transform(data) # 进行数据降维 
# tsne.embedding_可以获得降维后的数据 
# print('tsne.embedding_: \n', tsne.embedding_) 
tsn = pd.DataFrame(tsne.embedding_, index=data.index) # 转换数据格式 
# print('tsne: \n', tsne) 
 
import matplotlib.pyplot as plt 
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 
 
# 不同类别用不同颜色和样式绘图 
color_style = ['r.', 'go', 'b*'] 
for i in range(3): 
 d = tsn[output_data[u'Type'] == i] 
 # dataframe 格式的数据经过切片之后可以通过 d[i]来得到第 i 列数据 
 plt.plot(d[0], d[1], color_style[i], label='Type' + str(i+1)) 
plt.legend() 
plt.show() 
### 层次聚类 
clustering = AgglomerativeClustering(n_clusters=3).fit(X) 
y_pre=clustering.labels_ 
print(y_pre) 
print(y) 
#外部指标:jaccard 系数,FM 指数,rand 指数 
print('Jaccard 系数:',jaccard_score(y, y_pre,average='weighted') ) 
print('FM 指数:',fowlkes_mallows_score(y, y_pre) ) 
print('Rand 指数:',rand_score(y, y_pre) ) 
#内部指标:DB 指数,轮廓系数,CH 指数 
print('DB 指数:',davies_bouldin_score(X, y_pre) ) 
print('轮廓系数:',silhouette_score(X, y_pre) ) 
print('CH 指数',calinski_harabasz_score(X, y_pre) ) 
output_data = pd.concat([data, pd.Series(clustering.labels_, index=data.index)], axis=1) # 
详细输出每个样本对应的类别 
output_data.columns = list(data.columns) + ['Type'] 
from sklearn.manifold import TSNE 
tsne = TSNE() 
tsne.fit_transform(data) # 进行数据降维 
# tsne.embedding_可以获得降维后的数据 
# print('tsne.embedding_: \n', tsne.embedding_) 
tsn = pd.DataFrame(tsne.embedding_, index=data.index) # 转换数据格式 
# print('tsne: \n', tsne) 
 
import matplotlib.pyplot as plt 
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 
 
# 不同类别用不同颜色和样式绘图 
color_style = ['r.', 'go', 'b*'] 
for i in range(3): 
 d = tsn[output_data[u'Type'] == i] 
 # dataframe 格式的数据经过切片之后可以通过 d[i]来得到第 i 列数据 
 plt.plot(d[0], d[1], color_style[i], label='Type' + str(i+1)) 
plt.legend() 
plt.show() 
### DBSCAN 
clustering = DBSCAN(eps=0.2, min_samples=5).fit(X) 
y_pre=clustering.labels_ 
#外部指标:jaccard 系数,FM 指数,rand 指数 
print('Jaccard 系数:',jaccard_score(y, y_pre,average='weighted') ) 
print('FM 指数:',fowlkes_mallows_score(y, y_pre) ) 
print('Rand 指数:',rand_score(y, y_pre) ) 
#内部指标:DB 指数,轮廓系数,CH 指数 
print('DB 指数:',davies_bouldin_score(X, y_pre) ) 
print('轮廓系数:',silhouette_score(X, y_pre) ) 
print('CH 指数',calinski_harabasz_score(X, y_pre) ) 
output_data = pd.concat([data, pd.Series(clustering.labels_, index=data.index)], axis=1) # 
详细输出每个样本对应的类别 
output_data.columns = list(data.columns) + ['Type'] 
from sklearn.manifold import TSNE 
tsne = TSNE() 
tsne.fit_transform(data) # 进行数据降维 
# tsne.embedding_可以获得降维后的数据 
# print('tsne.embedding_: \n', tsne.embedding_) 
tsn = pd.DataFrame(tsne.embedding_, index=data.index) # 转换数据格式 
# print('tsne: \n', tsne) 
 
import matplotlib.pyplot as plt 
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 
 
# 不同类别用不同颜色和样式绘图 
color_style = ['r.', 'go', 'b*'] 
for i in range(3): 
 d = tsn[output_data[u'Type'] == i] 
 # dataframe 格式的数据经过切片之后可以通过 d[i]来得到第 i 列数据 
 plt.plot(d[0], d[1], color_style[i], label='Type' + str(i+1)) 
plt.legend() 
plt.show()

标签:pre,plt,tsne,print,score,聚类,数据处理,感知,data
来源: https://blog.csdn.net/qq_41735944/article/details/122526896

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有