dbscan算法思路以及sklearn的DBSCAN聚类方法应用

dbscan算法思路以及sklearn的DBSCAN聚类方法应用

前言: 对于前面博文中的k-means聚类方法,它有一个很大的缺陷,就是它对于简单成团的数据样本聚类效果较好,但是对于复杂的样本数据分布就搞不定了,比如环形分布的样本数据,或者其它复杂分布的样本数据如下图
dbscan算法思路以及sklearn的DBSCAN聚类方法应用_第1张图片

那么DBSCAN能够很好解决k-means算法的这个缺陷,它将具有足够高密度的区域划分为簇,并可以发现任何形状的聚类。

一、DBSCAN聚类算法基本概念和思路

1、基本概念

dbscan算法思路以及sklearn的DBSCAN聚类方法应用_第2张图片
如下图,若MinPoints=3,则点P就是一个核心对象,点P和点M就是直接密度可达,点P和点Q就是密度可达,点S和点R就是密度相连
dbscan算法思路以及sklearn的DBSCAN聚类方法应用_第3张图片

2、算法思路

dbscan算法思路以及sklearn的DBSCAN聚类方法应用_第4张图片

二、在sklearn中利用DBSCAN算法实现聚类

1、示例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.cluster import KMeans
from sklearn import datasets
# 生成数据
x1, y1 = datasets.make_circles(n_samples=2000, factor=0.5, noise=0.05)
x2, y2 = datasets.make_blobs(n_samples=1000, centers=[[1.2, 1.2]], cluster_std=[[0.1]])
x = np.concatenate((x1, x2))

# k-means方法聚类
model = KMeans(n_clusters=3)
model.fit(x)
result = model.predict(x)
plt.scatter(x[:, 0], x[:, 1], c=result)

# DBSCAN方法聚类
model = DBSCAN(eps=0.2, min_samples=50)
model.fit(x)
result = model.fit_predict(x)
plt.figure()
plt.scatter(x[:, 0], x[:, 1], c=result)
plt.show()

2、执行结果

dbscan算法思路以及sklearn的DBSCAN聚类方法应用_第5张图片
对于这种分布的样本数据,可见DBSCAN聚类结果才是我们想要的。

你可能感兴趣的:(Python,机器学习,机器学习,python,聚类,DBSCAN算法,dbscan算法思路)