Как я могу построить многомерные данные из кластера видео функций kmeans? - PullRequest
0 голосов
/ 13 июня 2019

Я создал кластер, используя kmeans (k = 200) с характерными точками из видео. В общей сложности 359 видео, и каждое видео имеет различное количество кадров.

X = []
Y = []

for video in dataset:
    X.append(video["features"])
    Y.append(video["category"])

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

print (np.shape(X))
print (np.shape(Y))

возвращает

(359, 200) (359,)

Я пытался построить их с помощью

plt.scatter(X,Y, c=kmeans.labels_, cmap='rainbow')  
plt.scatter(kmeans.cluster_centers_[:,0] ,kmeans.cluster_centers_[:,1], color='black')  

и получил ошибку как

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-45-7b6bea3c931e> in <module>()
     31     print (np.shape(X))
     32     print (np.shape(Y))
---> 33     plt.scatter(X,Y, c=kmeans.labels_, cmap='rainbow')
     34     plt.scatter(kmeans.cluster_centers_[:,0] ,kmeans.cluster_centers_[:,1], color='black')
     35     '''

2 frames
/usr/local/lib/python3.6/dist-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)
   4180         y = np.ma.ravel(y)
   4181         if x.size != y.size:
-> 4182             raise ValueError("x and y must be the same size")
   4183 
   4184         if s is None:

ValueError: x and y must be the same size

Я пробую X [:, 0] и много похожих вариантов, но получил еще одну ошибку, как

TypeError: list indices must be integers or slices, not tuple

Может кто-нибудь помочь мне, как дать ввод функции построения? Также я сохранил предыдущие результаты кластеризации kmeans в виде маринованного файла. Можно ли загрузить этот файл и создать точечный график. Спасибо за любой ответ.

1 Ответ

0 голосов
/ 13 июня 2019

При построении графиков x и y должны иметь одно измерение и иметь одинаковый размер.Вы получаете сообщение об ошибке, потому что ваш y имеет размер 359, а x имеет размер 200. x[0] совпадает с x[0,:], что составляет 200 чисел.См. Индексирование и разделение массива .Если вы хотите отобразить все массивы в x, вы можете сделать что-то вроде этого:

for i in range(x.shape[1]):
    plt.scatter(x[:,i], y)

Чтобы построить в подпланы:

fig, axes = plt.subplots(40,5, figsize=(20,100))
for i in range(x.shape[1]):
    ax = axes.flat[i]
    ax.scatter(x[:,i], y)

Другая возможность - уменьшить размерность.Например, используя sklearn.decomposition.PCA, но это для отдельного вопроса.

...