Machine Learning 简明教程
Machine Learning - DBSCAN Clustering
DBSCAN 聚类算法的工作原理如下−
-
随机选择一个尚未访问的数据点。
-
如果数据点在距离 eps 以内至少有 minPts 个邻居,则创建一个新群集并将数据点及其邻居添加到该群集中。
-
如果数据点在距离 eps 以内没有至少 minPts 个邻居,则将该数据点标记为噪声并继续到下一个数据点。
-
重复步骤 1-3,直到访问所有数据点。
Implementation in Python
我们可以使用 scikit-learn 库在 Python 中实现 DBSCAN 算法。以下是执行此操作的步骤−
Load the dataset
第一步是加载数据集。我们将使用 scikit-learn 库中的 make_moons 函数来生成一个有两个新月的玩具数据集。
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
Perform DBSCAN clustering
下一步是在数据集上执行 DBSCAN 聚类。我们将使用来自 scikit-learn 库的 DBSCAN 类。我们将 minPts 参数设置为 5,将“eps”参数设置为 0.2。
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=0.2, min_samples=5)
clustering.fit(X)
Visualize the results
最后一步是对聚类结果进行可视化。我们将使用 Matplotlib 库根据聚类分配创建数据集的散点图。
import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow')
plt.show()
Example
以下是 DBSCAN 在 Python 中的完整实现:
from sklearn.datasets import make_moons
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)
from sklearn.cluster import DBSCAN
clustering = DBSCAN(eps=0.2, min_samples=5)
clustering.fit(X)
import matplotlib.pyplot as plt
plt.figure(figsize=(7.5, 3.5))
plt.scatter(X[:, 0], X[:, 1], c=clustering.labels_, cmap='rainbow')
plt.show()
生成的散点图应显示两个不同的簇,每个簇都对应于数据集中的一轮明月。噪声数据点应以黑色显示。