Ошибка кластеризации ELKI Kmeans для многомерных данных

У меня есть 60000 документов, которые я обработал в gensim и получил матрицу 60000*300. Я экспортировал это как файл csv. Когда я импортирую это в среду ELKI и запускаю кластеризацию Kmeans, я получаю сообщение об ошибке ниже.

Task failed
de.lmu.ifi.dbs.elki.data.type.NoSupportedDataTypeException: No data type found satisfying: NumberVector,field AND NumberVector,variable
Available types: DBID DoubleVector,variable,mindim=266,maxdim=300 LabelList
    at de.lmu.ifi.dbs.elki.database.AbstractDatabase.getRelation(AbstractDatabase.java:126)
    at de.lmu.ifi.dbs.elki.algorithm.AbstractAlgorithm.run(AbstractAlgorithm.java:81)
    at de.lmu.ifi.dbs.elki.workflow.AlgorithmStep.runAlgorithms(AlgorithmStep.java:105)
    at de.lmu.ifi.dbs.elki.KDDTask.run(KDDTask.java:112)
    at de.lmu.ifi.dbs.elki.application.KDDCLIApplication.run(KDDCLIApplication.java:61)
    at [...]

Ниже приведены настройки ELKI, которые я использовал введите здесь описание изображения

введите здесь описание изображения

введите здесь описание изображения


person StatguyUser    schedule 05.02.2018    source источник


Ответы (2)


Ошибка (что мне потребовалось немного, чтобы понять, когда я увидел ее в первый раз) говорит о том, что ваши данные имеют "форму"

variable,mindim=266,maxdim=300

т.е. в некоторых строках всего 266 столбцов, в некоторых — 300. Это может быть проблема с форматом файла, например, из-за NaN, отсутствующих значений или подобных неверных символов.

Вы получите эту ошибку, если попытаетесь запустить такой алгоритм, как kmeans, который предполагает, что данные поступают из векторного пространства R ^ d (это требование NumberVector,field), потому что входные данные не соответствуют этому требованию.

person Has QUIT--Anony-Mousse    schedule 05.02.2018
comment
Спасибо, что изучили это. Я проверил массив numpy в Python, а также экспортированный файл CSV. Однако ни одно из значений не пропущено, и ни одно из значений не является NaN. Это звучит странно, но я нашел решение этой проблемы, открыв экспортированный файл CSV, выполнив Save As и снова сохранив его как файл CSV. В то время как размер исходного файла составляет 437 МБ, размер второго файла составляет 163 МБ. Я публикую это как решение. Ценю вашу помощь!! - person StatguyUser; 06.02.2018
comment
Я думаю, это из-за десятичной точки. Выполнение Save As округляет только десятичные дроби. - person StatguyUser; 06.02.2018

Это звучит странно, но я нашел решение этой проблемы, открыв экспортированный файл CSV, выполнив Save As и снова сохранив его как файл CSV. В то время как размер исходного файла составляет 437 МБ, размер второго файла составляет 163 МБ. Я использовал функцию numpy np.savetxt для сохранения вектора doc2vec. Таким образом, это похоже на проблему Python, а не на проблему ELKI.


Изменить: приведенное выше решение бесполезно. Вместо этого я экспортировал вывод doc2vec, который был создан с использованием библиотеки gensim, и при экспорте формат значений был определен явно как %1.22e. т. е. экспортируемые значения имеют экспоненциальный формат, а значения имеют длину 22. Ниже приведена вся строка кода.

textVect = model.docvecs.doctag_syn0
np.savetxt('D:\Backup\expo22.csv',textVect,delimiter=',',fmt=('%1.22e'))

Созданный таким образом файл CSV без проблем запускается в среде ELKI.

person StatguyUser    schedule 06.02.2018
comment
Вам нужно рассказать людям, что вы использовали. Кроме того, как вы сгенерировали файл в первую очередь. Потому что сомневаюсь, что если я сохраню как в Notepad.exe, то это что-то изменит. - person Has QUIT--Anony-Mousse; 07.02.2018
comment
@Anony-Mousse, я добавил дополнительные детали. - person StatguyUser; 08.02.2018
comment
Спасибо. Строка формата имеет больше смысла. Я удивлен, что экспоненциальный формат не используется по умолчанию с numpy. - person Has QUIT--Anony-Mousse; 09.02.2018