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



Давайте возьмем пример, чтобы понять этот пример лучше. Предположим, у вас есть набор данных об опыте и зарплате. Теперь ваша задача — создать модель машинного обучения, которая будет прогнозировать заработную плату для данного опыта. Что вы будете делать?

Посмотрим, как это будет выглядеть на графике, а потом решим, что делать дальше.

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

Из рисунка выше видно, что мы хотим минимизировать d1, d2, d3, d4, d5, d6. Как вы теперь будете решать эту проблему?

Прежде чем мы начнем решать эту задачу, давайте сначала напишем уравнение для этой линии. И мы знаем, что уравнение линии y = mx+c, где m — наклон линии, а c — точка пересечения. Итак, наша задача — найти наилучшее значение m и c, при котором расстояние линии от каждого набора данных будет минимальным. Вот ваш набор данных с 10 примерами:

Здесь мы будем использовать метод среднеквадратичной ошибки, потому что он дифференцируем и дает нам абсолютное значение. И наша задача будет заключаться лишь в том, чтобы минимизировать численное значение ошибки.

Y(i) — фактическое значение, а Y_hat(i) — прогнозируемое значение или расчетное значение. m - общее количество приведенных примеров.

давайте предположим, что наши значения m равны 1, а c равны -2. (м = 1, с = -2)

С этим уравнением наше новое линейное уравнение будет Y = X-2

давайте вычислим Y_hat для первого примера. Y_шляпа (0) = 0–2

Y_hat(0) = -2, но фактическое значение равно 30000. Таким образом, ошибка также велика для этого значения, равного 29998². Эта ошибка недопустима. Теперь давайте угадаем другое значение m и c.

скажем, m = 1 , c = 3000 новое уравнение прямой будет Y = X— 3000 .

Давайте вычислим новое значение для этого уравнения Y_hat(0) = 0–3000, что равно -3000. Наша новая ошибка будет 27000², это значение также неприемлемо. И вы можете продолжать угадывать значения m и c и находить значения ошибок. Этот процесс может занять очень много времени. Давайте используем нашу предыдущую технику градиентного спуска, чтобы найти минимальную ошибку.

Наша задача — найти значения m и c, при которых ошибка будет минимальной. Для этого мы должны продифференцировать нашу ошибку по m и c.

Мы можем написать Y(i) = m*X(i) + c .

∂m = ∂ошибка/∂m​ = 2​(mX(i)+cy_hat(i))X(i)/m

∂c = ∂error/∂c​=2​(mX(i)+c−y_hat(i))/m

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

m_new = m — альфа * ∂m

c_new = c — альфа * ∂c

альфа - размер шага или скорость обучения.

Вот код Python для этих алгоритмов, который поможет вам найти лучшее значение m и c.

вы можете инициализировать w и b любым значением.

Вот блокнот Python с дополнительным объяснением. Вы можете проверить его для полной реализации.



Не стесняйтесь задавать свои сомнения. Если у Вас есть предложения, пожалуйста, дайте мне знать. Спасибо, что прочитали эти статьи. Надеюсь, что эта статья поможет вам лучше понять линейную регрессию.