You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中计算sklearn.dbscan聚类结果的置信度或簇内平均距离

DBSCAN聚类补充计算实现思路

簇内样本两两平均距离计算

计算逻辑为按簇分组后过滤噪声,再对同簇样本计算两两距离的平均值,实现步骤如下:

  • 过滤DBSCAN输出的标签值为-1的噪声样本,保留所有归属到有效簇的样本特征
  • 按簇标签对样本特征做分组,相同簇的特征归为同一组
  • 对每个簇的特征矩阵,使用sklearn.metrics.pairwise_distances计算两两距离矩阵,排除对角线自身到自身的0值后取平均值,即为该簇的内平均距离
    示例实现代码:
import numpy as np
from sklearn.cluster import DBSCAN
from sklearn.metrics import pairwise_distances

# X为输入特征矩阵
dbscan = DBSCAN(eps=0.5, min_samples=5).fit(X)
labels = dbscan.labels_
# 过滤噪声,取所有有效簇ID
valid_clusters = np.unique(labels[labels != -1])
cluster_inner_avg_dist = {}

for cid in valid_clusters:
    cluster_feat = X[labels == cid]
    # 计算两两距离
    dist_mat = pairwise_distances(cluster_feat)
    # 取上三角非对角线元素计算平均,避免重复计算和自身距离干扰
    avg_dist = dist_mat[np.triu_indices_from(dist_mat, k=1)].mean()
    cluster_inner_avg_dist[cid] = avg_dist

聚类结果置信度计算

DBSCAN没有原生的置信度输出,常用的计算思路有以下三类:

  • 样本级置信度(基于核心点密度)
    核心点索引存储在dbscan.core_sample_indices_中,本身满足密度可达要求:
    • 核心点置信度可设置为1,也可以用核心点邻域内的样本数除以DBSCAN的min_samples参数做归一化
    • 边界点置信度可计算为 1 - (该点到所属簇最近核心点的距离 / eps),距离越近置信度越高
    • 噪声点置信度统一设为0
  • 样本级置信度(基于簇内紧凑度)
    先拿到前面计算的簇内平均距离,单个样本的置信度计算为 1 - (该样本到簇内其他所有样本的平均距离 / 簇内平均距离),值越接近1置信度越高,计算结果小于0的统一截断为0
  • 簇级置信度
    可以用 1 - (簇内平均距离 / eps)衡量,值越高说明簇内样本越紧凑,聚类结果可靠性越高,若计算结果为负,说明该簇内平均距离超过了DBSCAN的邻域阈值,聚类质量较差

注意:如果输入特征维度较高,建议先做PCA等降维处理后再计算距离,避免维度灾难导致距离区分度下降,影响计算结果的参考价值。

内容的提问来源于stack exchange,提问作者velvetrock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:36:02