Масштабируемый классификатор для поиска отсутствующих атрибутов - PullRequest
2 голосов
/ 09 июля 2010

У меня есть большая разреженная матрица, представляющая атрибуты для миллионов объектов. Например, одна запись, представляющая сущность, может иметь атрибуты "has (fur)", "has (tail)", "makeSound (meow)" и "is (cat)".

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 09 июля 2010

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

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

1 голос
/ 09 июля 2010

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

  • Совместная фильтрация
  • Рекомендации для пользователей и предметов
  • K-Means, кластеризация нечетких K-средних
  • Кластеризация среднего сдвига
  • Кластеризация процесса Дирихле
  • Распределение скрытого дирихле
  • Разложение по сингулярным значениям
  • Параллельное извлечение частых образов
  • Дополнительный наивный байесовский классификатор
  • Случайный лесной классификатор на основе дерева решений
  • Высокопроизводительные Java-коллекцииколлекции кольтов)
...