首页 > 解决方案 > 如何从点簇中识别线?

问题描述

我正在构建一个自动编码器,以将燃烧数据集的维度从 17 减少到 2。

三个可观察的线

如上图所示,有一定的趋势——你可以看到大约三行。我想将数据(无监督)分成线簇,未来的测试数据可以与之相关联,并且正在努力寻找一种方法来做到这一点。

我已经将 DBSCAN 看作是一种层次聚类方法(例如这里)。我不确定它是否合适,但我的代码此时失败:

palette = sns.color_palette()
cluster_colors = [sns.desaturate(palette[col], sat)
                  if col >= 0 else (0.5, 0.5, 0.5) for col, sat in
                  zip(clusterer.labels_, clusterer.probabilities_)]

plt.scatter(z[0], z[1], c=cluster_colors, **plot_kwds)

其中z[0]z[1]是聚类数据的两个维度。错误是:

'ValueError: 'c' argument has 100 elements, which is not acceptable for use with 'x' with size 2, 'y' with size 2.'

如果您有建议的替代方案,请告诉我。另外,我的数据很大(> 100万个点)。

标签: pythoncluster-analysishierarchical-clusteringautoencoderdbscan

解决方案


您需要一次绘制一个集群。

不幸的是,Matplotlib 不接受颜色数组。

因此它抱怨c参数。

Ps为什么要减少到二维?你试过聚类原始的 17 维空间吗?在二维情况下,使用非线性映射,您可能损失了太多。


推荐阅读