(1)eps: 两个样本被看作邻居节点的最大距离
(2)min_samples: 簇的样本数
(3)metric:距离计算方式
例:sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric=‘euclidean’)
#*=1. 建立工程,导入sklearn相关包=========**
import numpy as np
import sklearn.cluster as skc
from sklearn import metrics
from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
#*=2. 读入数据并进行处理=====================**
mac2id = dict() #mac2id是一个字典:key是mac地址value是对应mac地址的上网时长以及开始上网时间
onlinetimes = [] #value:对应mac地址的上网时长以及开始上网时间
f = open(‘TestData.txt’, encoding=‘utf-8’)
for line in f:
mac = line.split(‘,’)[2] #读取每条数据中的mac地址
onlinetime = int(line.split(‘,’)[6]) #上网时长
starttime = int(line.split(‘,’)[4].split(’ ‘)[1].split(’😂[0]) #开始上网时间
if mac not in mac2id: #mac2id是一个字典:key是mac地址value是对应mac地址的上网时长以及开始上网时间
mac2id[mac] = len(onlinetimes)
onlinetimes.append((starttime, onlinetime))
else:
onlinetimes[mac2id[mac]] = [(starttime, onlinetime)]
real_X = np.array(onlinetimes).reshape((-1, 2))
X = real_X[:, 0:1]
#*==3上网时间聚类,创建DBSCAN算法实例,并进行训练,获得标签=**
db = skc.DBSCAN(eps=0.01, min_samples=20).fit(X) # 调 用 DBSCAN 方 法 进 行 训 练 ,labels为每个数据的簇标签
labels = db.labels_
#*=4. 输出标签,查看结果===============================**
print(‘Labels:’) #打印数据被记上的标签,计算标签为-1,即噪声数据的比例。
print(labels)
raito = len(labels[labels[:] == -1]) / len(labels)
print(‘Noise raito:’, format(raito, ‘.2%’))
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) #计算簇的个数并打印,评价聚类效果
print(‘Estimated number of clusters: %d’ % n_clusters_)
print(“Silhouette Coefficient: %0.3f” % metrics.silhouette_score(X, labels))
for i in range(n_clusters_): #打印各簇标号以及各簇内数据
print('Cluster ', i, ‘:’)
print(list(X[labels == i].flatten()))
#*5.画直方图,分析实验结果================