聚类找不到簇原因分析(聚类失败)(DBSCAN聚类算法、eps参数、Epsilon参数、最大允许距离)

文章目录

    • 问题描述
    • 什么是聚类?
    • [什么是 DBSCAN?](#什么是 DBSCAN?)
    • [为什么 0.25 会有问题?](#为什么 0.25 会有问题?)
    • [为什么 Text Embedding 特别容易这样?](#为什么 Text Embedding 特别容易这样?)
      • [图像 embedding](#图像 embedding)
      • [文本 embedding](#文本 embedding)
    • [改成 0.40 为什么有效?](#改成 0.40 为什么有效?)
    • 实际开发中怎么选?

问题描述

红框这一行其实是在说 DBSCAN 聚类算法的参数调得不合适,导致聚类失败或者聚类效果很差。

先拆开看:

问题 根因 修复
聚类找不到簇 DBSCAN_EPS=0.25 对 text embedding 太严 改成 0.40

什么是聚类?

假设你抓取了很多帖子:

text 复制代码
帖子1:ChatGPT 发布新模型
帖子2:OpenAI 发布 GPT-6
帖子3:今天午饭很好吃
帖子4:AI 模型能力提升
帖子5:这家餐厅不错

Embedding 后会变成向量:

text 复制代码
帖子1 -> [0.12, 0.45, ...]
帖子2 -> [0.13, 0.43, ...]
帖子3 -> [0.87, 0.22, ...]
...

聚类算法会自动把:

text 复制代码
AI相关
├── 帖子1
├── 帖子2
└── 帖子4

美食相关
├── 帖子3
└── 帖子5

归为不同簇(Cluster)。


什么是 DBSCAN?

DBSCAN 是一种经典聚类算法。

核心思想:

两个点距离足够近,就认为它们属于同一个群体。

其中最重要参数就是:

python 复制代码
eps

即:

text 复制代码
Epsilon

表示:

text 复制代码
最大允许距离

为什么 0.25 会有问题?

假设 embedding 的相似度情况:

text 复制代码
帖子A 与 帖子B 距离

0.28

但你设置:

python 复制代码
eps = 0.25

那么:

text 复制代码
0.28 > 0.25

DBSCAN认为:

text 复制代码
不够近

于是:

text 复制代码
A
B
C
D

全部被当成孤立点。

结果:

text 复制代码
找不到任何簇

或者:

text 复制代码
90% 数据都是噪声

为什么 Text Embedding 特别容易这样?

很多人第一次做向量聚类都会踩这个坑。

例如:

图像 embedding

同一只猫:

text 复制代码
距离
0.05
0.08
0.12

很容易聚起来。


文本 embedding

即使表达同一个意思:

text 复制代码
ChatGPT发布新模型

OpenAI推出GPT-6

距离可能都有:

text 复制代码
0.30
0.35
0.40

甚至更高。

因为文本语义空间本来就更稀疏。

所以:

python 复制代码
eps = 0.25

往往太小。


改成 0.40 为什么有效?

原来:

python 复制代码
eps = 0.25

允许范围:

text 复制代码
●----0.25----●

改成:

python 复制代码
eps = 0.40

允许范围:

text 复制代码
●---------0.40---------●

更多点会被视为邻居:

text 复制代码
A ←→ B ←→ C

于是形成:

text 复制代码
Cluster 1

而不是:

text 复制代码
Noise
Noise
Noise

实际开发中怎么选?

通常不会拍脑袋。

会先统计 embedding 的距离分布:

python 复制代码
0.12
0.18
0.21
0.27
0.31
0.35
0.39
0.42
0.51
...

然后观察:

text 复制代码
0.35~0.45

附近是否出现明显拐点。

很多文本聚类项目里:

python 复制代码
eps = 0.3 ~ 0.5

比较常见。

具体还取决于:

  • 使用什么 embedding 模型
  • 是否做了归一化
  • 使用欧氏距离还是余弦距离
  • 数据集规模

所以这条记录的意思大概率是:

项目使用 DBSCAN 对文本向量进行聚类时,原来的 DBSCAN_EPS=0.25 设置过小,导致大量文本被当成噪声点,聚类结果为空或找不到簇。后来把阈值提高到 0.40 后,文本之间能够建立邻居关系,聚类恢复正常。

相关推荐
UIU1149 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场10 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi10 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David11 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院12 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng12 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~15 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py16 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing16 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客16 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法