请使用sklearn中的鸢尾花数据集(load_iris),降数据降至3维,分别使用k-means、DBSCAN和凝聚层次聚类对降维后的数据进行聚类操作。不同的簇请用不同颜色标注。每种方法中的参数请自行给出。
时间: 2024-10-19 13:03:22 浏览: 10
首先,让我们导入所需的库并加载sklearn中的鸢尾花数据集(Iris dataset)。然后我们将使用PCA(主成分分析)将数据降到三维。接下来,我们依次应用K-Means、DBSCAN和凝聚层次聚类,并对结果进行可视化,以便清晰地看到每个算法划分的不同簇。
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 数据预处理,标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 降维至3维
pca = PCA(n_components=3)
X_reduced = pca.fit_transform(X_scaled)
# 颜色编码
colors = ['r', 'g', 'b']
### K-Means聚类
kmeans = KMeans(n_clusters=3, random_state=0) # 使用默认的初始中心点
kmeans.fit(X_reduced)
labels_kmeans = kmeans.labels_
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=colors[labels_kmeans], alpha=0.8, cmap='viridis')
plt.title('K-Means Clustering')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
### DBSCAN聚类
dbscan = DBSCAN(eps=0.5, min_samples=5) # 设置合适的ε值和min_samples
labels_dbscan = dbscan.fit_predict(X_reduced)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=colors[labels_dbscan], marker='.', alpha=0.6)
plt.title('DBSCAN Clustering (eps=0.5, min_samples=5)')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
### 凝聚层次聚类
agglo = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward') # Ward链接准则
labels_agglo = agglo.fit_predict(X_reduced)
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=colors[labels_agglo], alpha=0.8)
plt.title('Hierarchical Clustering')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.show()
阅读全文