Структурированный блокнот   
 Машинное обучение (Machine Learning, обучающиеся алгоритмы) →  Обучение с учителем (Supervised learning) →  Линейная регрессия (linear regression) →  С одной переменной →  

Постановка задачи, функция ошибки


Пусть нам нужно вычислить ориентировочную стоимость аренды квартиры в зависимости от её площади (в определённом городе или районе, где цены более-менее однородны). Как решать задачу? Подход машинного обучения таков: нам нужны примеры обучающих данных о площади квартиры 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)
Поиск по записям в текущем разделе: