Это следует за моим предыдущим постом о том, как градиентный спуск работает в линейной регрессии.

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

"Я гений машинного обучения!" Я взревел в небеса. Хотя затем наступил менее волшебный момент, когда я внезапно понял, что все, что я сделал, соответствовало строке, которая наилучшим образом соответствовала некоторым данным, и никто, кому я это показывал, не был впечатлен ...

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

Октавный код для выполнения одномерной линейной регрессии

(Если вам нужны данные для практики, попробуйте этот ресурс)

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

Хотя, прежде чем мы начнем; Замечание по отладке! Я долго размышлял над этим кодом, задаваясь вопросом, почему я не получаю никаких результатов, проверяя каждую строку и пересматривая все уравнения. В конце концов выяснилось, что я просто не последовал одному из первых советов Эндрю Нга:

Убедитесь, что вы настроили диапазон ваших данных так, чтобы все значения лежали между -1 и 1 (плюс-минус).

Если ваши значения X имеют большой диапазон (скажем, от 0 до 100), градиентный спуск не будет работать.

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

Предполагая, что вы делаете X списком входных данных из одного столбца, а Y - списком выходных данных из одного столбца равной длины, указанная выше функция может быть вызвана в Octave следующим образом:

Et voila, теперь вы должны скоро прийти к своим оптимальным значениям для теты с помощью градиентного спуска!

В то время как проверив cost_log, вы можете увидеть, завершен ли спуск, или требуется больше итераций.

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

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