Это 19-й день моего участия в августовском испытании обновлений.Подробности о событии:Испытание августовского обновления
Это нормальное уравнение описывается множественной линейной регрессией. В предыдущей линейной регрессии мы говорили о градиентном спуске, который выполняет формулу в цикле для постепенного спуска, в то время как нормальное уравнение является противоположным, которое напрямую ищет оптимальное решение для θ. В принципе, это можно сделать за один шаг.
Что такое нормальное уравнение?
Сначала рассмотрим простой пример:
Intuition:
If
Теперь предположим, что θ — просто действительное число, а не вектор, а функция J — квадратичная функция относительно θ.
Как найти минимальное значение этой функции за один шаг? Пока вы изучали математику в средней школе, вы будете знать: вывод. выяснитьЭто x - значение, при котором функция минимизируется.
Но обычно мы не подвергаемся такого рода функциям, диапазон значений является векторным. В градиентном спуске частная производная каждого θ выполняется в цикле, и, наконец, когда θ=0 найдено, мы можем напрямую найти этот шаг равным 0.
Теперь, когда у нас есть обучающий пример, добавьте столбец в набор данных.Превратите этот обучающий набор в матрицу коэффициентов:
Также укажите y как вектор:
Матрица X содержит все собственные значения и является матрицей m*n+1, а y является m-мерной матрицей. m – количество обучающих выборок.
Теперь нужен только один шаг:Можно найти оптимальное решение.
Set theta to be equal to X transpose X inverse times X transpose y, this would give you the value of theta that minimizes your cost function.
Транспонирование матрицы собственных значений умножается само на себя, затем инвертируется, затем умножается на транспонирование матрицы собственных значений, а затем умножается на вектор y.
Итак, нормальное уравнение:
m examples , н признаков.
Предположим теперь, что наша обучающая выборка имеет m обучающих выборок. Всего имеется n количеств признаков. Вектор функции x равен
И преобразование x в матрицу X становится
и у:
После перечисления Xy:
Просто нужно одно предложение в октавеpinv(X' * X) * x' * y
И этот метод не требует масштабирования признаков.
еслиЧто делать, если матрица необратима?
На самом деле в октаве есть два метода обращения матриц, один из нихpinv()
Одинinv()
. С первым вы можете получить правильное значение θ для красной пешки, даже если матрица необратима.
Обратимая матрица AB = BA = I, для матрицы A вы можете найти матрицу B и умножить ее, чтобы результат был равен единичной матрице, тогда матрица A является обратимой матрицей.
Вообще говоря, есть два случая необратимых матриц, с которыми вы сталкиваетесь:
-
Есть лишние функции как для вас
Одна единица площади – это квадратные футы, а одна единица площади – это квадратные метры. В этом случае вы можете отказаться от количества признаков.
-
Слишком много функций (m
В этом случае некоторые количественные характеристики удаляются или упорядочиваются.
Регуляризация будет рассмотрена позже.
У меня есть незрелая идея: почему нельзя зациклить m, чтобы сделать его квадратной матрицей, хахахаха, например
Сравнение нормального уравнения и градиентного спуска
Gradient descent | Нормальное уравнение |
---|---|
Need to choose α Needs many iterations |
No need to choose α Don't need to iterate |
Works well even when n is large. | Need to compute, Медленно, если n очень велико The normal equation method actually do not work for some more sophisticated learning algorithms. |
- Градиентный спуск:
- недостаток:
- Нужно попробовать несколько раз, чтобы выбрать подходящий α
- Требуется несколько итераций
- преимущество:
- Его можно использовать даже при большом объеме данных.
- недостаток:
- Нормальное уравнение:
- преимущество:
- Нет необходимости выбирать α
- Нет необходимости в нескольких итерациях
- Не думайте о диапазоне значений для масштабирования
- недостаток:
- нужно рассчитатьИ умножая две матрицы, порядок сложностиПоэтому, когда объем данных относительно велик, операция будет очень медленной.
- Недоступно для некоторых сложных алгоритмов
- преимущество:
Суммировать
Простые алгоритмы с небольшими объемами данных работают быстрее при использовании обычных уравнений. Если объем данных большой или алгоритм более сложный, вам все равно нужно использовать градиентный спуск.