Линейная регрессия алгоритмов машинного обучения

машинное обучение искусственный интеллект алгоритм

Каталог связанных статей:

  1. Линейная регрессия для машинного обучения
  2. Логистическая регрессия и реализация машинного обучения на Python
  3. Борьба с проектами машинного обучения Обнаружение аномалий данных транзакций
  4. Дерево решений для машинного обучения
  5. Реализация дерева решений машинного обучения (Decision Tree) на Python
  6. PCA (анализ основных компонентов) для машинного обучения
  7. разработка функций машинного обучения

линейная регрессия

Обозначения, которые мы будем использовать для описания проблемы регрессии, следующие:

mпредставляет количество экземпляров в обучающем наборе

nколичество репрезентативных признаков

x^{(i)}означает первыйiобучающий экземпляр, является i-й строкой матрицы признаков, является вектором

x_j^{(i)}представляет первый в матрице признаковiпервый в очередиjособенность, первыйiпервый тренировочный экземплярjОсобенности

yПредставляет целевую переменную, которая является выходной переменной

(x,y)представляет экземпляр в обучающем наборе

(x^{(i)},y^{(i)})представительiэкземпляр наблюдения

hФункция, представляющая алгоритм обучения или гипотезу

Для многомерной линейной регрессии функция предположения может быть установлена ​​​​как

h_{\theta}(x) = \theta_0+\theta_1x_1 + \theta_2x_2 +...+\theta_nx_n

Для упрощения формулы введемx_0=1Затем предположим, что функция становится

h_{\theta}(x) = \theta_0x_0+\theta_1x_1 + \theta_2x_2 +...+\theta_nx_n

После векторизации окончательный результат

h_{\theta}(x) = \theta^TX

нам нужно спросить\theta, так что для каждой выборки, внесенной в функцию гипотезы, можно получить соответствующее прогнозируемое значение, а наша цель — сделать полученное прогнозируемое значение как можно более близким к истинному значению

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

Поскольку между нашим фактическим прогнозируемым значением и истинным значением обязательно будет ошибка для каждого образца:

y^{(i)} = \theta^Tx^{(i)} + \varepsilon^{(i)}

в,y^{(i)}- фактическое реальное значение текущей выборки,\theta^Tx^{(i)}Чтобы предсказать результат,\varepsilon^{(i)}ошибка предсказания

Тогда для всего набора данных:

Y =  \theta^TX + \varepsilon

ошибка\varepsilon^{(i)}независимы и имеют одинаковое распределение и подчиняются среднему значению 0 и дисперсии\theta^2нормальное распределение

Поскольку ошибка следует нормальному распределению, поэтому:

p(\varepsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(\varepsilon^{(i)})^2}{2\sigma^2}\rgroup

Внесите:

p(y^{(i)}\bracevert x^{(i)};\theta) = \frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}\rgroup

Мы хотим, чтобы ошибка была как можно ближе к 0. Поскольку ошибка следует нормальному распределению со средним значением 0, тем ближе соответствующая ошибка в центре распределения, тем лучше. Мы можем приблизительно использовать соответствующую вероятностьpЧтобы представить значение ординаты текущего нормального распределения, поскольку ошибки каждой выборки не зависят друг от друга, умножьте вероятность ошибки каждой выборки, чтобы получить общую функцию правдоподобия как:

L(\theta) = \prod_{i=1}^{m} p(y^{(i)}\bracevert x^{(i)};\theta) =  \prod_{i=1}^{m}\frac{1}{\sqrt{2\pi}\sigma}exp\lgroup-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2}\rgroup

Наша задача найти правильный\theta, в сочетании с нашими данными максимально близко к истинному значению Итак, нам нужно решить приведенную выше функцию правдоподобия для\thetaМаксимальное значение, то есть для решения функции максимального правдоподобия

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

В приведенной выше формулеm,\sigma,y^{(i)},x^{(i)}известны, только\thetaнеизвестно. Итак, наша цель — найти множество\theta, чтобы максимизировать указанную выше функцию правдоподобия, то есть найти функцию максимального правдоподобия. Так как только\thetaнеизвестно. Вышеупомянутая проблема может быть преобразована в,\sum_ {i=1}^m(y^{(i)}-{\theta^T}x^{(i)})^2минимальное значение

В конечном счете, наша целевая функция (также известная как функция стоимости):

J(\theta) = \frac{1}{2}\sum_ {i=1}^m(y^{(i)}-{\theta^T}x^{(i)})^2 \,\,(此处加上1/2是为了求偏导时计算方便)

Для векторизации:

J(\theta) =\frac{1}{2}(X\theta - y)^T(X\theta - y)

нормальное уравнение

ТребоватьJ(\theta)При достижении минимального значения соответствующий\thetaзначение, один из способов состоит в том, чтобы найти частную производную. так какJ(\theta)является выпуклой функцией, поэтому минимальное значение получается, когда частная производная равна 0. В это время\thetaто, что нам нужно, а также является оптимальным решением Это напрямую устанавливает частную производную равной 0, и решение уравнения дает\thetaМетод называется нормальным уравнением

\begin{align*} \nabla_{\theta}J(\theta) &= \nabla_{\theta}(\,\frac{1}{2}(X\theta - y)^T(X\theta - y)\,) \\ &=\nabla_{\theta}(\,\frac{1}{2}(\theta^TX^T - y^T)(X\theta - y)\,)   \\ &=\nabla_{\theta}(\,\frac{1}{2}(\theta^TX^TX\theta-\theta^TX^Ty-y^TX\theta+y^T y)\,)   \\ &=\frac{1}{2}(\,2X^TX\theta-X^Ty-(y^TX)^T\,) \\ &= X^TX\theta-X^Ty \end{align*}

