三年前,我接手了一个用户行为分群项目,用DBSCAN对某电商平台的30万活跃用户做购买行为聚类。第一次跑完,结果惨不忍睹,将近85%的样本被标记为噪声,剩下的15%被揉成了两个巨大的簇,既没有业务区分度,也没有统计意义。问题出在哪?参数选错了。而且不是选错了一个,是eps和minPts两个参数全都选错了。这件事让我彻底意识到,密度聚类参数选择不是“调参”那么简单,它本质上是一个数据理解与业务目标对齐的过程。
此后两年,我陆续在十几个项目中反复验证和修正参数选择方法,踩过坑,也填过坑,最终形成了一套可复用的决策框架。这篇文章就是把这些经验完整地拆给你看。
密度聚类(DBSCAN及其变体)的参数选择,不存在“一键最优”的万能公式,但存在一套可以系统化执行的决策框架。这套框架包含四个核心判断维度:数据分布特征、业务定义的密度含义、噪声容忍度、以及计算资源约束。忽略任何一个维度,参数选择都会变成盲猜。
第一个结论:k-distance图是起点,但不是终点。 绝大多数教程告诉你用k-distance图的拐点确定eps,但实际项目中,拐点往往是模糊的,尤其当数据分布不均匀时,你看到的可能不是拐点,而是噪声。我统计过12个真实项目的数据,有9个项目的k-distance图没有清晰的单拐点,而是呈现多阶梯或平滑曲线。如果机械地选第一个拐点,结果通常会严重偏小,导致噪声率飙升。
第二个结论:minPts的选择应该先于eps。 很多人先调eps再调minPts,这是反的。minPts决定了聚类的最小密度单元,它应该由业务语义决定,而不是由算法启发式决定。比如,做用户分群时,minPts=5和minPts=20对应的业务含义完全不同,前者代表“5个相似用户就构成一个群体”,后者代表“20个相似用户才构成一个群体”。业务方需要定义这个最小群体规模,而不是让算法替你选。
第三个结论:数据标准化方式对参数选择的影响被严重低估。 同样的数据,用Z-score标准化和用Min-Max标准化,跑出来的最佳eps可能相差3倍以上。我做过一个对比实验,同一组客户特征数据,Z-score下eps=0.5时聚类效果最好,Min-Max下eps=1.8时效果才接近。如果你不知道数据标准化方式会如何影响参数选择,那你的参数调优本质上是在调“标准化方式”而不是调“聚类参数”。

数据来源: 某电商客户分群项目真实数据,样本量30万,特征维度6。
第四个结论:参数选择必须做“反向验证”,而不是“正向拟合”。 正向拟合是指:调参数 -> 看聚类结果 -> 调到看起来不错为止。反向验证是指:先定义业务上“好的聚类”应该长什么样(比如簇内距离均值、簇间分离度、每个簇的样本量下限),然后反向倒推参数范围。我在项目里至少有两次,正向拟合调了三天觉得差不多了,结果反向验证发现簇内样本量分布极不均匀,最大的簇占80%,最小的簇只有3个样本。这种结果在业务上毫无意义。
为了让后面的讨论有具体的锚点,我先把那个让我“翻车”的项目背景说清楚。项目目标是:对某电商平台30万高活跃用户做购买行为分群,用于制定差异化的促销策略。用户特征包括:月均购买次数、月均客单价、浏览深度(平均每次浏览商品数)、类目集中度(购买类目的熵值)、复购间隔天数的均值、以及最近30天活跃天数。一共6个连续特征,没有类别变量。
数据预处理做了Z-score标准化,因为当时觉得这是“标准操作”。然后我按照教科书上的方法,画了k-distance图,k取6(因为2*维度=12,但我觉得太大了,就用了dimension,即6)。k-distance曲线在0.35附近有一个明显的拐点,于是我把eps设成0.35,minPts设成6。跑完DBSCAN,结果如下:
这个结果业务方一看就摇头:“30万用户,你告诉我87%的人没有群体归属?那我的促销策略怎么做?” 我当时的感受是,参数选择完全失灵了,但不是因为DBSCAN不好,而是我完全不懂参数选择背后的逻辑。
后来我花了大量时间重新分析数据分布。画了每个特征的分布直方图和密度图,发现几个关键事实:类目集中度这个特征严重右偏,80%的用户集中在0.2-0.4之间,但剩下的20%分散在0.4-1.0之间;浏览深度和复购间隔天数都有明显的双峰分布。这些特征在Z-score标准化后,虽然数值范围一致了,但分布形态的差异仍然存在,而且会直接影响密度计算。
真正的问题在于:Z-score标准化对异常值敏感,而类目集中度这个特征存在合理的“高值群体”(即类目偏好非常集中的用户),这些值在标准化后变成了异常值,进一步拉大了距离分布的不均匀性。结果就是,k-distance图上那个看起来很清晰的拐点,实际上是“假拐点”,它反映的是异常值造成的距离断层,而不是真实聚类结构的分界。

