Scikit-Learn DBSCAN聚类未能生成任何聚类

我有一组数据,包含大约十二个维度(列)和大约200个观测值(行)。这组数据已使用quantile_transform_normalize进行了标准化。(编辑:我尝试过在不进行标准化的情况下运行聚类,但仍然没有结果,所以我认为这不是原因。)现在我想将数据聚类成几个不同的聚类。之前我一直在使用KMeans,但听说它在高维度下可能不够准确,而且对异常值处理也不好,所以我想尝试使用DBSCAN来看看是否能得到不同的结果。

然而,当我尝试使用马氏距离度量来对数据进行DBSCAN聚类时,每个项目都被聚类到了-1。根据文档说明:

噪声样本被标记为-1。

我不太确定这意味着什么,但我使用KMeans时得到了几个还可以的聚类,所以我知道这些数据确实可以聚类——并不是随机的。

这是我用于聚类的代码:

covariance = np.cov(data.values.astype("float32"), rowvar=False)clusterer = sklearn.cluster.DBSCAN(min_samples=6, metric="mahalanobis", metric_params={"V": covariance})clusterer.fit(data)

就这样。我已经在调试器中检查过,确定data是一个数值型的Pandas DataFrame。

是什么导致了这个问题呢?


回答:

您还需要选择eps参数。

DBSCAN的结果非常依赖于这个参数。您可以在文献中找到一些估计它的方法。

在我看来,sklearn不应该为这个参数提供默认值,因为它很少有效(在标准化的玩具数据上通常还可以,但仅此而已)。

200个实例可能太少,无法可靠地测量密度,特别是对于十几个变量的情况下。

Related Posts

为什么我们在K-means聚类方法中使用kmeans.fit函数?

我在一个视频中使用K-means聚类技术,但我不明白为…

如何获取Keras中ImageDataGenerator的.flow_from_directory函数扫描的类名?

我想制作一个用户友好的GUI图像分类器,用户只需指向数…

如何查看每个词的tf-idf得分

我试图了解文档中每个词的tf-idf得分。然而,它只返…

如何修复 ‘ValueError: Found input variables with inconsistent numbers of samples: [32979, 21602]’?

我在制作一个用于情感分析的逻辑回归模型时遇到了这个问题…

如何向神经网络输入两个不同大小的输入?

我想向神经网络输入两个数据集。第一个数据集(元素)具有…

逻辑回归与机器学习有何关联

我们正在开会讨论聘请一位我们信任的顾问来做机器学习。一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注