k-means算法的鸢尾花的分类.本数据共有4个维度,试比较选用其中哪几个维度聚类效果最佳。(分别使用花萼长度、花萼宽度、花瓣长度、花瓣宽度四个维度进行聚类,并将聚类结果可视化。) (数据集为csv文件,csv、文件内容有Sepal.Length、Sepal.Width、Petal.Length、Petal.Width,写出具体代码)
时间: 2023-07-10 07:26:23 浏览: 64
好的,我会尽力回答你的问题。
首先,我们需要导入相应的库和数据集。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 读取数据集
data = pd.read_csv('iris.csv')
```
接下来,我们可以分别使用花萼长度、花萼宽度、花瓣长度、花瓣宽度四个维度进行聚类,并将聚类结果可视化。
```python
# 分别选取四个维度
X1 = data[['Sepal.Length', 'Sepal.Width']]
X2 = data[['Petal.Length', 'Petal.Width']]
X3 = data[['Sepal.Length', 'Petal.Length']]
X4 = data[['Sepal.Width', 'Petal.Width']]
# KMeans算法聚类
kmeans1 = KMeans(n_clusters=3).fit(X1)
kmeans2 = KMeans(n_clusters=3).fit(X2)
kmeans3 = KMeans(n_clusters=3).fit(X3)
kmeans4 = KMeans(n_clusters=3).fit(X4)
# 可视化聚类结果
fig, ax = plt.subplots(2, 2, figsize=(10, 10))
ax[0, 0].scatter(X1.iloc[:, 0], X1.iloc[:, 1], c=kmeans1.labels_)
ax[0, 0].scatter(kmeans1.cluster_centers_[:, 0], kmeans1.cluster_centers_[:, 1], marker='*', s=200, c='#050505')
ax[0, 0].set_xlabel('Sepal.Length')
ax[0, 0].set_ylabel('Sepal.Width')
ax[0, 0].set_title('KMeans Clustering with Sepal Dimensions')
ax[0, 1].scatter(X2.iloc[:, 0], X2.iloc[:, 1], c=kmeans2.labels_)
ax[0, 1].scatter(kmeans2.cluster_centers_[:, 0], kmeans2.cluster_centers_[:, 1], marker='*', s=200, c='#050505')
ax[0, 1].set_xlabel('Petal.Length')
ax[0, 1].set_ylabel('Petal.Width')
ax[0, 1].set_title('KMeans Clustering with Petal Dimensions')
ax[1, 0].scatter(X3.iloc[:, 0], X3.iloc[:, 1], c=kmeans3.labels_)
ax[1, 0].scatter(kmeans3.cluster_centers_[:, 0], kmeans3.cluster_centers_[:, 1], marker='*', s=200, c='#050505')
ax[1, 0].set_xlabel('Sepal.Length')
ax[1, 0].set_ylabel('Petal.Length')
ax[1, 0].set_title('KMeans Clustering with Sepal and Petal Dimensions')
ax[1, 1].scatter(X4.iloc[:, 0], X4.iloc[:, 1], c=kmeans4.labels_)
ax[1, 1].scatter(kmeans4.cluster_centers_[:, 0], kmeans4.cluster_centers_[:, 1], marker='*', s=200, c='#050505')
ax[1, 1].set_xlabel('Sepal.Width')
ax[1, 1].set_ylabel('Petal.Width')
ax[1, 1].set_title('KMeans Clustering with Sepal and Petal Dimensions')
plt.show()
```
运行以上代码,我们就可以得到四张图像,分别表示使用不同的维度进行聚类的结果。可以看到,使用花瓣长度和花瓣宽度这两个维度进行聚类的效果最佳,可以清晰地将数据集分为三类。而使用其他维度进行聚类,效果则稍微逊色一些。