👇点击关注公众号👇
第一时间获取人工智能干货内容
本篇我们来看看DBSCAN的代码实现。
因为DBSCAN的合适数据较难获取,我们通过数据生成器生成相应数据。
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs#数据生成器
from sklearn.preprocessing import StandardScaler
选择3个中心点,生成750个样本。
#产生样本
centers = [[1, 1], [-1, -1], [1, -1]]#作为中心点
X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4,
random_state=0)#生成750个样本
X = StandardScaler().fit_transform(X)#标准化
X
标准化后的数据如下:

使用DBSCAN密度聚类:
#计算DBSCAN
db = DBSCAN(eps=0.3, min_samples=10).fit(X)
db.labels_#提取标签的簇值属性(标签属性)0~2
下图展示部分标签:

输出核心点的序号(以下展示部分):
db.core_sample_indices_#核心点的序号 不包含-1

core_samples_mask = np.zeros_like(db.labels_, dtype=bool)#产生全0矩阵!布尔值即为false
core_samples_mask
core_samples_mask[db.core_sample_indices_] = True#核心点为true
core_samples_mask
labels = db.labels_
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)#噪声点为-1
#set()去除labels中重复的元素,然后计算长度即代表所分成的簇,
# 如果有噪音点则去除含有噪音点的簇,因此结果计算出来就是不含噪音点的簇的数目。
len(set(labels))#加上噪声点的类别会有4个,其实在生成数据时候我们就知道是生成了3类!
输出为4
print('Estimated number of clusters: %d' % n_clusters_)#3个簇

接下来设置下之后绘图的颜色:
unique_labels = set(labels)
[each for each in np.linspace(0, 1, len(unique_labels))]

import matplotlib.pyplot as plt
[plt.cm.Spectral(each) for each in
np.linspace(0, 1, len(unique_labels))]#色彩 类似cmyk

#绘图
import matplotlib.pyplot as plt
%matplotlib inline
unique_labels = set(labels)#所有类别标签去重,剩下0~2
colors = [plt.cm.Spectral(each) for each in np.linspace(0, 1, len(unique_labels))]#每种分个颜色
for k, col in zip(unique_labels, colors):#k 循环,每次画出对应类别的点
if k == -1:#噪声点
col = [0, 0, 0, 1]#黑色
class_member_mask = (labels == k)#
xy = X[class_member_mask & core_samples_mask]#核心点,与运算符
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=14)#黑色框,大小为14
xy = X[class_member_mask & ~core_samples_mask]#非核心点
plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
markeredgecolor='k', markersize=6)#大小为6
plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()

这就是DBSCAN的案例了,你学会了么?