Объединение разных сходств для создания одного окончательного сходства - PullRequest
6 голосов
/ 20 ноября 2011

Я довольно плохо знаком с системами интеллектуального анализа данных и рекомендаций, сейчас пытаюсь создать какую-то систему записи для пользователей, которые имеют такие параметры:

  • город
  • образование
  • проценты

Чтобы вычислить сходство между ними, я собираюсь применить косинусное сходство и дискретное сходство.Например:

  • город: если x = y, то d (x, y) = 0. В противном случае d (x, y) = 1.
  • образование: здесь я будуиспользуйте косинусное сходство, так как слова появляются в названии факультета или степени бакалавра
  • интерес: будет жестко запрограммировано число интересов, которые может выбрать пользователь, и сходство косинусов будет рассчитываться на основе двух векторов, подобных этому:1019 *

    1 0 0 1 0 0 ... n
    1 1 1 0 1 0 ... n
    

    , где 1 означает наличие интереса, а n - общее количество всех интересов.

    Мой вопрос: как объединить эти3 сходства в соответствующем порядке?Я имею в виду, просто сложение их звучит не очень умно, не так ли?Также я хотел бы услышать комментарии о моей "системе сходства новичков", хах.

Ответы [ 2 ]

3 голосов
/ 20 ноября 2011

Здесь нет сложных и быстрых ответов, поскольку ответы здесь сильно зависят от вашего ввода и проблемной области. По этой причине большая часть работы машинного обучения - это искусство (а не наука) подготовки вашего вклада. Я мог бы дать вам несколько общих идей для размышления. У вас есть две проблемы: сделать значимое сходство между каждым из этих элементов, а затем объединить их.

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

Образование: Я понимаю, почему вы можете использовать косинусное сходство, но это не решит реальную проблему, связанную с разными токенами, которые означают одно и то же. Вам нужны "eng" и "engineering", чтобы соответствовать, и "ba" и "бакалавры", и тому подобное. Как только вы подготовите токены таким образом, это может дать хорошие результаты.

Интерес: я не думаю, что косинус будет лучшим выбором здесь, попробуйте простое подобие коэффициента танимото (просто размер пересечения по размеру объединения).

Вы не можете просто суммировать их, так как я предполагаю, что вы все еще хотите значение в диапазоне [0,1]. Вы могли бы усреднить их. Это делает предположение, что выходные данные каждого из них прямо сопоставимы, что это те же самые «единицы», если хотите. Их здесь нет; например, это не так, как если бы они были вероятностями.

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

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

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

0 голосов
/ 20 ноября 2011

Вот обычный трюк в машинном обучении.

город: если x = y, то d (x, y) = 0. В противном случае d (x, y) = 1.

Полагаю, это означает, что вы используете кодирование "один из К". Это хорошо.

образование: здесь я буду использовать косинусное сходство, поскольку слова появляются в названии факультета или степени бакалавра

Здесь вы также можете использовать кодирование «один из K», чтобы получить вектор размером | V | где V - словарный запас, т. е. все слова в ваших тренировочных данных.

Если вы теперь нормализуете интересующее число так, чтобы оно всегда попадало в диапазон [0,1], тогда вы можете использовать обычные метрики расстояния L1 (Манхэттен) или L2 (евклидово) между вашими конечными векторами. Последнее соответствует метрике косинусного сходства поиска информации.

Поэкспериментируйте с L1 и L2, чтобы решить, какой из них лучше.

...