Применение Kmeans к трехмерным данным с помощью Scikit-learn - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть данные (массив numpy p ) с формой (n, 68,2) .Я пытаюсь применить кластеризацию k-средних к этим данным, используя Scikit-learn.Мне нужно найти k кластеров из этих данных, и окончательные выходные данные после кластеризации должны иметь размеры (k, 68,2) .

Когда я предоставляю p для функции Kmeans, такой как

kmeans = KMeans(n_clusters=no_of_clusters, random_state=0).fit(p1)

, выдает ошибку

ValueError: найден массив с dim 3. Ожидается оценщик <= 2. </p>

Чтобы обойти эту проблему, мне пришлось разделить координаты x и y, чтобы получить 2 массивы измерений (n, 68) и применить к ним отдельно kmeans иобъедините результаты позже.

kmeans_y = KMeans(n_clusters=no_of_clusters, random_state=0).fit(p[:,:,1])
kmeans_x = KMeans(n_clusters=no_of_clusters, random_state=0).fit(p[:,:,0])

Я хотел бы применить kmeans непосредственно ко всем 2D координатам без разделения x и y и применения их отдельно.Но мне нужны выходные данные измерений (k, 68,2) , а не (k, 2) , которые я получил, когда попытался изменить форму массива.

1 Ответ

0 голосов
/ 15 апреля 2019

sklearn Метод KMeans fit () ожидает, что X будет иметь двухмерную форму, как показано в документации здесь :

X : {array-like, sparse matrix}, shape = [n_samples, n_features]

Это означает, что вам придется изменить форму массива np, чтобы использовать библиотеку. Новая форма зависит от того, каково каждое измерение (извинения, не совсем понятно из вашего вопроса), но при условии, что n - это число выборок, а 68,2 - это форма точек данных, которые вы можете преобразовать в х следующим образом :

x = x.reshape(n,68*2)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...