1、使用pandas读取wine.csv,赋给数据框wine_data 2、wine_data中Class列为酒的类别,其余列为酒的相应成分 3、构建K-Means模型,聚集成3个簇 3、使用TSNE进行数据降维,降成2维 3、将原始数据转换为DataFrame,并将聚类结果存储进df数据表 4、提取不同标签的数据 5、设置画布大小为20*12,并使用scatter函数对以上聚类结果进行可视化 6、使用FMI评价法评价建立的K-Means模型,并在聚类数目为1-5时,确定最优聚类数目
时间: 2024-03-21 16:37:42 浏览: 78
好的,下面是实现的代码:
```python
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.manifold import TSNE
from sklearn.metrics import fowlkes_mallows_score
import matplotlib.pyplot as plt
# 读取wine.csv文件,赋给数据框wine_data
wine_data = pd.read_csv('wine.csv')
# 分离出特征和目标列
X = wine_data.iloc[:, 1:]
y = wine_data['Class']
# 构建K-Means模型,聚集成3个簇
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 使用TSNE进行数据降维,降成2维
tsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X)
# 将原始数据转换为DataFrame,并将聚类结果存储进df数据表
df = pd.DataFrame(X_tsne, columns=['x', 'y'])
df['labels'] = kmeans.labels_
# 提取不同标签的数据
df0 = df[df.labels == 0]
df1 = df[df.labels == 1]
df2 = df[df.labels == 2]
# 设置画布大小为20*12,并使用scatter函数对以上聚类结果进行可视化
plt.figure(figsize=(20, 12))
plt.scatter(df0['x'], df0['y'], c='r', label='Cluster 0')
plt.scatter(df1['x'], df1['y'], c='g', label='Cluster 1')
plt.scatter(df2['x'], df2['y'], c='b', label='Cluster 2')
plt.legend()
# 使用FMI评价法评价建立的K-Means模型,并在聚类数目为1-5时,确定最优聚类数目
scores = []
for k in range(1, 6):
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)
score = fowlkes_mallows_score(y, kmeans.labels_)
scores.append(score)
plt.figure(figsize=(10, 6))
plt.plot(range(1, 6), scores, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Fowlkes-Mallows Index')
plt.show()
```
首先,我们使用pandas库的read_csv()函数读取wine.csv文件,并将数据赋值给wine_data数据框。
然后,我们将特征列和目标列分别赋值给变量X和y。
接着,我们使用sklearn库的KMeans()函数构建K-Means模型,并将聚成3个簇。
然后,我们使用fit()函数对模型进行训练,然后使用labels_属性获取聚类结果。
接着,我们使用sklearn库的TSNE()函数进行数据降维,并将降维后的结果存储在X_tsne变量中。
然后,我们将降维后的结果转换为DataFrame,并将聚类结果存储在df数据表中。
接着,我们根据不同的标签提取出不同的数据,并使用matplotlib库的scatter()函数对聚类结果进行可视化。
最后,我们使用FMI评价法评价建立的K-Means模型,并在聚类数目为1-5时,确定最优聚类数目,并使用matplotlib库的plot()函数将结果可视化。
希望对您有帮助。
阅读全文