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

Я просто скажу вам следующее: прежде чем мы начнем реализовывать линейную регрессию в python убедитесь, что вы просмотрели первые две недели курса Эндрю Нг по машинному обучению.

После того, как вы посмотрели лекции и ознакомились с концепциями, вы должны попробовать реализовать это самостоятельно, и если вам понадобится помощь, ну, именно поэтому эта статья существует :-)

С учетом сказанного, приступим. Набор данных и файлы кода находятся здесь. Я рекомендую использовать spyder, так как в нем есть фантастическая программа просмотра переменных, которой нет в jupyter notebook.

Шаг 1. Импортируйте библиотеки:

Это говорит само за себя. Мы просто импортируем numpy и matplotlib. Я не использовал здесь панд, но вы определенно можете их использовать. Прочтите эту отличную статью от Pankajashree R, чтобы начать работу с Pandas.

Шаг 2. Считайте данные и создайте матрицы:

Во второй строке мы разрезаем набор данных и сохраняем первый столбец как массив в X. reshape (-1,1) сообщает python преобразовать массив в матрицу с одним столбцом. «-1» указывает питону самому вычислять строки. Затем мы создаем массив единиц и объединяем его в матрицу X. Наконец, мы создаем матрицу y. На этом этапе, если мы построим график, используя,

plt.scatter(my_data[:, 0].reshape(-1,1), y)

Мы получаем:

Шаг 3. Установите гиперпараметры:

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

Если вам интересно, тета-значения - это значения наклона и пересечения линейного уравнения. то есть значения m и c в уравнении y = c + mx. В этом случае yhat = theta [0] [0] + theta [0] [1] * x

Шаг 4. Создайте функцию стоимости:

Функция computeCost принимает X, y и theta в качестве параметров и вычисляет стоимость. Вычисления внутри функции - это именно то, что Эндрю преподает в классе. По сути, «внутренний» вычисляет скалярное произведение X и тета в степени два. Затем они суммируются, делятся на 2 * длины X и возвращаются.

Это означает, что мы находим разницу между предсказанными значениями (мы используем линейное уравнение и значения тета для прогнозирования yhat) и исходными значениями y (уже в наборе данных, то есть в матрице y) и суммируем их. Затем находим среднее значение и возвращаем его. Возвращаемое значение - это стоимость.

Теперь мы можем запустить функцию стоимости, и это дает очень высокую стоимость. Мы должны его уменьшить. Как-то. (¬‿¬)

computeCost(X, y, theta) # outputs 319.40631589398157

Шаг 5. Создайте функцию градиентного спуска:

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

Градиентный спуск - это сердце этой статьи, и его непросто понять, поэтому, если вы еще этого не сделали, сейчас самое время ознакомиться с курсом Эндрю Нг. Объяснения Эндрю точны. Как только вы это поймете, код обретет смысл.

По сути, он находит оптимальное значение для тета-параметров, что снижает стоимость.

Теперь мы можем запустить функцию градиентного спуска и посмотреть, что произойдет:

g, cost = gradientDescent(X, y, theta, alpha, iters)  
print(g, cost)

Приведенный выше код выводит:

g = array([[ 1.03533399,  1.45914293]])
cost = 56.041973777981703

Стоимость с «319.40631589398157» до «56.041973777981703» значительно снизилась.

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

Шаг 6. Другой сюжет:

Вы поняли приведенный выше код? Как вы думаете, что такое x_val? А y_val? Это вам что-то напоминает? Возможно, линейное уравнение? Можете ли вы использовать эту технику, чтобы предсказать любое значение y с учетом значения x?

Обдумывая эти вопросы, посмотрите, что выводит приведенный выше код:

Итак, поехали. Полный алгоритм линейной регрессии с нуля. Интересно, что происходит, когда есть несколько функций ¯ \ _ (ツ) _ / ¯

Но это тема для другой статьи.

Хотя я сказал, что не буду объяснять соответствующие концепции в этой статье, вы, безусловно, можете опубликовать свои сомнения в комментариях ниже или написать мне в Twitter, и я постараюсь их прояснить.

Покажите нам некоторые ❤ и 👏 и следите за нашей публикацией, чтобы увидеть больше интересных статей по науке о данных от авторов 👫 со всего мира и за его пределами. Спасибо за внимание.