Ответы пользователя по тегу Машинное обучение
  • Как правильно задать обучающую выборку для нейронной сети?

    barmaley_exe
    @barmaley_exe
    Признаки (фичи) данных нужно представлять правильно. Математика сетей такова, что если Вы представляете признак числом, то наблюдения со значениями признака 5 и 4 будут "ближе", чем, например, 5 и 100. Но если признак — это идентификатор группы (т.н. категориальный признак) пользователя, то их числовая близость ничего не значит.

    Аналогично с выходом. Если предсказывать одно число, то это эквивалентно предположению, что предсказать 21 вместо 20 не так страшно, как выдать 1000. Опять же, для категориальных признаков это неправда.

    Итого, если вход состоит из 20 категориальных признаков, то каждый признак нужно заменить на множество новых, получаемых one-hot-кодированием (так же известным как dummy variables): для каждого значения такого признака создаётся новый признак-индикатор, равный 1 только если соответствующий признак данного наблюдения равен соответствующему значению.

    Аналогично с выходом.
    Ответ написан
    Комментировать
  • Оптимальный выбор ВУЗа в сфере IT?

    barmaley_exe
    @barmaley_exe
    Если хотите заниматься Машинным Обучением, то без ШАДа никуда. Есть, правда, ещё кафедра Математических Методов Прогнозирования на ВМК МГУ, некоторые преподаватели которой преподают, в том числе, и в ШАДе. Но в ШАДе интересного гораздо больше!

    Мой совет таков: идите в МГУ / ФизТех / Вышку, усердно учите математику первые 2-3 года (матан, дискретка (в т.ч. алгоритмы, много алгоритмов), алгебра (кажется, сверх линейной её части ничего не нужно), теорвер и матстат, методы оптимизации, функциональный анализ, численные методы и дифуры (довольно бесполезная в ML вещь, как мне кажется) ), а потом в ШАД. Там уже будут предметы вроде машинного обучения (много всякого), компьютерного зрения, алгоритмов работы с большими данными и другие, не менее интересные.
    Ответ написан
    Комментировать
  • Как реализовать рекомендательную систему по формуле Байеса?

    barmaley_exe
    @barmaley_exe
    Видимо, речь идёт о наивном Байесовском классификаторе.

    Во-первых, поставим проблему чуть иначе: вместо рекомендациях следует говорить о классификации на 2 класса (нравится или не нравится).

    Далее, наивный Байесовский классификатор основывается на 2 идеях: собственно, Теорема Байеса и условная независимость признаков объектов.

    Пусть P(like|x) — вероятность того, что данному пользователю понравится объект x, описывающийся характеристиками x1, ..., xn. Эти характеристики могут быть совершенно произвольными, не обязательно одного "типа". Вопрос лишь в том, какое вы зададите на них распределение. Очевидно, что если вероятность P(like|x) > 1/2, то вероятность негативной оценки будет меньше, а значит, нужно предсказывать "нравится". Таким образом, нашей задачей является оценить вероятности P(like|x) и P(dislike|x) (которая, в свою очередь равна 1-P(like|x), поскольку сумма вероятностей равна 1) и выбрать наибольшую.

    Тут самое время применить теорему Байеса:

    P(like|x) = P(x|like) P(like) / P(x) и P(dislike|x) = P(x|dislike) P(dislike) / P(x)

    Примечательным фактом является то, что знаменатель мы можем проигнорировать, ведь он один и тот же для P(like|x) и P(dislike|x), а нас интересует только соотношение между этими числами, а не они сами. Тогда сравнивать мы будем P(x|like) P(like) и P(x|dislike) P(dislike). В данном случае P(like) выражает наши априорные знания о том, насколько вероятно, что объект понравится пользователю. Если таких знаний нет, можно смело брать 1/2.
    P(x|like), в свою очередь, описывает, насколько вероятно встретить такой объект в классе понравившихся. Вся наивность рассматриваемого классификатора заключается именно в моделировании этого распределения.

    Поскольку вероятность P(x|like) может зависеть от x самым причудливым и произвольным образом, нам нужно сделать какое-то предположение. В случае наивного Байесовского классификатора этим предположением выступает ничем не подкреплённая гипотеза условной независимости признаков объекта при заданном классе, то есть: P(x|like) = P1(x1|like) ... Pn(xn|like). Здесь Pk — произвольное распределение, оно может быть как дискретным (цвет или тип, в Вашем случае), так и "непрерывным" (клиренс). Данные распределения должны быть выбраны разработчиком классификатора. Обычно они содержат какие-то параметры, которые мы в дальнейшем настроим по данным с помощью метода максимального правдоподобия. Для многих распределений оценки можно выписать аналитически. Например, для дискретных признаков можно посчитать эмпирическую частоту значения (плюс сглаживание для тех объектов, которые пользователь ни разу не видел), а для нормального распределения посчитать выборочное среднее и дисперсию.

    Резюмируя, ответы на Ваши вопросы:

    1. Формула Байеса имеет такое же отношение к Байесовскому классификатору, какое дерево к столу. Да, формула используется, но это ещё не всё.

    2. Про известные подходы ничего не скажу, но на ум приходит следующее: при классификации можно сравнивать не произведение вероятностей, а его логарифм (благодаря его монотонности) log(P1(x1|like) ... Pn(xn|like)) = log(P1(x1|like)) + ... + log(Pn(xn|like)). Чем больше эта сумма — тем больше вероятность лайка. Можно попробовать взвесить эти слагаемые.

    3. На отдельные признаки можно задавать произвольные распределения, например, нормальное для численных значений.

    Теперь о проблемах: вышеописанный подход хорош, но обладает существенным недостатком: если применять её ко всем пользователям без разбору, то получится модель среднего пользователя, которое будет рекомендовать всем одно и то же. Фишка же рекомендательной системы заключается в персонализации. С другой стороны, если строить по байесовскому классификатору на пользователя, скорее всего, Вам не хватит данных для получения каких-либо значимых результатов. Со второй проблемой можно бороться, если принять во внимание существование похожих пользователей: Если Алиса заинтересовалась объектами {A, B, C, D}, а Борису понравились {B, C, D, E}, то наивный Байес либо усреднит их со всеми остальными (представим, что существует 1000 пользователей, заинтересовавшихся объектом P. Тогда его "вес" будет существенно больше, но только лишь благодаря его популярности, а ведь для нахождения наиболее популярных объектов хватит и простой сортировки), либо построит для обоих по собственному классификатору, даже не подозревая о том, что эти пользователи похожи. Одним из подходов, учитывающих это, является коллаборативная фильтрация, наиболее активно используемая в задачах рекомендации.
    Ответ написан
    Комментировать
  • Какие читать книги по machine learning?

    barmaley_exe
    @barmaley_exe
    Для начала можно взять какие-нибудь онлайн курсы, а потом уже переходить к серьёзной литературе.

    Здесь есть ревью многих книг по ML. Они все на английском, да.

    Насчёт русскоязычной литературы ничего не скажу, но на machinelearning.ru есть краткий список литературы.
    Ответ написан
    Комментировать