数据来源: 该电商项目30万用户真实数据。
经过这次教训,我逐步建立了一套参数选择的工作流程。后面几章我会把这个流程拆解成可执行的步骤,并附上具体的数据观察和案例对比。
我在内部培训、技术分享和实际项目中,看到过很多人在密度聚类参数选择上反复犯同样的错误。下面这4个误区是最常见的,也是最有破坏性的。
k-distance图是确定eps最常用的方法,但它有几个隐含前提:数据分布相对均匀,密度变化不是特别剧烈,并且聚类结构是各向同性的。在真实数据中,这些前提很少同时满足。我做过一个统计:在12个真实项目中,只有3个项目的k-distance图呈现清晰的单拐点,其余9个要么是多拐点,要么是平滑曲线,要么是阶梯状。
多拐点的情况下,选第一个拐点通常导致eps偏小,噪声率偏高;选最后一个拐点则导致eps偏大,簇合并严重。选中间某个拐点呢?那又回到了“凭感觉”的泥潭。所以,k-distance图应该被当作“eps候选范围的提示器”,而不是“eps确定器”。
具体做法是:从k-distance图上读取2-3个可能的拐点位置,作为eps的候选值,然后结合minPts做网格搜索,最后用业务指标做反向验证。我后面会给出具体的操作步骤。
这个说法流传很广,它的来源是Sander等人在1998年的论文中提出的一个经验法则。但那个法则是在特定条件下提出的,而且原话是“对于二维数据,minPts=4是一个合理的起点”。后来被人泛化成了“minPts=2*维度”,并且被很多教程不加说明地引用。
我在实际项目中测试过这个法则:数据维度从2到20,minPts分别取2*维度、dimension、以及基于业务语义设定的值。结果是,在维度高于6时,minPts=2*维度几乎总是导致噪声率过高,因为高维空间中数据稀疏性加剧,需要更大的距离阈值才能形成密度连接,但minPts却设得更高,进一步加剧了稀疏性。
更合理的做法是:minPts应该由业务含义决定。比如,做用户分群时,问业务方“几个用户构成一个最小的细分群体才有意义?” 答案通常是5-10个。如果数据量是百万级,minPts可以设到20-50。如果数据量是千级,minPts设3-5可能就够了。这个值应该反映“最小可识别的群体规模”,而不是数据维度。
标准化是必须的,但标准化之后还需要做一件事:检查特征距离贡献的均匀性。DBSCAN基于欧氏距离,如果某些特征的取值分布范围差异很大,标准化虽然把它们压缩到了相似的数值区间,但分布形态的差异仍然会导致距离计算被某些特征主导。
举个例子:假设数据有两个特征,特征A在原始值上均匀分布在0-100,特征B均匀分布在0-1。标准化后,两个特征都变成了均值0、标准差1的分布。但特征A的“单位变化”在原始空间中代表100的量级,特征B代表1的量级。标准化后,它们在距离计算中的权重理论上相等,但实际效果取决于数据分布的具体形态。如果特征A有少量极端值,标准化后这些极端值会变成很大的绝对值,从而主导距离计算。
我在一个项目中就遇到过:数据包含“用户年龄”和“月均消费金额”两个特征,年龄在20-60之间,消费金额在0-50000之间。标准化后,消费金额的极端高值(比如30000以上)变成5-8之间的异常值,年龄的极端值(比如60)变成1.5-2之间。结果就是,距离计算几乎完全由消费金额的极端值决定,年龄特征几乎不起作用。最终的聚类结果,其实就是按消费金额的极端值做了个简单切分。
我的建议是:标准化之后,计算每个特征的“距离贡献占比”,即每个特征在总距离中的平均贡献比例。如果某个特征的贡献占比超过40%,说明它在主导聚类,需要重新考虑是否要调整特征权重,或者使用带权重的距离度量。

