sklearn.cluster.DBSCAN(基于密度的聚类)

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是 sklearn.cluster 提供的 基于密度的聚类方法,适用于 任意形状的簇,并能识别噪声点,在处理 高噪声数据、聚类数未知、数据簇形状不规则 时表现优越。


1. DBSCAN 作用

  • 适用于非球形簇(如长条形、环状),不像 KMeans 需要预设 K 值。
  • 基于密度的聚类,通过 邻域半径 (eps) 和最小点数 (min_samples) 确定簇。
  • 能够识别噪声点label=-1),不像 KMeans 需要所有点归入某个簇。

2. DBSCAN 代码示例

(1) 训练 DBSCAN 聚类模型

from sklearn.cluster import DBSCAN
import numpy as np

# 生成数据
X = np.random.rand(100, 2)  # 100 个二维点

# 训练 DBSCAN 聚类模型
model = DBSCAN(eps=0.2, min_samples=5)
labels = model.fit_predict(X)

print("DBSCAN 簇标签:", labels[:10])

解释

  • eps=0.2:定义密度阈值(两点距离 ≤ 0.2 视为邻居)。
  • min_samples=5:一个簇最少包含 5 个样本。
  • fit_predict(X):训练 DBSCAN 并返回簇标签(-1 代表噪声点)。

3. DBSCAN 主要参数

DBSCAN(eps=0.5, min_samples=5, metric="euclidean")
参数说明
eps邻域半径(默认 0.5,值越大,簇越大)
min_samples最小簇样本数(默认 5
metric距离度量(默认 "euclidean",可选 "manhattan""cosine"

4. 选择合适的 epsmin_samples

from sklearn.neighbors import NearestNeighbors
import matplotlib.pyplot as plt

# 计算 k 近邻距离
neighbors = NearestNeighbors(n_neighbors=5)
neighbors.fit(X)
distances, _ = neighbors.kneighbors(X)

# 取第 5 近邻距离并排序
distances = np.sort(distances[:, 4])

plt.plot(distances)
plt.xlabel("数据点索引")
plt.ylabel("第 5 近邻距离")
plt.title("选择最佳 eps")
plt.show()

解释

  • 观察 “膝点”(Elbow Point) 选择 eps,避免 eps 过大或过小。

5. DBSCAN 可视化

import seaborn as sns

sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=labels, palette="coolwarm")
plt.title("DBSCAN 聚类结果")
plt.show()

解释

  • 不同颜色代表不同簇,-1 为噪声点

6. 计算聚类性能

from sklearn.metrics import silhouette_score

# 过滤掉噪声点(避免 silhouette_score 错误)
X_filtered = X[labels != -1]
labels_filtered = labels[labels != -1]

if len(set(labels_filtered)) > 1:  # 至少有 2 个簇才计算 silhouette_score
    score = silhouette_score(X_filtered, labels_filtered)
    print("轮廓系数:", score)

解释

  • silhouette_score(X, labels) 评估聚类效果(值越大越好)。
  • 去除 -1(噪声点)再计算,否则 silhouette_score 会报错。

7. DBSCAN vs. KMeans vs. AgglomerativeClustering

方法适用情况主要区别
DBSCAN适用于非规则簇,检测噪声点不需预设簇数,依赖 epsmin_samples
KMeans数据均匀分布,适用于大规模数据需要预设簇数 K,易受初始点影响
AgglomerativeClustering适用于层级结构的数据适用于小规模数据,可视化树形结构

8. 适用场景

  • 异常检测DBSCAN 可将孤立点归为 -1)。
  • 图像分割(适用于 非规则形状)。
  • 市场分析(可识别 不同购买模式)。

9. 结论

  • DBSCAN 适用于非规则形状的簇,能够检测噪声点,适用于高噪声数据,不需要手动指定簇数 K。适用于 异常检测、市场分析、图像分割
Logo

集算法之大成!助力oier实现梦想!

更多推荐