Мы начинаем урок, посвященный линейным моделям. В нем мы поговорим о том, как они устроены в задачах классификации и регрессии, как их обучать и с какими проблемами можно столкнуться при использовании этих моделей. А начнем мы этот урок с видео, в котором обсудим, как выглядят линейные модели в задачах регрессии. Давайте сначала вспомним некоторые обозначения, которые мы ввели в прошлом уроке. Буквой X красивая мы обозначаем пространство всех объектов, то есть все возможные объекты, для которых может понадобиться делать прогнозы. А буквой Y красивая обозначаем пространство ответов, то есть все возможные ответы, которые могут иметь наши объекты. Маленькой буквой x обозначаем сам объект, то есть то, для чего нужно делать предсказания. Объект описывается признаками, всего их d штук, и они как-то характеризуют этот объект с помощью чисел или чего-то другого, понятного компьютеру. Большой буквой X обозначается обучающая выборка, то есть наборы из l пар, объект xi-тая и ответ yi-тая на этом объекте. а(x) — это алгоритм или модель, то есть то, что делает предсказание, что предсказывает ответ y по объекту, по его признаковому описанию. Качество алгоритма a измеряется с помощью функционала ошибки Q, которая принимает на вход алгоритм и выборку, на которой измеряется качество этого алгоритма. Процесс обучения заключается в поиске такого алгоритма из семейства алгоритмов A красивое, который минимизирует функционал ошибки. Как я обещал, в этом видео мы обсуждаем задачу регрессии, то есть пространство ответов Y совпадает с множеством вещественных чисел. Ответом может быть любое вещественное число. Чтобы научиться решать задачу регрессии, нужно уметь отвечать на 3 вопроса: во-первых, как выглядит функционал ошибки, то есть как мы измеряем, насколько хорошо или плохо отрабатывает алгоритм на конкретной выборке; второе — это семейство алгоритмов, как оно устроено, как выглядит множество тех алгоритмов, из которых мы выбираем лучшие; и третье — это метод обучения, то есть как именно мы выбираем лучшие с точки зрения функционала ошибки алгоритм из семейства алгоритмов, из этого множества. В этом видео мы ответим на первые 2 вопроса, а о третьем будем мы говорить в следующих видео этого урока. Давайте для начала рассмотрим простой пример с предсказанием прибыли магазина. Пусть в этой задаче есть всего один признак — прибыль магазина в прошлом месяце, а предсказать нужно прибыль магазина в следующем месяце. Понятно, что прибыль — это вещественная переменная, то есть это задача регрессии. Если мы разместим точки обучающей выборки на таком графике, где по оси x находится признак, то есть прибыль в прошлом месяце, а по оси y находится целевая переменная или ответ, то есть прибыль в следующем месяце, то точки расположатся как-то так. Видно, что есть некоторая зависимость, чем больше была прибыль в прошлом месяце, тем больше будет прибыль и в следующем месяце. Можно провести прямую, то есть сказать, что зависимость более-менее линейная, и с помощью этой прямой пытаться предсказывать прибыль в следующем месяце по прибыли в предыдущем месяце. Видно, что в целом прямая угадывает тенденцию, она более-менее описывает зависимость между ответом и признаком. При этом, разумеется, она делает это неидеально, то есть в каждой точке есть некоторая ошибка — истинный ответ на каждом объекте несколько отклоняется от прогноза, но в среднем это ошибка не такая большая, возможно, она нас устроит. На самом деле понятно, что один признак — это не очень серьезно. Если признак всего один, мы можем, как это было сейчас в примере, просто нарисовать нашу выборку, зависимость ответа от признака, и пробовать руками восстановить зависимость. Гораздо сложнее и интереснее работать с многомерными выборками, которые описываются большим количеством признаков. В этом случае нарисовать выборку и понять, подходит ли там линейная модель или нет, нельзя. Можно лишь найти ее и посчитать ее качество и по нему как-то понять — хорошее оно получилось или нет, можно использовать здесь линейную модель или нельзя. Отмечу, что вообще нельзя придумать модель, которая идеально описывает ваши данные, идеально описывает то, как порождается ответ по признакам. Но при этом модели все равно бывают полезными, из них можно извлекать какую-то пользу, если ошибка, которую они допускают, не очень большая. Итак, мы подошли к тому, чтобы обсудить, как именно выглядит семейство алгоритмов в случае с линейными моделями. Линейная модель, линейный алгоритм для задачи регрессии выглядит вот так. Из чего он состоит? Мы берем все признаки объекта, здесь они обозначаются как xj-тая. xj-тая — это j-тый признак объекта, и складываем их с некоторыми весами в wj-тое, при j-том признаке стоит j-тый вес. Также мы прибавляем к этой сумме вес w0. Это свободный коэффициент, или еще его иногда называют сдвигом. Давайте обратим внимание, что сдвиг немножко портит вид модели, он делает его неоднородным. Чтобы устраниться, давайте добавим к данным еще один признак, константный, который на каждом объекте принимает значение 1. В этом случае вес при нем по смыслу будет совпадать со свободным коэффициентом или со сдвигом, и сам w0 будет больше не нужен, его роль будет играть вес при этом признаке. В этом случае признаков будет d + 1, и линейная модель будет выглядеть просто как сумма всех признаков с некоторыми весами. Обратите внимание, что по сути это скалярное произведение вектора весов на вектор признаков. Мы будем часто пользоваться этим обозначением в наших лекциях. Далее давайте обсудим, как измерять ошибку линейного алгоритма на обучающей выборке или на какой-то другой выборке. Давайте рассмотрим пример. Пусть у нас есть объект, (III) на котором равен 10. И посмотрим разные варианты того, что может предсказать наш алгоритм. Предположим, алгоритм от x выдает ответ: 11, этот ответ не совпадает с истинным ответом: 10 и отклоняется на 1. Наверное, это не очень сильное отклонение. Или, например, если ответ нашего алгоритма: 9. Его отклонение будет: −1, поскольку алгоритм ошибается в другую сторону, возможно, это тоже не очень плохо. А что, если алгоритм возвращает число 20? В этом случае отклонение от истины гораздо больше. Разница равна 10. Если же алгоритм возвращает 1, отклонение тоже большое, но в другую сторону. Оно равно −9. В общем-то здесь, понятно, проблема, по которой нельзя использовать отклонение, то есть а(x) − y, как некую меру ошибки. Меру ошибки, или функционал ошибки, мы хотим минимизировать. При этом минимизация отклонения приведет к тому, что алгоритм будет оптимально выдавать минус бесконечность на всех объектах, если мы захотим, чтобы отклонение было как можно меньше. Чтобы устранить проблему, первое, что приходит в голову — это взять модуль от этой разности, минимум модуля — это 0, и достигается он в том случае, если ответ алгоритма и истинный ответ совпадают. Это уже гораздо больше подходит нам, мы можем минимизировать модули отклонения ответов алгоритма от истинных ответов на всех объектах и тем самым настраивать наш алгоритм. Но у модуля есть большая проблема. Эта функция негладкая. У модуля нет производной в нуле, и из-за этого использование градиентных методов оптимизации может быть затруднительно. Чтобы решить и эту проблему давайте просто возведем в квадрат модуль. Квадрат разности — это все еще хорошая функция. Ее минимум равен 0 и достигается, если прогноз алгоритма и истинный ответ совпадают. И при этом квадрат является гладкой функцией, у него есть производная в каждой точке, поэтому его можно минимизировать теми методами градиентными, которые мы будем обсуждать далее. Мы приходим к функционалу ошибки, который называется среднеквадратичной ошибкой. В нем мы вычисляем квадрат отклонения ответа алгоритма от истинного ответа, а(xi-того) и от y-i-того. И суммируем, точнее усредняем, эти квадраты отклонений по всей обучающей выборке. Это и называется среднеквадратичной ошибкой. Обратите внимание, что подставляя сюда линейную модель, то есть вместо a(x) подставляя скалярное произведение w на xi-тое, мы получаем уже не функционал, а функцию, поскольку теперь наша ошибка зависит не от некой функции a(x), а от вектора весов w. И оптимизировать нужно именно по этому вектору весов, что уже гораздо проще. Итак, мы с вами обсудили, как выглядят линейные алгоритмы, или линейные модели, для задачи регрессии и договорились, что будем измерять их качества с помощью среднеквадратичного отклонения, среднеквадратичной ошибки. В следующем видео поговорим о том, как оптимизировать эту ошибку, как настраивать алгоритмы под этот функционал ошибки.