密度聚类算法(DBSCAN)的python实现,以及参数epsilon和MinPts对聚类对聚类效果的影响
首先,我们给出DBSCAN的python实现代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn import cluster
from sklearn.metrics import adjusted_rand_score
from sklearn import mixture
"""产生聚类数据"""
def creat_data(centers,num=100,std=0.7):#center聚类中心数组,std,每个族中的标准差
x,labels_true=make_blobs(n_samples=num,centers=centers,cluster_std=std)
return x,labels_true #x为样本,labes为样本点的真实族分类标记
def DBSCAN(*data):
x,labels_value=data
clst=cluster.DBSCAN()
predicted_labels=clst.fit_predict(x)#训练并预测每个样本所属的族标记
print("ARI:%s"% adjusted_rand_score(labels_value,predicted_labels))#输出ARI指标
print("core samble num:%d"%len(clst.core_sample_indices_)) #原始数据集被划分为簇的个数
#调用DBSCAN()函数,观察结果
centers=