1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/scruel-Notes-ML-AndrewNg

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
week2.md 22 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 13.03.2025 14:11 638a769

Многомерная линейная регрессия (Линейная регрессия с несколькими переменными)

4.1 Несколько признаков (Несколько характеристик)

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

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

( n ): общее число характеристик
( {x}^{\left(i\right)} ): представляет собой ( i )-ю строку матрицы образцов, то есть ( i )-ый тренировочный экземпляр.
( {x}_{j}^{\left(i\right)} ): представляет собой ( j )-ую колонку ( i )-ой строки матрицы образцов, то есть ( j )-ую характеристику ( i )-ого тренировочного экземпляра.

Ссылаясь на приведённую выше картинку, получаем ( {x}^{(2)}=\begin{bmatrix} 1416\ 3\ 2\ 40 \end{bmatrix}, {x}^{(2)}_{1} = bk 1416 ).

Многомерная гипотеза ( h ) записывается следующим образом: ( h_{\theta}(x) = \theta_{0} + \theta_{1}x_{1} + \theta_{2}x_{2} + ... + \theta_{n}x_{n} ).

Для ( \theta_0 ), как и в случае одного признака, мы рассматриваем его как базовое значение. Например, это может быть базовая стоимость дома.

Размерность вектора параметров составляет ( n+1 ), а после добавления ( x_{0} ) к вектору признаков его размерность также становится равной ( n+1 ). Используя линейную алгебру, можно упростить ( h ):$$ h_\theta(x) = \begin{bmatrix}\theta_0 & \theta_1 & ... & \theta_n \end{bmatrix}\begin{bmatrix}x_0 \\ x_1 \\ \vdots \\ x_n\end{bmatrix} = \theta^T x $$

( \theta^T ): транспонированная матрица ( \theta )

( x ): вектор признаков для некоторого образца, ( n+1 )-мерный вектор признаков

( x_0 ): чтобы сделать вычисление удобнее, мы предположим, что ( x_0^{(i)} = 1 )

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

4.2 Градиентный спуск для нескольких переменных (Градиентный спуск для многомерной задачи)

Многомерная функция затрат аналогична одномерной функции затрат,

то есть ( J(\theta_{0}, \theta_{1}, ..., \theta_{n}) = \frac{1}{2m} \sum_{i=1}^{m} (h_{\theta}(x^{(i)}) - y^{(i)})^2 ), где ( h_\theta(x) = \theta^T x ).

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

$$ \begin{align*} & \text{Повторять до сходимости:} ; \lbrace \\ & \theta_j := \theta_j - \alpha \frac{\partial}{\partial \theta_j} J(\theta_{0}, \theta_{1}, ..., \theta_{n}) \\ \rbrace \end{align*} $$

Вычисление частных производных:

$$ \begin{align*} & \text{Повторять до сходимости:} ; \lbrace \\ & \theta_j := \theta_j - \alpha \frac{1}{m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} ; & \text{для } j := 0,1,...,n\\ \rbrace \end{align*} $$

Можно раскрыть как:$$ \begin{aligned} & \text{повторять до сходимости:} ; \lbrace \\ & \theta_0 := \theta_0 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}\\ & \theta_1 := \theta_1 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_1^{(i)} \\ & \theta_2 := \theta_2 - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_2^{(i)} \\ & \vdots \\ & \theta_n := \theta_n - \alpha \frac{1}{m} \sum\limits_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)}) \cdot x_n^{(i)} \\ \rbrace \end{aligned} $$Конечно, аналогично одномерному градиентному спуску, все параметры должны быть обновлены одновременно.

Если ( h_\theta(x) = \theta^T x ), то можно получить векторизованную реализацию одновременного обновления параметров:

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

( X ): набор данных обучения, матрица размером ( m \times (n + 1) ) (включая базовый признак ( x_0 = 1 ))

4.3 Практика градиентного спуска 1 — масштабирование признаков (Gradient Descent in Practice I - Feature Scaling)

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

Примером может служить задача прогнозирования цен на недвижимость, где используются два признака: площадь дома и количество комнат.

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

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

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

