代码实现读入 PCA 降维后的二维鸢尾花数据集,调用 sklearn 库中 DBSCAN 类进行聚类(设 eps=0.5, min_samples=5), 得到簇的总数、各样本的所归属簇的编号,调用 sklearn 库中函数,计算得到外部指标(RI、FMI,越大越好)和 内部指标(DBI,越小越好),调用 matplotlib 的 scatter 函数将聚类后各样本可视化输出(不同簇内 的样本用不同的颜色表示
时间: 2024-03-17 15:41:03 浏览: 68
好的,我会尽力回答您的问题。以下是Python代码实现:
```python
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
from sklearn.cluster import DBSCAN
from sklearn.metrics import adjusted_rand_score, fowlkes_mallows_score, davies_bouldin_score
import matplotlib.pyplot as plt
# 加载数据集
iris = load_iris()
# PCA降维
pca = PCA(n_components=2)
X = pca.fit_transform(iris.data)
# DBSCAN聚类
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan.fit(X)
# 簇的总数
n_clusters = len(set(dbscan.labels_)) - (1 if -1 in dbscan.labels_ else 0)
print("簇的总数:", n_clusters)
# 各样本所归属簇的编号
print("各样本所归属簇的编号:", dbscan.labels_)
# 外部指标
y_true = iris.target
ri = adjusted_rand_score(y_true, dbscan.labels_)
fmi = fowlkes_mallows_score(y_true, dbscan.labels_)
print("RI:", ri)
print("FMI:", fmi)
# 内部指标
dbi = davies_bouldin_score(X, dbscan.labels_)
print("DBI:", dbi)
# 可视化输出
plt.scatter(X[:, 0], X[:, 1], c=dbscan.labels_)
plt.show()
```
希望能够帮助到您!
阅读全文