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

StackOverflow https://stackoverflow.com/questions/1602302

Вопрос

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

Я не знаю статистики или искусственного интеллекта, но материал здесь выглядит очень сочно.Я не знаю, с чего начать.

Вот чего я хочу добиться:

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

  2. Пользователь может получать предложения, основанные на предпочтениях других пользователей.Например, если и пользователю А, и В нравится Спилберг (связь между пользователями), а пользователь Б любит «Бэтмен: Начало», а пользователь А ненавидит Кэти Холмс, взвесьте фильм для пользователя А соответственно (опять же, каждый атрибут отдельно, например, может быть пользователь А не очень любит боевики, поэтому немного снизьте рейтинг, а поскольку Кэти Холмс не главная звезда, не принимайте это во внимание так же сильно, как и другие атрибуты).

По сути, сравниваем наборы пользователя А, аналогичные наборам пользователя Б, и получаем рейтинг для пользователя А.

У меня есть грубое представление о том, как это реализовать, но я уверен, что некоторые светлые умы уже придумали гораздо лучшее решение, так что...какие-либо предложения?

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

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

Спасибо!

Это было полезно?

Решение

Для этого есть несколько алгоритмов:

АРТМАП:группы по вероятности друг против друга (это не быстро, но это лучшее, что может быть для вашей проблемы, ИМО)

ARTMAP содержит группу общих атрибутов и определяет вероятность сходства через проценты.АРТМАП

KОзначает:Это разделяет векторы по расстоянию, на котором они находятся друг от друга.KОзначает:Википедия

СПС:будет отделять среднее значение всех значений от переменных битов.Это то, что вы можете использовать для обнаружения лиц и вычитания фона в Computer Vision.СПС

Другие советы

Это похоже на этот вопрос где ФП хотел создать систему рекомендаций.Короче говоря, нам предоставляется набор обучающих данных, состоящий из оценок пользователей к фильмам (например, рейтинг от 1 до 5 звезд) и набора атрибутов для каждого фильма (год, жанр, актеры и т. д.).Мы хотим создать рекомендатель, чтобы он выдавал возможную оценку непросмотренным фильмам.Таким образом, входные данные выглядят так:

user movie   year   genre   ...    | rating
---------------------------------------------
  1    1     2006   action         |    5
  3    2     2008   drama          |    3.5
  ...

и для фильма без рейтинга X:

10    20     2009   drama   ?

мы хотим спрогнозировать рейтинг.Проделав это для всех еще не просмотренных фильмов, затем отсортировав их по прогнозируемому рейтингу фильмов и выведя 10 лучших, вы получите систему рекомендаций.

Самый простой подход – использовать k-ближайший сосед алгоритм.Среди фильмов с рейтингом найдите фильмы, наиболее близкие к фильму X, и объедините их рейтинги, чтобы получить прогноз.Преимущество этого подхода заключается в том, что его очень легко реализовать с нуля.

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

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

Если вы хотите поиграть с различными алгоритмами в простом интуитивно понятном пакете, не требующем программирования, я предлагаю вам взглянуть на Века (мой первый выбор), Апельсин, или РапидМайнер.Самой сложной частью будет подготовка набора данных к требуемому формату.Остальное так же просто, как выбрать алгоритм и применить его (все в несколько кликов!)

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

Алгоритм K-ближайшего соседа может вам подойти.

Ознакомьтесь с некоторыми работами лучшие команды для приз нетфликса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top