Сообщение об ошибке Kmeans: Количество отдельных кластеров, найденных меньше, чем n_clusters - PullRequest
0 голосов
/ 30 октября 2018

У меня есть оригинальный код для построения графика, который соответствует чтению текстового файла с n строками. Каждая строка содержит 4 столбца, первые три столбца представляют собой координаты точек (x, y, z), а четвертый столбец представляет собой двоичную переменную, необязательную для этого построения. В каждых 20 прочитанных строках читается скелет, причем этот скелет представляет собой группу из 20 (x, y, z) точек или суставов, каждый из которых состоит из первых трех столбцов каждой строки.

Пример содержимого текстового файла: текстовый файл содержит 860 строк, а 860/20 = 43, что составляет 20 соединений, чтобы создать каркас из (x, y, z) соединений. Затем текстовый файл состоит из 43 скелетов, которые генерируют движение. Следовательно, текстовый файл представляет движение. Я назвал это «примером», потому что цифры меняются.

После создания кода для чтения движений скелета я создал большой 2D-массив, который содержит все движения вместе, и в результате получился массив 22797x400, где каждая строка представляет собой скелет. Таким образом, существует 22797 скелетов, по 400 столбцов для каждого. Я назвал этот последний 2D-массив final_array.

Я применил разложение по сингулярным значениям (SVD) к final_array, где я использовал матрицу V из SVD (которая приводит к матрицам S, V и D) для умножения между final_array и уменьшенной версией V (изначально 400x400), в результате чего получился двумерный массив 22797x3, поскольку уменьшенная версия V была 400x3. Это было необходимо по ряду причин, которые здесь не нужно упоминать, но это было для уменьшения размеров, чтобы построить скелеты в следующих частях процесса.

Следовательно, у меня есть 2D-массив 22797x3, где каждая строка представляет собой скелет, построенный из операций, описанных выше, и мне нужно применить кластеризацию к этой матрице, где каждая строка будет сгруппирована в группу, используя Kmeans из Scikit- учиться на Python. Это должен быть кластер с 100 группами кластеров.

В результате мне нужно получить результат kmeans_labels со списком из 22797 элементов, информируя, что это была группа из 100 групп кластеров, в которые была сгруппирована каждая строка (скелет).

Пока я пробовал:

kmeans = KMeans (n_clusters = 100, random_state = 0) .fit (X)

Но результатом было следующее сообщение об ошибке:

Количество отдельных кластеров (68), найденных меньше, чем n_clusters (100). Возможно, из-за повторяющихся точек в X. return_n_iter = True)

Неважно, сколько раз я меняю номер группы, сообщение об ошибке возвращается с меньшим значением. Любая гепатит?

...