Подтвердить что ты не робот

Как подготовить классификатор только с положительными и нейтральными данными?

Мой вопрос: как подготовить классификатор только с положительными и нейтральными данными?

Я создаю персонализированную систему рекомендаций для образовательных целей. Данные, которые я использую, - это Instapaper.

Datasets

У меня есть только положительные данные: - Статьи, которые я прочитал и "понравился", независимо от прочитанного/непрочитанного статуса

И нейтральные данные (потому что я проявил к нему интерес, но мне может и не понравиться позже): - Статьи, которые непрочитаны - Статьи, которые я прочитал и отметил как прочитанные, но я не "понравился" ему

Данные, которые у меня отсутствуют, - это отрицательные данные: - Статьи, которые я не отправил Instapaper, чтобы прочитать его позже (мне неинтересно, хотя я просмотрел эту страницу/статью) - Статьи, которые я, возможно, даже не нажал, но у меня может быть или нет архива.

Моя проблема

В такой проблеме отрицательные данные в основном отсутствуют. Я подумал о следующих решениях, но еще не решил их:

1) Подайте в классификатор ряд отрицательных данных Плюсы: Немедленные отрицательные данные для обучения классификатору Минусы: по мере того, как количество статей, которые мне нравятся, увеличивается, отрицательный эффект данных на классификаторе уменьшается

2) Поверните "нейтральные" данные в отрицательные данные Плюсы: Теперь у меня есть все положительные и (новые) отрицательные данные, которые мне нужны Минусы: Несмотря на то, что нейтральные данные имеют для меня небольшой интерес, мне все равно хотелось бы получить рекомендации по такой статье, но, возможно, как менее ценный класс.

4b9b3361

Ответ 1

Spy EM-алгоритм решает именно эту проблему.

S-EM - это система обучения или классификации текста, которая учится из набора положительных и немеченых примеров (без отрицательных примеров). Он основан на технике "шпиона", наивном алгоритме Байеса и ЭМ.

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

Ответ 2

Если у вас много положительных отзывов от разных пользователей, у вас довольно типичный сценарий совместной фильтрации.

Вот некоторые решения CF:

  • kNN (пользовательский или элементный), например. используя сходство с косинусом
  • один подход к матричной факторизации (обе статьи имеют похожие идеи)
    • Y. Ху, Ю. Корен, К. Волинский: Совместная фильтрация для неявных наборов данных обратной связи. ICDM 2008. http://research.yahoo.net/files/HuKorenVolinsky-ICDM08.pdf
    • R. Pan, Y. Zhou, B. Cao, NN Liu, RM Lukose, M. Scholz, Q. Yang: одноклассовая совместная фильтрация, ICDM 2008. http://www.hpl.hp.com/techreports/2008/HPL-2008-48R1.pdf
    • в обеих документах используются алгоритмы обучения, подобные ALS; конечно, вы также можете использовать SGD, где вы выбираете из отрицательных/ненаблюдаемых примеров.
  • другой подход к матричной факторизации (отказ от ответственности: я являюсь соавтором этой статьи)

Существуют общедоступные реализации этих алгоритмов, например

Кстати, если вы используете классификатор для таких проблем, посмотрите на литературу по обучению с положительным доступом, например. http://users.csc.tntech.edu/~weberle/Fall2008/CSC6910/Papers/posonly.pdf

Ответ 3

Это, очевидно, старый пост, но у меня есть аналогичная проблема, и, надеюсь, вы можете сэкономить некоторое время на информации, которую я нашел, используя следующие методы:

Ответ 4

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

Надеюсь, что это поможет!

Ответ 5

То, что вы пытаетесь сделать, - это рекомендательная система, чем я думаю.

Современное состояние заключается в использовании содержимого каждой статьи и создании пакета слов. Отсюда вы можете вычислить расстояние от разных статей. Статьи с близкими сходствами (с использованием кластеризации или сходства, таких как Pearson, Tanimoto) будут теми, которые вы, скорее всего, захотите прочитать. Это самый простой способ быстро получить что-то.

Существуют, конечно, более сложные и точные методы.

Ответ 6

Сделайте два бинарных классификатора.

1 -> "liked" or not
2 -> "neutral" or not

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

Как показал другой ответ от @ThierryS, другой вариант состоит в том, чтобы сделать рекомендацию, которая позволит вам предлагать контент, который другие подобные пользователи идентифицировали как "понравившиеся" или "нейтральные", таким образом принимая преимущество социального аспекта.

Ответ 7

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

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

Оба они лежат в области вычислительной лингвистики.

Удачи!