Подобие между пользователями на основе голосов

[Мой ответ является неправильным, но я оставил его здесь, потому что комментарии полезны].

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

На практике, по крайней мере, на всех популярных компиляторах, указатели на перечисления являются последовательным размером. Предописание перечислений предоставлено как расширение языка Visual C++, например.

6
задан Carson 2 December 2009 в 22:34
поделиться

7 ответов

Есть две общие метрики, которые можно использовать для поиска сходства между пользователями:

  1. Евклидово расстояние , то есть точно. о чем вы думаете: представьте n-мерный график, на каждой оси которого есть песня, которую рецензируют два вовлеченных пользователя ( u1 и * u2), а значение на его оси представляет собой оценку. Вы можете легко вычислить сходство с помощью формулы:

    для каждой песни, рассмотренной u1 и u2, вычислите pow (u1.song.score - u2.song.score, 2) и сложите все вместе в сумма_способностей . Затем коэффициент подобия определяется как 1/1 + (sqrt (sum_of_powers)) .

  2. Корреляция Пирсона (или коэффициент корреляции): это лучший подход, который определяет, насколько два набора данных связаны один с другим. В этом подходе используются более сложные формулы и немного статистики, проверьте это здесь: wiki . У вас будет график для каждой пары пользователей, затем вы нанесете очки в соответствии с оценками ... например, если aSong получил голосование 2 от u1 и 4 от u2 будет построена точка (2,4) (при условии, что user1 является осью x, а u2 - осью y).

Чтобы уточнить, вы используете линейную регрессию ], чтобы найти два коэффициента A и B , которые описывают линию, которая минимизирует расстояние от всех точек графика. Эта строка имеет следующую формулу: y = Ax + B . Если два набора похожи, точки должны быть рядом с главной диагональю, поэтому A должен стремиться к 1, а B к 0. Дон ' как написано другими, существуют более сложные алгоритмы для кластеризации данных, такие как k-means, но я предлагаю вам начать с простых (на самом деле вам понадобится что-то более сложное, когда вы поймете, что результатов недостаточно).

11
ответ дан 8 December 2019 в 05:55
поделиться

Я рекомендую книгу Программирование коллективного разума от Тоби Сегарана. В главе 3 описаны различные методы кластеризации, такие как Иерархическая кластеризация и Кластеризация K-средних .

Исходный код примеров доступен здесь

5
ответ дан 8 December 2019 в 05:55
поделиться

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

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

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

3
ответ дан 8 December 2019 в 05:55
поделиться

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

1
ответ дан 8 December 2019 в 05:55
поделиться

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

1
ответ дан 8 December 2019 в 05:55
поделиться

В этой книге вы сможете найти хороший алгоритм: Руководство по разработке алгоритмов Стивена Скиены.

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

Быстрый поиск в Google обнаружил страницу в Википедии: http://en.wikipedia.org/wiki/ Cluster_analysis Возможно, это поможет, но я думаю, что книга объясняет алгоритмы более ясно.

0
ответ дан 8 December 2019 в 05:55
поделиться

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

РЕДАКТИРОВАТЬ:

Поразмыслив еще немного:

Пирсон великолепен, если вам нужно схожесть вкусов двух пользователей, но не их уровень «самоуверенность» ... один пользователь, оценивающий серию песен 4, 5 и 6, будет идеально коррелировать с другим пользователем, оценивающим те же песни 3, 6 и 9. Другими словами, у них одинаковый «вкус» ( они ранжировали песни в том же порядке), но второй пользователь гораздо более самоуверен. Другими словами, коэффициент корреляции рассматривает любые два вектора рейтингов с линейной зависимостью как равные.

Однако, если вы хотите, чтобы фактические оценки, которые пользователи дали каждой песне, совпадали, вы должны использовать среднеквадратичную ошибку между два рейтинговых вектора. Это показатель, основанный исключительно на расстоянии (линейные отношения не влияют на оценку сходства), поэтому пользователи 4,5,6 и 3,6,9 не будут иметь идеальной оценки сходства.

Решение сводится к тому, что Вы имеете в виду под "похожими" ...

Вот и все.

следует использовать среднеквадратичную ошибку между двумя векторами рейтинга. Это показатель, основанный исключительно на расстоянии (линейные отношения не влияют на оценку сходства), поэтому пользователи 4,5,6 и 3,6,9 не будут иметь идеальной оценки сходства.

Решение сводится к тому, что Вы имеете в виду под "похожими" ...

Вот и все.

следует использовать среднеквадратичную ошибку между двумя векторами рейтинга. Это показатель, основанный исключительно на расстоянии (линейные отношения не влияют на оценку сходства), поэтому пользователи 4,5,6 и 3,6,9 не будут иметь идеальной оценки сходства.

Решение сводится к тому, что Вы имеете в виду под "похожими" ...

Вот и все.

1
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

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