сделать\nabla_{\theta}J(\theta) = 0,придется:

\theta = (X^TX)^{-1}X^Ty

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

В общем случае нам нужно использовать другой очень классический алгоритм оптимизации, а именно Градиентный спуск

Градиентный спуск

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

Идея градиентного спуска заключается в следующем:
В начале случайным образом выбираем набор параметров(\theta_1,\theta_2,\theta_3,......\theta_n), Вычислить соответствующую функцию стоимости, а затем нам нужно найти следующий набор комбинаций параметров, которые могут максимально уменьшить значение функции стоимости, и повторять этот процесс до тех пор, пока окончательное значение функции стоимости не сойдется, то есть не будет найден локальный минимум. В это время соответствующий(\theta_1,\theta_2,\theta_3,......\theta_n)Это тот результат, который нам нужен.
Мы не пытались найти все\thetaкомбинация параметров, поэтому неясно, является ли полученный локальный минимум глобальным минимумом. Однако для функции стоимости линейной регрессии это на самом деле проблема выпуклой оптимизации, поэтому локальный минимум является глобальным минимумом!

Другой способ мышления, чтобы понять, например, вы стоите в определенной точке горы, вам нужно спуститься с горы и достичь подножия горы (то есть вам нужно найти точку минимума)
В градиентном спуске все, что вам нужно сделать, это осмотреться, найти направление, сделать один шаг вниз, затем снова найти направление, сделать один шаг вниз и так далее, пока вы не достигнете подножия горы.
В приведенном выше сценарии есть два фактора, влияющих на достижение подножия горы: один — это направление, а другой — длина шага.
Чтобы быстро добраться до подножия горы, нам сначала нужно убедиться, что каждый шаг находится в самом крутом направлении, а затем делать большие шаги. Самое крутое направление — это градиент, и, поскольку он ищет минимальное значение, он должен следовать направлению отрицательного градиента, что является методом градиентного спуска.

А теперь поговорим официально
Базовая структура градиентного спуска (минимизацияJ(\theta)) (в следующем выраженииkПредставляет несколько итераций)


  1. Выбор начальной точки, т.е. выбор набора параметров\theta(\theta_1,\theta_2,\theta_3,......\theta_n)
  2. Выберите направление поискаd_k = -g(\theta_k), что делает функцию убывающей быстрее всего
  3. Определяем размер шага\alpha_k, так чтоJ(\theta_k +\alpha_kd_k)за\alpha_k >= 0минимизировать, построить\theta_{k+1} = \theta_k + \alpha_kd_k
  4. Порог может быть установлен в начале\epsilon,если\Arrowvert d_k \Arrowvert <=\epsilon, затем остановите итерацию и выведите решение\theta_{k+1}, иначе продолжайте повторять итерацию. Конечно, мы также можем напрямую установить количество итераций.

    Следует отметить, что вышеизложенное\theta_kотносится к набору параметров на k-й итерации, а именно(\theta_1,\theta_2,\theta_3,......\theta_n)_k

Давайте поговорим о трех методах градиентного спуска, а именно: пакетный градиентный спуск, стохастический градиентный спуск и мини-пакетный градиентный спуск.

пакетный градиентный спуск

Пакетный градиентный спуск фактически обновляет набор параметров на каждой итерации.\theta(\theta_1,\theta_2,\theta_3,......\theta_n)Когда любая из функций стоимости требуется для всей выборкиJ(\theta)Найдите соответствующий градиент
Его преимущество в том, что оптимальное решение получить легко, но очень медленно, потому что каждый раз нужно рассматривать все выборки.

Давайте посмотрим на конкретное математическое выражение

для итерации

\begin{align*} \theta_j &:= {\theta_j} - \alpha\frac{\partial}{\partial\theta_j}J(\theta)  \\ &:=\theta_j -\alpha\frac{\partial}{\partial\theta_j}\frac{1}{2m}\sum_ {i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})^2 \\ &:= {\theta_j} -\alpha\frac{1}{m}\sum_ {i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}  \end{align*}

в,j = 0,1,2,3,...n, то есть количество признаков

После векторизации для каждой итерации

\theta := \theta - \alpha\frac{1}{m}X^T(X\theta - y)

Стохастический градиентный спуск

Стохастический градиентный спуск, по сути, заключается в обновлении набора параметров на каждой итерации.\theta(\theta_1,\theta_2,\theta_3,......\theta_n)При использовании любого из них необходимо только найти образец для получения соответствующего градиента и обновить его. Его преимущество в том, что скорость итерации высокая, но не обязательно каждый раз в направлении сходимости.
Конкретное математическое выражение:

\theta_j := \theta_j - \alpha(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}

Мини-пакетный градиентный спуск

Мини-пакетный градиентный спуск фактически обновляет набор параметров на каждой итерации.\theta(\theta_1,\theta_2,\theta_3,......\theta_n)Когда любой из них будет найден, найдите часть образцов, чтобы найти соответствующий градиент и обновить его.

\theta_j := {\theta_j} -\alpha\frac{1}{64}\sum_ {k = i}^{i+63}(h_{\theta}(x^{(k)}) - y^{(k)})x_j^{(k)}

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

скорость обучения (размер шага)

В методе градиентного спуска есть два фактора: один — это направление, то есть градиент, а другой — скорость обучения.\alpha, что является длиной шага.

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

Добро пожаловать, чтобы обратить внимание на мою личную общедоступную учетную запись AI Computer Vision Workshop, Эта общедоступная учетная запись иногда выдвигает связанные статьи о машинном обучении, глубоком обучении, компьютерном зрении и т. д. Приветствую всех, кто учится и общается со мной.