Пусть нам нужно вычислить ориентировочную стоимость аренды квартиры в зависимости от её площади (в определённом городе или районе, где цены более-менее однородны). Как решать задачу? Подход машинного обучения таков: нам нужны примеры обучающих данных о площади квартиры x и стоимости её аренды y, т.е. пары http://img-fotki.yandex.ru/get/21/140873241.0/0_6f761_7afdc163_XS.png , где i -- номер пары данных (например, при площади 30 м2 стоимость 20000, тогда x=30, y=20000). Взяв реальные данные в интернете, я построил график зависимости цены от площади. http://img-fotki.yandex.ru/get/4425/140873241.0/0_6f74a_8d3dd857_XL.png
Линейная регрессия подразумевает, что мы упрощаем эту зависимость до прямой линии g(x) = a0 + a1*x. Что-то в таком роде: http://img-fotki.yandex.ru/get/19/140873241.0/0_6f74b_8c4809a1_XL.png
Уравнение прямой на этом графике: g(x) = 3 + 1087*x Приближение конечно, не слишком точное из-за большого разброса исходных данных.
Наша задача: написать алгоритм, который будет автоматически подбирать коэффициенты a0 и a1 для любого входного набора данных http://img-fotki.yandex.ru/get/21/140873241.0/0_6f761_7afdc163_XS.png
Итак, нам нужно провести наилучшую прямую. Для этого нужно выработать критерий, что такое "хорошая" прямая. Очевидно, идеальная прямая проходит через все заданные предложенные точки. Точно также очевидно, что в нашем случае точно пройти через все точки невозможно, но нужно постараться провести её как можно ближе ко всем точкам. Самая популярная мера удалённости для подобных задач -- это квадрат отклонения: http://img-fotki.yandex.ru/get/15/140873241.0/0_6f762_49b03bd6_XS.png Т.е. разница между вычисленным значением (в нашем примере цены квартиры) и реальным значением; и эта разница возводится в квадрат. Чем больше это значение -- тем хуже совпадение.
Если вычислить среднее по всем обучающим данным, то мы получим функцию ошибки обучения: http://img-fotki.yandex.ru/get/19/140873241.0/0_6f763_f4a8b018_M.png , где m -- это количество обучающих данных. Можно сказать, это "штрафная" функция за качество обучения (в английской терминологии cost function). Чем она больше -- тем хуже наша формула.
Повторюсь, что каждое слагаемое возводится в квадрат. Это делается для того, чтобы большие отклонения штрафовались сильно больше. Например, если мы 4 раза ошиблись на 1, это кажется лучше, чем если мы 1 раз ошиблись на 4, а 3 оставшиеся значения вычислили точно. В целом это не постулат, для других задач, можно выбрать и другую функцию ошибки
Давайте посмотрим, как меняются значения функции ошибки в зависимости от подобранных параметров.
Например горизонтальная прямая a0=50000, a1=0, получаем Q=1.36e10 *** *** Для тех кто не знаком -- это экспоненциальный формат записи чисел, который означает число 1.36 * 10000000000 -- число с 10 нулями (в данном случае 10 миллиардов). Это удобно для записи больших чисел. Например тысяча записывается как 1e3, миллион 1e6 и т.д. И последний пример 1.5e1 -- означает 1.5*10, т.е. 15. Надеюсь разобрались. На графике эта прямая выглядит так: http://img-fotki.yandex.ru/get/4611/140873241.0/0_6f74c_ac8e0e3f_XL.png
Очевидно хочется увеличить угол наклона, например так a0=50000, a1=1000. Получим Q=3.81e9, т.е. ошибка уже в 3 раза меньше. http://img-fotki.yandex.ru/get/4424/140873241.0/0_6f74d_b4dd1eb4_XL.png
Минимальная ошибка составляет Q=2.10e+9 и достигается при параметрах, указанных в начале статьи.
Промежуточный итог: 1) Нам нужен набор обучающих данных (x, y) 2) Мы строим линейную модель приближения y(x) функцией g(x) = a0 + a1*x 3) Для подбора параметров a0 и a1 нам нужно минимизировать функцию ошибки Q(a0,a1)