我有一个数据集,其中包含十二个维度(列)和大约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,正如我在调试器中检查过的那样。
什么可能导致此问题?
答案 0 :(得分:1)
您还需要选择参数eps
。
DBSCAN结果非常依赖此参数。您可以在文学中找到一些估算方法。
恕我直言,sklearn
应该不为该参数提供默认值,因为它很少起作用(对于正常的玩具数据,通常是可以的,但仅此而已)。
200个实例可能太小而无法可靠地测量密度,尤其是带有十二个变量的情况。