$$x_i := \frac{x_i - average(x)}{maximum(x) - minimum(x)}$$, таким образом $$x_i \in (-1, 1)$$

Диапазон значений признаков не обязательно должен быть ограничен $-1 \leqslant x \leqslant 1$. Например, диапазон $1 \leqslant x \leqslant 3$ также допустим. Однако значения типа $-100 \leqslant x \leqslant 100$ или $-0.00001 \leqslant x \leqslant 0.00001$ слишком велики или малы соответственно. Кроме того, стоит отметить, что при использовании нормализации данных мы должны применять её ко всем входным данным, включая тренировочный набор, тестовый набор и прогнозируемые входные данные.

4.4 Практическое использование градиентного спуска 2 — скорость обучения

Обычно существует два способа проверки сходимости функции:

  • Метод сходимости после множества итераций
    • Невозможно точно определить количество необходимых итераций
    • Легче всего построить график зависимости стоимости от количества итераций
    • По графику можно легко предсказать необходимое количество итераций
  • Автоматический метод проверки сходимости (сравнение пороговых значений)
    • Сложнее выбрать правильный порог
    • При почти линейной форме функции стоимости сложно определить сходимость```markdown Для градиентного спуска обычно используется метод сходимости после множества итераций для получения параметров, минимизирующих стоимость функции. Автоматический метод проверки сходимости (например, установка ( J(\theta) < 10^{-3} ) как условия сходимости) практически никогда не применяется.

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

  - Невозможно точно определить количество необходимых итераций
  - Легче всего построить график зависимости стоимости от количества итераций
  - По графику можно легко предсказать необходимое количество итераций
- Автоматический метод проверки сходимости (сравнение пороговых значений)
  - Сложнее выбрать правильный порог
  - При почти линейной форме функции стоимости сложно определить сходимостьДля градиентного спуска обычно используется метод сходимости после множества итераций для получения параметров, минимизирующих стоимость функции. Автоматический метод проверки сходимости (например, установка \( J(\theta) < 10^{-3} \) как условия сходимости) практически никогда не применяется.

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

![Иллюстрация](images/20180108_103357.png)

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

![Иллюстрация](images/20180108_104701.png)

Через постоянное изменение значения \(\alpha\), строение графиков и анализ полученных результатов можно определить подходящую скорость обучения. При попытках можно использовать значения \(\alpha\) таких как ... 0,001, 0,003, 0,01, 0,03, 0,1 ...

## 4.5 Характеристики и полиномиальная регрессия (Features and Polynomial Regression)При выборе характеристик также можно самостоятельно вывести новые характеристики, заменяющие или расширяющие старые. Например, для характеристики площади дома можно разделить её на две характеристики — длину и ширину, или объединить эти две характеристики обратно в одну — площадь.Линейная регрессия может аппроксимировать данные только прямой линией, иногда требуется аппроксимация данными через кривую, то есть полиномиальная регрессия (Polynomial Regression).

Например, модель второй степени: $h_{\theta}(x)=\theta_{0}+\theta_{1}x_{1}+\theta_{2}x_{2}^{2}$
Или модель третьей степени: \( h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2^2 + \theta_3 x_3^3 \)

Или модель с корнем: \( h_{\theta}(x) = \theta_0 + \theta_1 x_1 + \theta_2 x_2^2 + \theta_3 \sqrt{x_3} \)

![image](images/20180108_113132.png)

При использовании полиномиальной регрессии важно помнить, что очень важно выполнить масштабирование признаков. Например, если диапазон \( x_1 \) составляет от 1 до 1000, то диапазон \( x_1^2 \) будет составлять от 1 до 1000000. Без масштабирования признаков диапазоны могут быть несоответствующими, что также может негативно влиять на производительность.

## 4.6 Нормальное уравнение (Normal Equation)

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

Нормальное уравнение заключается в том, чтобы установить \( \frac{\partial}{\partial \theta_j} J(\theta_j) = 0 \), что позволяет вычислить значение параметров \( \theta \) через аналитическую функцию \( \theta = (X^T X)^{-1} X^T y \). В Octave/Matlab это можно записать как `theta = inv(X'*X)*X'*y`.

> \( X^{-1} \): Обратная матрица \( X \), в Octave используется функция `inv`, а также есть аналогичная функция `pinv`.
>
> `X'`: В Octave обозначает транспонированную матрицу \( X \), то есть \( X^T \).Таблица сравнения нормального уравнения и градиентного спуска:

| Условие               | Градиентный спуск                | Нормальное уравнение                          |
| :-------------------- | :----------------------------- | :------------------------------------------- |
| Необходимость выбора \(\alpha\) | Да                            | Нет                                         |
| Необходимость итерационных вычислений   | Да                            | Нет                                         |
| При большом количестве признаков      | Подходит, сложность \( O(kn^2) \) | Не подходит, сложность обратной матрицы \( O(n^3) \) |
| Применимость          | Для различных моделей           | Только для линейных моделей, где матрица обратима            |

[^1]: Как правило, когда количество признаков \( n \) превышает 10000, нормальное уравнение становится менее эффективным.
[^2]: Алгоритм градиентного спуска универсален, тогда как для специфических задач линейной регрессии нормальное уравнение является хорошей альтернативой.

**Процесс вывода нормального уравнения**:
$$
\begin{aligned}
J(\theta) &= \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 \\
&= \frac{1}{2m} ||X\theta - y||^2 \\
&= \frac{1}{2m} (X\theta - y)^T (X\theta - y)
\end{aligned}
$$
Раскрывая вышестоящее выражение, получаем

$$
J(\theta)=\frac{1}{2m}\left({\theta}^{T}X^{T}X\theta-\theta^{T}X^{T}y-y^{T}X\theta+y^{T}y\right)
$$

Учитывая, что \(\theta^{T}X^{T}y\) и \(y^{T}X\theta\) являются скалярными величинами и эквивалентны, имеем:

$$
J(\theta)=\frac{1}{2m}\left[X^{T}X\theta-2\theta^{T}X^{T}y+y^{T}y\right]
$$Далее находим частные производные от \( J(\theta) \) в соответствии с правилами дифференцирования матриц:

$$
\frac{dX^{T}AX}{dX} = (A + A^{\mathrm{T}})X
$$

$$
\frac{dX^{T}A}{dX} = A
$$

Имеем:

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

Положив \(\frac{\partial J(\theta)}{\partial \theta} = 0\), получаем
$$
\theta = (X^{T}X)^{-1}X^{T}y
$$



## 4.7 Нелинейность нормального уравнения (Noninvertibility of Normal Equation)

(Этот раздел является дополнительным материалом)

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

- линейной зависимости признаков

  Например, если включены два признака — размер в дюймах и размер в метрах, они линейно зависимы.

  То есть \( x_1 = x_2 * (3.28)^2 \).

- количества признаков, превышающего количество наблюдений (\( m \leqslant n \)).


Если заметили, что матрица \( X^{T}X \) невырождена, можно попробовать:
- удалить лишние/повторяющиеся признаки
- увеличить количество тренировочных наблюдений
- использовать регуляризацию (представлено далее).

Для таких невырожденных матриц мы используем термин **особенная матрица** или **вырожденная матрица**.

В этом случае, если всё же хотим использовать нормальное уравнение, в Octave можно воспользоваться функцией `pinv`, которая отличается от `inv`. Функция `pinv` называется псевдообратной и позволяет правильно рассчитывать значение \(\theta\), даже когда матрица невырождена.# 5 Основы Octave/Matlab

При повторении материала можно быстро просмотреть видео, а также сделать необходимые заметки.

## 5.1 Базовые операции

## 5.2 Передвижение данных

## 5.3 Вычисление над данными

## 5.4 Построение графиков

## 5.5 Управляющие конструкции: for, while, if

## 5.6 Векторизация

$$
\sum_{j=0}^n \theta_j x_j = \theta^T x
$$

## 5.x Часто используемые функции

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/scruel-Notes-ML-AndrewNg.git
git@api.gitlife.ru:oschina-mirror/scruel-Notes-ML-AndrewNg.git
oschina-mirror
scruel-Notes-ML-AndrewNg
scruel-Notes-ML-AndrewNg
master