Построение матрицы tf-idf на 2-мерном пространстве - PullRequest
0 голосов
/ 08 января 2019

Доброе утро, Я использовал матрицу tf idf для кластеризации k-средних, чтобы найти повторяющиеся темы в тексте песен. В итоге я получил 4 кластера. Я использовал следующий код для построения:

from sklearn.manifold import TSNE
from sklearn.decomposition import TruncatedSVD
k = 4
tfs_reduced = TruncatedSVD(n_components=k, random_state=7).fit_transform(tfidf_matrix)
tfs_embedded = TSNE(n_components=2).fit_transform(tfs_reduced)

fig = plt.figure(figsize = (10, 10))
ax = plt.axes()
plt.scatter(tfs_embedded[:, 0], tfs_embedded[:, 1], c=labels)
plt.show()

Кажется, что графика верна, но я не могу добавить легенду, в которой каждый из используемых цветов назначен определенному кластеру. Как я могу это сделать?

1 Ответ

0 голосов
/ 08 января 2019

Я считаю, что с вашим кодом есть две проблемы.

  1. Во-первых, вам нужно вызывать scatter () один раз для каждого кластера, который вы строите. Поскольку вы не включили весь код, необходимый для воспроизведения вашей переменной tfs_embedded, я не знаю, что это будет включать в ваш случай. Предположительно, однако, вы можете разделить эти данные на несколько вызовов функции разброса.
  2. Вторая проблема заключается в том, что вам нужно вызывать scatter по осям, а не по графику (то есть, ax.scatter вместо plt.scatter).

Пример кода ниже покажет вам, как это может работать. Выходной график составляет здесь .

import matplotlib.pyplot as plt

x = [1,2,4,3,7,5]
y = [2.2,1.0,0.8,8.6,3.6,7.8]
C1 = 'red'
C2 = 'blue'
L1 = "Cluster 1"
L2 = "Cluster 2"
fig = plt.figure(figsize = (10, 10))
ax = plt.axes()
ax.scatter(x[0:3], y[0:3], label=L1, c=C1, edgecolors='none')
ax.scatter(x[3:6], y[3:6], label=L2, c=C2, edgecolors='none')
ax.legend()
plt.show()
...