Этот пост в блоге охватывает лекции 5, 6 и 7 Стэнфордского курса машинного обучения http://cs229.stanford.edu/syllabus-spring2020.html.

В качестве документов используются следующие:

http://cs229.stanford.edu/notes2020spring/cs229-notes2.pdf

http://cs229.stanford.edu/notes2019fall/cs229-notes3.pdf

Дискриминационные и генеративные алгоритмы

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

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

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

Алгоритмы линейной регрессии в предыдущем сообщении в блоге являются примерами дискриминационных алгоритмов, а примером генеративного алгоритма является наивный алгоритм Байеса, который мы рассмотрим сегодня.

Гауссовский дискриминантный анализ

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

Как и в случае с другими нашими алгоритмами, такими как LMS (наименьшие средние квадраты), нам нужно найти значения параметров, которые максимизируют логарифмическую вероятность.

Наивный алгоритм Байеса

Наивный алгоритм Байеса используется при обработке естественного языка или обучении машин говорить на человеческом языке. Обычно используется классификация электронных писем как спам или не спам. Алгоритм в основном берет все слова в электронном письме и сохраняет каждое электронное письмо в виде вектора длины всего словаря с 1 для слов в электронном письме и 0 для слов, которых нет. Затем, используя правило Байеса с вероятностями, которые можно рассчитать на основе данных, алгоритм может предсказать, является ли новое электронное письмо спамом.

Отличное видео, объясняющее наивный алгоритм Байеса, это: https://www.youtube.com/watch?v=O2L2Uv9pdDA.

Наивный алгоритм Байеса делает множество допущений, но при этом оказывается на удивление точным, что заставляет меня задаться вопросом, так ли сложен человеческий язык, как мы думаем.

Опорные векторные машины

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

Вот пример, иллюстрирующий это:

При рисовании линии для разделения данных нам нужно только посмотреть на «граничные» точки каждого класса (т. е. -3,5, -2,5, 1,75 и 3) и провести линию, максимизирующую границу между классами на основе этих точек. Эти точки называются векторами поддержки.

Как мы решаем, как преобразовать данные? Какой набор функций мы выбираем? Здесь на помощь приходят ядра.

ядра

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

Вот еще информация о машинах опорных векторов и ядрах:

https://towardsdatascience.com/svm-and-kernel-svm-fed02bef1200

Другие посты из этой серии

Часть 2: https://medium.com/@ayanabh/linear-regressions-machine-learning-for-high-schoolers-1e2840a00846

Часть 4: https://medium.com/@ayanabh/practical-considerations-in-machine-learning-machine-learning-for-high-schoolers-5c2336b3dee6

Отдельное спасибо Ishita Sharma за отзыв в этом блоге!