2015-02-25 2 views
0

Я пытался сгруппировать набор текстовых документов. У меня есть разреженная матрица TFIDF с около 10 тыс. Документов (подмножество большого набора данных), и я пытаюсь запустить алгоритм k-mean scikit-learn с разным размером кластеров (10,50,100). Остальные параметры являются значениями по умолчанию.Текстовые документы Кластеризация - неравномерные кластеры

Я получаю очень странное поведение, независимо от того, сколько ячеек кластеров я указываю, или даже если я изменил количество итераций, в лоте будет 1 кластер, который будет содержать большинство документов сам по себе, и будет много кластеров, которые имели бы только один документ в них. Это очень неравномерное поведение

Кто-нибудь знает, с какой проблемой сталкиваюсь я?

+1

k-средство не очень устойчиво к выбросам. 1 кластеры элементов обычно являются выбросами. –

+0

Да, это именно то, о чем я думал, поскольку я подозреваю, что у меня много выходов. Мне интересно, какой алгоритм может быть подходящим в этом случае. –

ответ

0

Я заметил с помощью приведенных выше ответов и комментариев, что возникла проблема с выбросами и шумом в исходном пространстве. Для этого мы должны использовать метод уменьшения размерности, который устраняет нежелательный шум в данных. Сначала я пробовал случайные прогнозы, но он не работал с текстовыми данными, просто потому, что проблема все еще не была решена. Затем, используя усеченное сингулярное декомпозицию, я смог получить идеальные однородные кластеры. Следовательно, Truncated SVD - это способ использовать текстовые данные, на мой взгляд.

1

Вот возможные вещи, которые могли бы идти «неправильно»:

  1. Ваши K-средства кластера точки инициализации выбраны в качестве того же набора точек в каждом цикле. Я рекомендую использовать «random» для параметра init k -средства http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html. Если это не сработает, то поставка к k означает ваш собственный набор случайных начальных кластерных центров. Не забудьте инициализировать ваш случайный генератор, используя его метод seed() в качестве текущей даты и времени. https://docs.python.org/2/library/random.html использует текущую дату-время в качестве значения по умолчанию.

  2. Ваша дистанционная функция, то есть эвклидово расстояние может быть преступником. Это менее вероятно, но всегда полезно запускать k-средства, используя сходство с косинусом, особенно когда вы используете его для сходства документов. scikits не имеет этой функции в настоящее время, но вы должны посмотреть здесь: Is it possible to specify your own distance function using scikit-learn K-Means Clustering?

Эти два комбинированных должны дать вам хорошие кластеры.

Смежные вопросы