Scikit-Learn DBSCAN集群不产生集群

时间:2018-11-12 17:24:13

标签: python machine-learning scikit-learn cluster-analysis dbscan

我有一个数据集,其中包含十二个维度(列)和大约200个观察值(行)。该数据集已使用quantile_transform_normalize进行了规范化。 (编辑:我尝试在没有规范化的情况下运行集群,但是仍然没有运气,所以我不认为这是原因。)现在,我想将数据集群到几个集群中。到目前为止,我一直在使用KMeans,但是我已经读到它在更高维度上可能并不准确,并且不能很好地处理离群值,因此我想与DBSCAN进行比较,看看是否得到了不同的结果。

但是,当我尝试使用Mahalanobis距离度量将数据与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,正如我在调试器中检查过的那样。

什么可能导致此问题?

1 个答案:

答案 0 :(得分:1)

您还需要选择参数eps

DBSCAN结果非常依赖此参数。您可以在文学中找到一些估算方法。

恕我直言,sklearn应该为该参数提供默认值,因为它很少起作用(对于正常的玩具数据,通常是可以的,但仅此而已)。

200个实例可能太小而无法可靠地测量密度,尤其是带有十二个变量的情况。