Как определить линии из скоплений точек? - PullRequest
0 голосов
/ 24 мая 2019

Я создаю авто-кодер, чтобы уменьшить размерность набора данных сгорания с 17 до 2.

Three observable lines

Как показано на рисунке выше, есть определенные тенденции - выможно увидеть около трех строк.Я хочу разделить данные (без присмотра) на линейные кластеры, с которыми могут быть связаны будущие тестовые данные, и я изо всех сил пытаюсь найти способ сделать это.

Я смотрел на 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.'

Если вы предложили альтернативы, пожалуйста, дайте мне знать.Кроме того, мои данные велики (> 1 миллион очков в случаях).

1 Ответ

0 голосов
/ 24 мая 2019

Вам нужно построить один кластер за один раз.

Matplotlib, к сожалению, не принимает массив цветов.

Следовательно, он жалуется на параметр c.

P.s. почему уменьшить до 2 размеров? Вы пробовали кластеризовать оригинальное 17-мерное пространство? В двух измерениях с нелинейной картой вы, возможно, потеряли слишком много.

...