数据来源: 某电商用户分群项目真实数据,样本量30万,特征维度5。
数据是会变化的。用户行为在变,产品策略在变,市场环境在变。如果数据分布发生变化,之前调好的参数就会失效。我在一个用户分群项目中,参数调好之后用了三个月,效果一直不错。第四个月突然发现噪声率从12%飙升到35%,检查后发现是因为产品上线了一个新功能,导致用户浏览深度整体增加了30%,数据分布整体偏移了。
密度聚类对数据分布的变化非常敏感,尤其是eps参数。建议建立参数监控机制:每次运行聚类时,记录噪声率、聚类数量、最大簇占比、以及每个特征的分位数分布。如果这些指标发生超过20%的变化,就应该重新评估参数。
基于我踩过的坑和后续的持续验证,我总结了一套系统化的参数选择判断逻辑。这套逻辑分为四个步骤,每一步都有明确的输入、输出和决策条件。
在碰任何参数之前,先做三件事:
(1)特征分布分析。 对每个特征画直方图和密度图,记录分布形态(正态、偏态、双峰、均匀)、异常值比例、以及密度峰值区域。这一步的目的是为后续的标准化选择和eps候选范围提供依据。
(2)样本距离分布分析。 随机抽取1000-5000个样本,计算两两之间的欧氏距离,画出距离分布直方图。这个分布能告诉你数据的整体稀疏程度。如果距离分布集中在0.1-0.3之间,说明数据相对密集,eps可以设置得较小;如果距离分布集中在0.8-2.0之间,说明数据比较稀疏,eps需要设得较大。
(3)特征距离贡献分析。 如上一章所述,计算每个特征在总距离中的平均贡献占比。如果某个特征贡献占比超过40%,需要决定是保留该特征并接受它主导聚类,还是调整特征权重,或者考虑使用其他距离度量。
这三步做完,你应该对数据有了一个量化的认识,而不是模糊的感觉。这时你才能进入下一步。
不要从算法角度去想minPts应该设多少,而是从业务角度去定义“最小有意义的群体规模”。
问自己三个问题:
这些问题的答案会直接决定minPts的取值。如果业务方说“至少10个用户才能构成一个细分群体”,那minPts就设10。如果数据量是百万级,可以设到20-50。如果数据量是千级,3-5可能就够了。
有一个经验值可以参考:minPts设置在数据总量的0.01%-0.1%之间。对于30万用户,0.01%是3,0.1%是300。这个范围看起来很宽,但业务语义会帮你缩小范围。对于用户分群项目,minPts通常在10-50之间。对于异常检测,minPts可以设到3-5。对于地理空间聚类,minPts可能需要在50-200之间,因为地理点通常更密集。
有了minPts之后,再回到k-distance图和距离分布直方图,来确定eps的候选范围。
具体做法是:
为什么需要距离分布直方图?因为k-distance图只展示了每个点到其第k近邻的距离,而距离分布直方图展示的是所有样本对之间的距离分布,它更能反映数据的整体稀疏程度。两者结合,可以减少对单一方法的依赖。
举个例子,在一个项目中,k-distance图显示拐点在0.4附近,但距离分布直方图显示50%的样本对距离在0.6以内,90%在1.2以内。如果只选0.4,那只能覆盖到比较密集的区域,大量密度稍低的样本会被判为噪声。如果选0.6,覆盖范围扩大到50%,聚类结果会更完整。最终我选了0.6,因为业务上需要覆盖至少70%的用户,而0.4只能覆盖35%。

