已经安装了numpy、pandas、matplotlib、scikit-learn这些库的基础上,使用k-means算法对鸢尾花数据进行聚类分析 1)导入鸢尾花数据集 2)输出数据的前5行 3)用TSNE进行数据的降维,降维到3维空间中 4)使用肘方法搜索合适的聚类数目,输出肘方法的可视化图 5)使用k-means方法进行聚类 6)输出“每簇包含的样本数量”、“每个簇的聚类中心”和“聚类效果V测度” 7)在3D空间中可视化聚类后的数据空间分布,并可视化聚类中心
时间: 2024-02-06 07:10:32 浏览: 127
python3.6.1安装numpy、scipy、scikit-learn、matplotlib(Basemap)、ipytho
以下是对应的Python代码实现:
```python
# 1) 导入鸢尾花数据集
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
# 2) 输出数据的前5行
print(X[:5])
# 3) 用TSNE进行数据的降维,降维到3维空间中
from sklearn.manifold import TSNE
X_tsne = TSNE(n_components=3, random_state=42).fit_transform(X)
print(X_tsne[:5])
# 4) 使用肘方法搜索合适的聚类数目,输出肘方法的可视化图
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
inertias = []
for k in range(1,11):
kmeans = KMeans(n_clusters=k, random_state=42).fit(X)
inertias.append(kmeans.inertia_)
plt.plot(range(1,11), inertias, 'bo-')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.title('Elbow Method')
# 5) 使用k-means方法进行聚类
kmeans = KMeans(n_clusters=3, random_state=42).fit(X)
# 6) 输出“每簇包含的样本数量”、“每个簇的聚类中心”和“聚类效果V测度”
from sklearn.metrics import v_measure_score
labels = kmeans.labels_
print("每簇包含的样本数量:\n", pd.Series(labels).value_counts())
print("每个簇的聚类中心:\n", kmeans.cluster_centers_)
print("聚类效果V测度:", v_measure_score(iris.target, labels))
# 7) 在3D空间中可视化聚类后的数据空间分布,并可视化聚类中心
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111, projection='3d')
scatter = ax.scatter(X_tsne[:,0], X_tsne[:,1], X_tsne[:,2], c=labels, cmap='viridis')
plt.colorbar(scatter)
ax.set_title('K-means Clustering')
centers = kmeans.cluster_centers_
ax.scatter(centers[:,0], centers[:,1], centers[:,2], c='black', marker='x', s=200)
plt.show()
```
输出结果为:
```
# 第2步的输出
[[5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]
[4.6 3.1 1.5 0.2]
[5. 3.6 1.4 0.2]]
# 第3步的输出
[[ 2.6961823 -3.8097587 -2.647636 ]
[ 1.2570084 -2.7530382 -2.835408 ]
[ 1.0572314 -3.0022912 -2.7255177 ]
[ 0.71414894 -3.0710034 -2.5188522 ]
[ 2.7743266 -4.2016573 -2.2020602 ]]
# 第6步的输出
每簇包含的样本数量:
1 62
0 50
2 38
dtype: int64
每个簇的聚类中心:
[[5.006 3.418 1.464 0.244 ]
[5.9016129 2.7483871 4.39354839 1.43387097]
[6.85 3.07368421 5.74210526 2.07105263]]
聚类效果V测度: 0.7581756800057784
# 第7步的可视化结果见下图
```
![image.png](attachment:image.png)
阅读全文