Алгоритмы поиска того, что хотел бы получить пользователь, на основе предпочтений других пользователей. - PullRequest
8 голосов
/ 21 октября 2009

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

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

Вот что я хочу сделать:

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

  2. Пользователь может получать предложения, основанные на симпатиях других пользователей. Например, если и пользователь A и B, такие как Spielberg (связь между пользователями), и пользователь B любят Batman Begins, но пользователь A ненавидит Кэти Холмс, соответственно взвешивают фильм для пользователя A (опять же, каждый атрибут отдельно, например, может быть Пользователь А не очень любит боевики, поэтому немного понизьте рейтинг, и поскольку Кэти Холмс не главная звезда, не принимайте это во внимание так же, как и другие атрибуты).

По сути, сравнение наборов от пользователя A похоже на наборы от пользователя B и дает оценку для пользователя A.

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

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

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

Спасибо!

Ответы [ 5 ]

4 голосов
/ 22 октября 2009

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

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

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

10    20     2009   drama   ?

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

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

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

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

Если вы хотите поиграть с разными алгоритмами в простом, интуитивно понятном пакете, который не требует программирования, я предлагаю вам взглянуть на Weka (мой первый выбор), Orange или RapidMiner . Самым сложным будет подготовить набор данных в требуемом формате. Остальное так же просто, как выбрать алгоритм и применить его (всего за несколько кликов!)

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

2 голосов
/ 22 октября 2009

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

2 голосов
/ 21 октября 2009

Есть несколько алгоритмов, которые хороши для этого:

ARTMAP: группы по вероятности друг против друга (это не быстро, но лучше всего подходит для вашей проблемы IMO)

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

KMeans: Это отделяет векторы на расстояние, на котором они находятся друг от друга KMeans: Википедия

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

1 голос
/ 28 октября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...