Алгоритм кластеризации данных - PullRequest
4 голосов
/ 02 декабря 2010

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

Ответы [ 5 ]

2 голосов
/ 03 декабря 2010

Чтобы справиться с проклятием размерности, вы можете попытаться определить blind sources (то есть темы), которые сгенерировали ваш набор данных. Вы можете использовать Анализ основных компонентов или Факторный анализ , чтобы уменьшить размерность вашего набора функций и вычислить полезные индексы.

PCA - это то, что используется в скрытом семантическом индексировании , поскольку SVD может быть продемонстрировано как PCA:)

Помните, что вы можете потерять интерпретацию, когда получите основные компоненты вашего набора данных или его факторы, поэтому вы, возможно, захотите пойти по маршруту Неотрицательная матричная факторизация . (А вот и удар! K-Means - это особый NNMF!) В NNMF набор данных можно объяснить только его аддитивными неотрицательными компонентами.

1 голос
/ 21 февраля 2011

Два самых популярных подхода к кластеризации документов: иерархическая кластеризация и k-означает .k-означает быстрее, поскольку он является линейным по количеству документов, в отличие от иерархического, который является квадратичным, но обычно считается, что дает лучшие результаты.Каждый документ в наборе данных обычно представляется в виде n-мерного вектора (n - количество слов), причем величина измерения, соответствующего каждому слову, равна его термину частота-обратная частота документа оценка.Оценка tf-idf снижает важность высокочастотных слов в вычислении сходства. косинусное сходство часто используется как мера сходства.

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

Простейшие подходы к уменьшению размерностипри кластеризации документов: а) выбрасывают все редкие и очень часто встречающиеся слова (скажем, встречающиеся в менее чем 1% и более чем в 60% документов: это несколько произвольно, вам нужно попробовать разные диапазоны для каждого набора данных, чтобы увидеть влияние на результаты), б) остановка : выбросить все слова в стоп-лист распространенных английских слов: списки можно найти в Интернете, и в) в качестве основы или удаление суффиксов, чтобы оставить только корни слов,Наиболее распространенный стеммер - это стеммер, разработанный Мартином Портером.Реализации на многих языках можно найти здесь .Обычно это уменьшает количество уникальных слов в наборе данных до нескольких сотен или даже нескольких тысяч, и дальнейшее уменьшение размерности может не потребоваться.В противном случае можно использовать такие методы, как PCA.

1 голос
/ 02 декабря 2010

Не существует единого размера, подходящего для всех.Иерархическая кластеризация возможна всегда.Если вы хотите, чтобы из данных формировались отдельные группы, вы можете использовать кластеризацию с помощью K-средних (она также предположительно менее интенсивна в вычислительном отношении).

0 голосов
/ 08 декабря 2010

В случае, если вы не ищете семантическую кластеризацию текста (я не могу сказать, является ли это требованием или нет из вашего исходного вопроса), попробуйте использовать расстояние Левенштейна и построить с ним матрицу сходства.Исходя из этого, вы можете использовать k-medoids для кластеризации и последующей проверки вашей кластеризации с использованием коэффициентов силуэта.К сожалению, Levensthein может быть довольно медленным, но есть способы ускорить его с помощью порогов и других методов.

Еще один способ справиться с проклятием размерности - найти «контрастные множества», союзыпар атрибут-значение, которые более заметны в одной группе, чем в остальных.Затем вы можете использовать эти контрастные наборы в качестве измерений либо вместо исходных атрибутов, либо с ограниченным количеством атрибутов.

0 голосов
/ 02 декабря 2010

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

...