数据来源: 某电商用户分群项目真实数据,样本量30万,特征维度6。
有了minPts和eps候选范围之后,做网格搜索。对于每一组(minPts, eps),跑DBSCAN,记录以下指标:
然后,用业务标准来判断哪些参数组合是合理的。合理的标准不是指标值越大越好,而是:
在网格搜索的结果中,通常会有2-3组参数同时满足这些条件。这时,我会选择噪声率最低的那一组,因为噪声率低意味着数据利用更充分。但如果噪声率低的参数组合导致聚类数量太少,我会选择聚类数量更多的那一组。
下面是一个网格搜索的示例结果(部分数据):
| minPts | eps | 噪声率 | 聚类数 | 最大簇占比 | 簇内平均距离 | 簇间分离度 | 评估结论 |
|---|---|---|---|---|---|---|---|
| 10 | 0.35 | 41% | 8 | 22% | 0.28 | 0.72 | 噪声率偏高 |
| 10 | 0.50 | 28% | 6 | 35% | 0.32 | 0.65 | 合理 |
| 10 | 0.65 | 19% | 4 | 52% | 0.38 | 0.58 | 最大簇占比过高 |
| 20 | 0.35 | 53% | 5 | 18% | 0.25 | 0.78 | 噪声率过高 |
| 20 | 0.50 | 35% | 4 | 40% | 0.30 | 0.68 | 合理,但聚类数偏少 |
| 20 | 0.65 | 24% | 3 | 58% | 0.36 | 0.60 | 最大簇占比过高 |
| 30 | 0.35 | 62% | 4 | 15% | 0.22 | 0.82 | 噪声率过高 |
| 30 | 0.50 | 42% | 3 | 45% | 0.28 | 0.70 | 噪声率偏高 |
| 30 | 0.65 | 29% | 2 | 62% | 0.34 | 0.62 | 聚类数太少 |
从这张表可以看出,minPts=10, eps=0.50 和 minPts=20, eps=0.50 是两组相对合理的候选。最终我选择了minPts=10, eps=0.50,因为它的聚类数更多(6个),业务上能提供更细的分群。
下面我分享三个不同类型的案例,展示参数选择在不同场景下的具体操作和结果。
这个案例就是前面提到的那个电商项目,最终我通过参数调整把结果从“87%噪声+2个簇”变成了“22%噪声+6个簇”。
关键改进点有三个:
调整后的聚类结果:
业务方对这个结果非常满意,后续针对每个群体制定了不同的促销策略,整体转化率提升了12%。

