4

我想使用 HDBSCAN 聚类技术来预测异常值。我已经训练了我的模型来优化参数,但是当我对新数据应用approximate_predict 时,我得到了与原始模型中不同的集群和标签。我将在这里解释处理流程。

我有一个如下所示的数据集:

在此处输入图像描述

我应该注意到,这个数据集有我人为添加的异常值,目的是优化参数。然后,我申请:

clusterer = hdbscan.HDBSCAN(min_cluster_size=10, gen_min_span_tree=True, 
                            cluster_selection_epsilon=0.1,min_samples=1,allow_single_cluster=True, prediction_data=True, leaf_size=30)
clusterer.fit(X_scaled)

获得三个簇(包括异常值-1簇):

在此处输入图像描述

在这里,您可以看到集群的样子:

在此处输入图像描述

在此之后,我创建了一个名为“new_observation”的数据框,它实际上是从原始数据集中获取的一些随机观察结果,我应用了:

test_labels, strengths = hdbscan.approximate_predict(clusterer, new_observation)
test_labels

在这里,我的测试标签看起来像: array([ -1, 56, 150, -1])

这意味着从这些观察中,它检测到两个异常值,以及分配给我没有的集群的两个观察。

此外,看看像这样的绘图:

from matplotlib import cm
cmap = cm.get_cmap('Set1')
plt.scatter(x='wind_speed',y='temperature',data=X_scaled, c=clusterer.labels_, cmap=cmap)
plt.scatter(x='wind_speed',y='temperature',data=new_observation, c=test_labels, cmap=cmap, s=120)
plt.show()

在此处输入图像描述

我们可以观察到我们在不应该有的地方有异常值。

我真的不知道近似预测是如何进行聚类的,但似乎不起作用,有人可以帮助我吗???

谢谢!!!!

4

1 回答 1

1

我也有同样的问题。删除 cluster_selection_epsilon 作为参数,仅使用 min_samples 和 min_cluster_size 来调整集群。它对我有用。

于 2021-07-01T13:04:18.393 回答