调库实现 DBSCAN 聚类 步骤 3.1:读入 PCA 降维后的二维鸢尾花数据集 步骤 3.2:调用 sklearn 库中 DBSCAN 类进行聚类(设 eps=0.5, min_samples=5), 得到簇的总数、各样本的所归属簇的编号。 步骤 3.3:调用 sklearn 库中函数,计算得到外部指标(RI、FMI,越大越好)和 内部指标(DBI,越小越好) 步骤 3.4:调用 matplotlib 的 scatter 函数将聚类后各样本可视化输出(不同簇内 的样本用不同的颜色表示)。(也可以调用其他第三方库进行样本的可视化)
时间: 2024-03-20 18:41:42 浏览: 61
C# - DBSCAN聚类算法实现 - 对直角坐标系中临近点的点进行聚类
5星 · 资源好评率100%
好的,以下是实现 DBSCAN 聚类的代码:
```python
# 步骤 3.1:读入 PCA 降维后的二维鸢尾花数据集
import pandas as pd
data = pd.read_csv('pca_iris.csv')
X = data.iloc[:, :-1].values
# 步骤 3.2:调用 sklearn 库中 DBSCAN 类进行聚类
from sklearn.cluster import 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_)
# 步骤 3.3:调用 sklearn 库中函数,计算得到外部指标(RI、FMI,越大越好)和 内部指标(DBI,越小越好)
from sklearn.metrics import davies_bouldin_score, adjusted_rand_score, fowlkes_mallows_score
dbi = davies_bouldin_score(X, dbscan.labels_)
ri = adjusted_rand_score(data['class'], dbscan.labels_)
fmi = fowlkes_mallows_score(data['class'], dbscan.labels_)
print("DBI 的值为:", dbi)
print("RI 的值为:", ri)
print("FMI 的值为:", fmi)
# 步骤 3.4:调用 matplotlib 的 scatter 函数将聚类后各样本可视化输出
import matplotlib.pyplot as plt
colors = ['r', 'g', 'b', 'c', 'm', 'y', 'k']
for cluster in range(-1, n_clusters):
plt.scatter(X[dbscan.labels_ == cluster, 0], X[dbscan.labels_ == cluster, 1], c=colors[cluster % len(colors)], label='Cluster %d' % cluster)
plt.title('DBSCAN Clustering')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.legend()
plt.show()
```
在运行以上代码之前,请确保已经安装好了必要的库。
以上代码中,我们首先读入 PCA 降维后的二维鸢尾花数据集(步骤 3.1)。然后,我们调用 sklearn 库中的 DBSCAN 类进行聚类,并设置 `eps=0.5` 和 `min_samples=5`(步骤 3.2)。接着,我们计算外部指标(RI、FMI)和内部指标(DBI)(步骤 3.3)。最后,我们使用 matplotlib 的 scatter 函数将聚类后的样本可视化输出(步骤 3.4)。
希望这个代码可以帮助到你!
阅读全文