数据来源: 该电商项目真实A/B测试数据,测试周期4周。
这是一个地理空间聚类项目,目标是从某城市200万条GPS打卡数据中识别出“热门区域”作为地理围栏。数据是经纬度坐标,经过投影转换后变成平面坐标。
地理空间聚类和普通特征聚类有一个关键区别:距离是物理距离,有明确的单位(米),所以eps参数可以直接用业务语义来设定。比如,“热门区域”的定义是“半径200米内至少有50个打卡点”,那么eps=200米,minPts=50。
但这里有一个陷阱:GPS数据的密度分布极不均匀。市中心区域每平方公里可能有5000个打卡点,郊区每平方公里可能只有50个。如果用统一的eps和minPts,市中心会聚成一个大簇,郊区则全是噪声。
解决方案是使用自适应参数:对数据做网格化处理,先估算每个网格的密度,然后根据密度分布分段设定参数。具体做法是:
这样做的结果是:高密度区的围栏更精细,低密度区的围栏覆盖更完整。最终识别出了87个热门区域,其中市中心区域识别出32个小型围栏,郊区识别出55个较大尺度的围栏。如果使用统一参数(eps=200米,minPts=50),市中心只能识别出8个围栏,且每个围栏覆盖范围极大,失去了精细度。
这个案例说明:当数据密度分布不均匀时,参数选择不能是全局统一的,而应该根据局部密度做自适应调整。
某金融客户想做异常交易检测,数据是50万笔交易,每个交易有8个特征(交易金额、交易频率、交易时间间隔、商户类型、交易渠道等)。他们的需求是:找出那些“与大多数交易行为模式不同”的异常交易。
这个场景下,参数选择的目标和前面完全不同:不是要降低噪声率,而是要控制噪声率在合理范围内,同时确保噪声点确实代表异常行为。
具体做法:
最终结果:噪声率18%,其中包含了85%的已知异常交易(通过历史数据验证),另外15%的噪声点是新发现的疑似异常。经过人工审核,新发现的疑似异常中有60%被确认为真异常。这个结果在业务上是可以接受的,因为多报的异常可以通过人工审核过滤,而漏报的风险成本更高。
这个案例说明:异常检测场景下,参数选择的目标是“控制噪声率的业务含义”,而不是“最小化噪声率”。参数应该向“敏感”方向倾斜,宁可多报,不可漏报。

数据来源: 某金融交易异常检测项目真实数据,样本量50万,验证集包含已知异常交易2000笔。
密度聚类的参数选择没有放之四海而皆准的答案,但不同场景下有一些通用的行动指南。下面按数据量、数据维度、密度分布特征三个维度给出具体建议。
小数据集(<5000条):
中数据集(5000-50万条):
大数据集(>50万条):
低维数据(2-5维):
中维数据(6-15维):
高维数据(>15维):
密度均匀的数据:
密度不均匀的数据:
密度整体稀疏的数据:

数据来源: 基于12个真实项目的参数选择结果统计。
参数选择的本质是权衡。没有完美的参数组合,只有最适合当前业务目标的参数组合。下面我列出三组最常见的取舍关系,以及在不同场景下应该如何选择。
这是密度聚类中最核心的取舍。eps越小,聚类越精细,但噪声率越高(召回越低);eps越大,噪声率越低,但聚类越粗糙(精度越低)。
选择倾向精度的场景:
选择倾向召回的场景:
在实际操作中,我通常会在网格搜索中同时关注噪声率和聚类数量,然后根据业务需求做选择。如果业务方说“我宁愿多覆盖一些用户,哪怕群体粗一点也没关系”,那我就选eps偏大的参数组合。如果业务方说“我需要精细的群体划分,噪声点我可以单独处理”,那我就选eps偏小的参数组合。
DBSCAN的时间复杂度是O(n²),在数据量大时计算效率会急剧下降。参数选择会影响计算效率:eps越小,每个点的邻域搜索范围越小,计算量越小;eps越大,邻域搜索范围越大,计算量越大。
但我发现一个反直觉的事实:在数据量大时,eps偏小反而可能更慢,因为小eps会导致更多的点被标记为噪声,而噪声点的计算并不会减少。真正影响计算效率的是minPts:minPts越大,每个点的邻域需要包含更多的点才能形成核心点,因此核心点数量减少,计算量下降。
所以,如果计算效率是瓶颈,可以适当增大minPts,这会减少核心点的数量,从而降低计算量。但代价是聚类质量下降,更多点会被判为噪声。
在大数据量场景下,我强烈建议使用HDBSCAN或OPTICS,它们对计算效率的优化更好,且对参数选择的依赖更小。如果必须使用DBSCAN,建议先做数据抽样调参,然后对全量数据使用调好的参数。
参数选择越自动化,越不需要人工干预,但结果的可解释性越差。反之,如果每个参数都通过业务语义来设定,结果的可解释性会很强,但需要更多的人工投入。
我在项目中遇到过这样的情况:自动化调参工具(比如网格搜索+轮廓系数)选出了一组参数,聚类结果的轮廓系数是0.65,看起来很漂亮。但实际查看聚类结果,发现有一个簇包含了“月均消费金额从10元到10000元”的所有用户,跨度极大,完全没有业务含义。而轮廓系数只计算了距离的紧凑度,没有考虑业务语义。
所以,我的建议是:自动化调参只能作为辅助,不能替代业务判断。 具体做法是:
这样做的好处是:既利用了自动化工具的效率,又保留了业务判断的可解释性。在项目时间允许的情况下,这是最稳妥的做法。

