2010-07-09 2 views
2

У меня есть большая разреженная матрица, представляющая атрибуты для миллионов объектов. Например, одна запись, представляющая объект, может иметь атрибуты «имеет (мех)», «имеет (хвост)», «makeSound (мяу)» и «is (cat)».Масштабируемый классификатор для поиска отсутствующих атрибутов

Однако эти данные являются неполными. Например, другой объект может иметь все атрибуты типичного объекта «is (cat)», но может отсутствовать атрибут «is (cat)». В этом случае я хочу определить вероятность того, что этот объект должен иметь атрибут «is (cat)».

Таким образом, проблема, которую я пытаюсь решить, - определить, какие отсутствующие атрибуты должны содержать все сущности. Учитывая произвольную запись, я хочу найти верхние N наиболее вероятных атрибутов, которые отсутствуют, но должны быть включены. Я не уверен, что такое формальное имя для такого типа проблем, поэтому я не уверен, что искать при исследовании текущих решений. Существует ли масштабируемое решение для этого типа проблемы?

Прежде всего, мы просто вычислим условную вероятность для каждого отсутствующего атрибута (например, P (is (cat) | имеет (мех) и имеет (хвост) и ...)), но это похоже на очень медленный подход , Плюс, поскольку я понимаю традиционный расчет условной вероятности, я предполагаю, что столкнулся с проблемами, когда моя сущность содержит несколько необычных атрибутов, которые не являются общими для других, - это (cat) сущности, в результате чего условная вероятность равна нулю.

Моя вторая идея - подготовить классификатор Maximum Entropy для каждого атрибута, а затем оценить его на основе текущих атрибутов сущности. Я думаю, что вычисление вероятности будет гораздо более гибким, но это все равно будет иметь проблемы с масштабируемостью, так как мне придется обучать отдельные классификаторы для потенциально миллионов атрибутов. Кроме того, если бы я хотел найти верхние N наиболее вероятных атрибутов для включения, мне все равно придется оценивать все классификаторы, которые, вероятно, будут навсегда.

Есть ли лучшие решения?

ответ

1

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

Вы должны посмотреть на некоторые из наиболее успешных подходов к Netflix Challenge. Набор данных довольно большой, поэтому эффективность является высокоприоритетной. Хорошим местом для начала может стать бумага 'Matrix Factorization Techniques for Recommender Systems'.

+0

Отличная перефразировка моей проблемы. – Cerin

1

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

  • Collaborative Filtering
  • пользователя и товара на основе рекомендателей
  • K-Средства, Нечеткий K-средства кластеризации
  • среднего сдвига кластеризация
  • процесс Дирихле кластеризация
  • Скрытое распределение Дирихле
  • сингулярного разложения
  • Parallel Частое Узор горнодобывающие
  • Дополнительной наивный байесовский классификатор
  • Случайные лесных деревьев решения на основе классификаторов
  • Высокоэффективные коллекции Java (ранее жеребенок коллекции)
+0

Спасибо, я слышал о Махуте. Это выглядит интересно, хотя я не знаком со всеми реализованными алгоритмами. Можете ли вы порекомендовать те, которые наиболее применимы к моей проблеме? – Cerin

+0

Классификатор Naive Bayes может быть очень полезен также K-Means, SVD и т. Д. (Разные альтернативы algos). На самом деле вы можете попробовать [Ensemble Learning] (http://en.wikipedia.org/wiki/Ensemble_learning), который представляет собой комбинацию нескольких алгоритмов машинного обучения, чтобы получить лучший результат. Победители конкурса NetFlix получили лучшие результаты, объединив несколько алгоритмов, поэтому, если вы не хотите разрабатывать свои собственные алгоритмы с нуля, и вы хотите объединить множество алгоритмов, я бы порекомендовал действительно взглянуть на Mahout. – Kiril

+0

Следуя совету StompChicken, проблема с рекомендацией обычно решается путем совместной фильтрации, которая реализуется компонентом «Вкус» Mahout (https://cwiki.apache.org/confluence/display/MAHOUT/Recommender+Documentation). – Cerin