Вопрос по matrix – Эффективная кластеризация матрицы подобия

5

моя тема - сходство и кластеризация (связка) текста (ов). В двух словах: я хочу объединить собранные тексты, и они должны появиться в значимых кластерах в конце. Чтобы сделать это, мой подход до сих пор заключается в следующем, моя проблема в кластеризации. Текущее программное обеспечение написано на PHP.

1) Сходство: Я рассматриваю каждый документ как «пакет слов» и конвертировать слова в векторы. я использую

filtering (only "real" words) tokenization (split sentences into words) stemming (reduce words to their base form; Porter's stemmer) pruning (cut of words with too high & low frequency)

как методы уменьшения размерности. После этого я использую косинусное сходство (как предложено / описано на различных сайтах в Интернете).и здесь.

В результате получается матрица подобия:

<code>        A   B   C   D   E 
    A   0  30  51  75  80
    B   X   0  21  55  70
    C   X   X   0  25  10
    D   X   X   X   0  15
    E   X   X   X   X   0
</code>

A & # x2026; E - мои тексты, а число - это сходство в процентах; чем выше, тем больше похожи тексты. Поскольку sim (A, B) == sim (B, A) заполнена только половина матрицы. Таким образом, сходство текста A с текстом D составляет 71%.

Я хочу создать априори неизвестное (!) Количество кластеров из этой матрицы сейчас. Кластеры должны представлять одинаковые элементы (до определенного критерия остановки) вместе.

Я сам попробовал базовую реализацию, которая была примерно такой (60% в качестве фиксированного порога сходства)

<code>    foreach article
      get similar entries where sim > 60
              foreach similar entry
              check if one of the entries already has a cluster number
              if no: assign new cluster number to all similar entries
              if yes: use that number
</code>

Это работало (каким-то образом), но было совсем не хорошо, и результаты часто были кластерами монстров. Итак, я хочу повторить это и уже изучил все виды алгоритмов кластеризации, но я до сих пор не уверен, какой из них будет работать лучше всего. Я думаю, что это должен быть агломерационный алгоритм, потому что каждая пара текстов в начале может рассматриваться как кластер. Но все же вопросы заключаются в том, что такое критерий остановки, и должен ли алгоритм разделять и / или объединять существующие кластеры вместе.

Извините, если некоторые вещи кажутся простыми, но я относительно новичок в этой области. Спасибо за помощь.

Вы получили хорошие ответы? Мне даже не ясно, в каких измерениях должна работать кластеризация ... Jim

Ваш Ответ

3   ответа
1

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

1

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

2

имеете неизвестное количество кластеров и уже используете косинусное расстояние, я бы порекомендовалFLAME алгоритм кластеризации.

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

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

Похожие вопросы