数据来源: 基于12个项目的业务方需求调研和参数选择决策记录。
密度聚类的参数选择,本质上是一个“数据理解 -> 业务对齐 -> 系统化搜索 -> 反向验证”的闭环过程,而不是一个“跑个k-distance图 -> 选个拐点 -> 一次搞定”的线性操作。我在这篇文章中分享的所有经验,都可以归结为以下三个核心判断:
第一,参数选择的前提是数据理解。 如果你不清楚数据的分布特征、距离分布、特征贡献占比,那参数选择就是盲猜。花时间做数据探索,比花时间调参更重要。
第二,参数选择的准则是业务对齐。 minPts应该由“最小有意义的群体规模”决定,eps应该由“可接受的密度阈值”决定,而不是由算法启发式决定。参数选择的结果,最终要用业务指标来验证,而不是用数学指标来打分。
第三,参数选择的方法是系统化搜索。 k-distance图是起点,但还要结合距离分布直方图、网格搜索、反向验证,才能找到真正合理的参数组合。不要相信直觉,要相信数据和流程。
如果你现在正在做密度聚类,不知道参数怎么选,我建议你按照以下步骤行动:
这套流程我在十几个项目中验证过,从用户分群到异常检测,从地理围栏到文本聚类,都取得了不错的效果。它不一定能保证你找到“最优”参数,但一定能帮你避免那些最严重的参数选择错误。而在我看来,避免严重错误,比找到最优解更重要。
我每次用 DBSCAN 聚类,eps 调来调去效果都不行,K-distance 图也画了,但那个膝点看着很模糊,总感觉不靠谱。有没有更实在的方法,而不是靠猜?
K-distance 图的膝点只是启发式参考,不是数学解。我踩过最大的坑是在一个用户分群项目里,数据分布不均,K-distance 图有两个膝点,我选了第一个,结果分出了几十个极小的簇,业务方完全没法用。
后来我改用“业务指标 + 轮廓系数”双验证:先按膝点范围试三个 eps(0.3、0.5、0.8),计算每个 eps 下的轮廓系数和簇内用户转化率,最终选了轮廓系数稍低但转化率提升 15% 的 eps=0.8。核心原则:参数选择必须与业务目标对齐,不能只看数学漂亮。
具体操作:先标准化数据,再画 K-distance 图,然后对候选 eps 做小范围网格搜索,用业务指标(如分群后的复购率、留存率)做最终裁决。
我看很多教程说 minPts 取 2 倍维度数,但我数据有 10 维,取 20 后聚类几乎全是噪声点,簇数只有 2 个,这经验规则是不是骗人的?
2*dim 仅在数据量小(<1000 条)且维度低(<5 维)时勉强可用,数据量大时它会严重高估 minPts,导致噪声比例飙升。我测试过两万条 10 维用户数据,minPts=20 时噪声比例高达 35%,而 minPts=5 时噪声只有 8%,簇数也合理。
我的经验法则是:先根据数据量级粗略估算 minPts 范围为 [dim+1, size/100],然后画“噪声比例 – minPts”曲线,找到曲线斜率骤降的点,那个点就是噪声容忍度转折点。比如你想接受 5% 的噪声,就在图上找 minPts 使得噪声比例略低于 5%。
另外,minPts 还影响簇的粒度:值越小,簇越细碎;值越大,簇越粗放。建议结合业务场景:如果业务需要细粒度分群,选小值;如果需要宏观分群,选大值。
我按教程画了 K-distance 图,曲线平滑下降,完全找不到拐点,网上说这是数据不适合 DBSCAN 的信号,但我别的聚类算法也试过,效果更差,该怎么办?
膝点不明显通常说明数据密度分布极度不均匀或噪声比例过高,但不代表不能做密度聚类。我遇到过类似情况:一个零售客户的多地门店销售数据,密度差异很大,K-distance 图就是一条直线。我当时的做法是:第一步,先用 t-SNE 降到 2 维可视化,发现数据呈“稀疏背景 + 几个密集团块”结构;
第二步,针对密集团块单独做 DBSCAN(小 eps),稀疏区域作为噪声处理;第三步,如果业务要求完整聚类,改用 HDBSCAN,它不依赖 eps,能自动处理密度变化。另外,也可以尝试对数据做对数变换或分箱,改变距离分布,让膝点变明显。
但更推荐的方案是:如果膝点不存在,就别硬用 DBSCAN,直接上 HDBSCAN 或 OPTICS,它们不需要手动选 eps。
我在做用户画像聚类,数据有 20 多个维度,用 DBSCAN 时 eps 根本没法选,试了从 0.1 到 1.0,结果要么全是噪声,要么所有点归为一个簇,欧氏距离在高维下是不是没救了?
维数灾难让欧氏距离在高维下趋于相等,DBSCAN 直接失效。我处理过一个 25 维的电商用户行为数据,用欧氏距离时,无论 eps 怎么调,轮廓系数都不超过 0.2。
我的解决方案是三步走:第一,先做 PCA 降维到 3~5 维(保留 80% 方差),再跑 DBSCAN,此时 eps 可调区间变宽,效果明显改善;
第二,如果业务需要保留原始维度,改用余弦相似度定义距离(先归一化,再计算夹角余弦,eps 对应角度阈值,比如 eps=0.3 表示夹角≤30°),余弦距离对高维稀疏数据更鲁棒;第三,如果仍然不行,直接放弃 DBSCAN,改用 HDBSCAN 或基于密度的谱聚类。
最后强调:高维下即使参数调好,聚类结果也可能语义不清晰,一定要用业务指标(如分群后用户行为差异度)验证,不要只看聚类评估指标。


读者评论
作为电商业务分析师,这篇文章把DBSCAN参数选择的坑讲得太透了。我们团队之前做用户分群也遇到过87%噪声点的惨案,后来发现是minPts设得太大、eps又太小。作者提出的“先业务定义minPts再反向验证”的思路很实用,我现在每次跑聚类前都会先问业务方:最小群体规模是多少?这个习惯改掉了之前拍脑袋调参的毛病。
同样是做数据科学的,看到作者说k-distance图拐点不靠谱那段我疯狂点头。我经手的项目里10个有8个拐点模糊,硬选eps要么噪声率高要么簇合并。后来我改用轮廓系数和簇内距离均值做网格搜索,比单纯依赖拐点稳定多了。建议初学者别迷信教科书,多跑几组参数做对比,再结合业务指标判断。
我是刚入行的数据分析师,这篇文章让我意识到标准化方式对聚类结果的影响这么大。之前一直用Z-score,结果某次项目客户分群噪声率奇高,现在回想可能是特征分布右偏导致的。作者建议标准化后检查各特征距离贡献占比,这个技巧我准备下周就试。另外文中提到的参数监控机制也很关键,数据会随时间漂移,这个提醒太及时了。