DIANA鸢尾花聚类可视化python代码并输出轮廓系数
时间: 2023-09-08 22:07:35 浏览: 151
以下是使用Python和Scikit-learn库进行鸢尾花聚类可视化,并输出轮廓系数的代码:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.metrics import silhouette_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 循环尝试不同的聚类数量,并计算轮廓系数
silhouette_scores = []
for n_clusters in range(2, 7):
kmeans = KMeans(n_clusters=n_clusters, random_state=0)
cluster_labels = kmeans.fit_predict(X)
silhouette_scores.append(silhouette_score(X, cluster_labels))
# 找到最佳聚类数量
best_n_clusters = np.argmax(silhouette_scores) + 2
# 使用最佳聚类数量进行聚类
kmeans = KMeans(n_clusters=best_n_clusters, random_state=0).fit(X)
y_kmeans = kmeans.predict(X)
# 计算聚类中心并进行PCA降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
centers = pca.transform(kmeans.cluster_centers_)
# 绘制散点图和聚类中心
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y_kmeans, cmap='viridis')
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.5)
plt.title('Iris Clustering Results')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.show()
# 输出轮廓系数
print("Best Silhouette Score:", max(silhouette_scores))
print("Best Number of Clusters:", best_n_clusters)
```
代码首先循环尝试不同的聚类数量,并计算每个聚类数量的轮廓系数。然后找到具有最高轮廓系数的聚类数量,并使用该数量进行聚类。最后,计算聚类中心并进行PCA降维,将结果可视化,并输出最佳聚类数量和轮廓系数。
阅读全文