В чем разница между машинным обучением и просто лестницей if else? Если есть помеченный набор данных, почему бы нам просто не вывести код, говорящий «Эй, если x1 = это, x2 = это, x3 = это, … xn = это, тогда выведите y = это и добавить еще столько же случаев для всех точек данных, и это будет работать так же хорошо, как машинное обучение. Дело в таком жестко закодированном виде, что если вы дадите ряду случаев if-else точку данных из-за пределов помеченного набора данных, он не сможет дать вам результат. Таким образом, он не может предсказать. Он только запомнил предыдущие случаи.

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

Давайте рассмотрим один набор данных. (В случае увеличения количества функций сюжет выйдет за рамки 2D)

На изображении слева показан помеченный набор данных (Y на графике против X), для которого мы хотим получить такое решение. И изображение справа — это решение. Это линия, которая аппроксимирует распределение точек. Обратите внимание, что теперь для любого значения в мире, будь то из размеченного набора данных или новых данных, т.е. для любого X с помощью строки можно найти соответствующее ему Y. Строку можно развернуть в обе стороны, поэтому буквально для любого реальное число в X вы можете получить прогноз.

Поэтому эта линия

( y = mx + c )

просто полученное из предыдущих данных - это решение для прогнозирования новых данных, и это линейная регрессия.

Теперь вопрос в том, что было бы много линий, которые выглядели бы так же хорошо, чтобы аппроксимировать распределение; как бы мы получили правильную строку для этой цели? Интуитивно правильная линия должна проходить как можно ближе к точкам распределения. То есть сумма расстояний (измеренных по оси Y) между линией и точками распределения будет наименьшей для правильной линии. Если рассматривать это как функцию потерь (L), ее следует минимизировать.

Мы начинаем с произвольной строки (комбинации m и c). Наша цель — найти правильную линию для аппроксимации распределения. Единственный способ изменить эту линию — изменить m (наклон) или изменить c (пересечение).

Как изменить m или c?

Теперь у нас есть m и c.

Мы получаем новый м по

m_новое =m_старое− скорость обучения_которая является константой × (δL / δm_старое)

⟶ ( L = ∑ (y’ − (m_старыйx + c))² )

Следовательно, δL / δm_old = -2∑ (y' − (m_oldx + c)) x, откуда легко добраться до числа, поставив соответствующие значения.

Таким образом, мы получаем новый m по (m_старому — этому числу).

Это справедливо и для c.

c_новый =c_старый− скорость обучения_которая является константой × (δL / δc_старый)

где δL / δc_old = -2∑ (y' − (mx + c_old)) и мы можем получить новый c.

Мы продолжаем повторять этот процесс с полученным m или c, который теперь становится старым m / старым c, и мы пытаемся получить более новый m или c.

Таким образом, мы продолжаем получать разные линии. И наш поиск заканчивается только тогда, когда m или c больше не обновляются, т.е. когда (δL / δm_old) или (δL / δc_old) = 0.

Обратите внимание, что (δL / δm_старый) или (δL / δc_старый) = 0 также является условием минимальности потерь. Поэтому на протяжении всего этого процесса при каждом новом m или c потери также уменьшались, и мы достигаем правильной линии только тогда, когда потери минимальны.

Наконец, обратите внимание, что: m или c увеличиваются на каждом шаге, а не уменьшаются. Это связано с тем, что при получении нового m по (m_old — этому числу) «это число» начинается с отрицательного знака. Отрицательный отрицательный, положительный. То же самое для c.