Публичный аккаунт WeChat: You Er Hut
Автор: Питер
Редактор: Питер
Эндрю Нг Машинное обучение-2-Градиентный спуск и нормальное уравнение
Основное содержание второй недели включает в себя:
- многомерные функции
- Многомерный градиентный спуск
- Градиентный спуск на практике
- нормальное уравнение
Несколько функций
Продолжая использовать пример модели цен на жилье, добавляя дополнительные функции, такие как:Этаж комнаты, количество комнат, расположениеи т. д., составляют модель с несколькими переменными
n: представляет количество функций
: представляет первыйобучающий экземпляр, который является первым экземпляром в матрице признаковОК, этовектор
: указывает первыйпервый тренировочный экземплярфункции; i для строки, j для столбца
Поддержка многомерных предположенийВыражается как: Для упрощения формулы введем, формула преобразуется в:Размер матрицы признаков X равен, формула упрощается до:
Многомерный градиентный спуск
Цели алгоритма
Подобно одномерной линейной регрессии, в многомерной линейной регрессии строится функция стоимости, затем эта функция стоимости полностьюСумма квадратов ошибок моделирования,который:
в:
Алгоритмический процесс
исходная форма:
функция стоимостиВнесите:
После взятия производной: в
когдачас,
Код Python
Учитывая матрицу признаков X, выход y, скорость обучения, найти функцию стоимости
import numpy as np
def computeCost(X,y,theta):
inner = np.power(((X * theta.T) - y), 2) # 求解每个平方项
return np.sum(inner) / (2 / len(X)) # 求和再除以2*len(X)
Градиентный спуск на практике
Масштабирование функций
лицопроблема многомерных признаков, нам нужно убедиться, что эти функции имеют одинаковые масштабы, чтобы помочь алгоритму градиентного спуска сходиться быстрее.
Возьмем в качестве примера задачу о ценах на жилье. Предположим, что используются только два признака: размер и количество домов, причем эти два параметра являются горизонтальной и вертикальной координатами соответственно.0-2000
квадратных футов, количество в0-5
между.
Построение контурного графика функции стоимости показывает, что изображение будет выглядеть очень плоским, а алгоритму градиентного спуска требуется много итераций для сходимости.
Решение: Максимально масштабируйте масштаб всех объектов от -1 до 1, чтобы:вэто среднее значение,стандартное отклонение
средняя нормализация
проблема скорости обучения
На каждую итерацию алгоритма градиентного спуска влияет скорость обучения
- Если скорость обучения слишком мала, количество итераций, необходимых для достижения сходимости, будет очень большим, а скорость сходимости будет очень низкой.
- Если скорость обучения слишком велика, каждая итерация может не уменьшить функцию стоимости, пересечь локальный минимум и не сойтись.
Общие тарифы на обучение включают:
Собственный и полиномиальная регрессия
Например, задача прогнозирования цен на жилье.При этом площадь дома = ширина * глубина
При фактической подгонке данных может быть выбрана квадратичная или кубическая модель; если используется модель полиномиальной регрессии, перед запуском градиентного спуска необходимо масштабирование признаков.
Нормальное уравнение
Недостатки градиентного спуска
Для достижения локального оптимума требуется много итераций.
Демонстрация нормального уравнения
Нормальные уравнения необратимы
Нормальное уравнение состоит в том, чтобы найти параметр, который минимизирует функцию стоимости, решив уравнение в следующем примере.:
Необратимые матрицы нельзя решить с помощью нормальных уравнений
Normal Equation VS Gradient Descent
градиентный спуск | нормальное уравнение |
---|---|
Необходимо выбрать скорость обучения | ненужный |
Требуется несколько итераций | одна операция |
Его также лучше применять, когда количество признаков n велико. | нужно рассчитатьОбратная матрица . Если количество признаков n велико, вычислительные затраты высоки, потому что вычислительная временная сложность обратной матрицы равна, обычно когдаМенее 10000 по-прежнему приемлемо |
Подходит для всех типов моделей | Подходит только для линейных моделей, не подходит для других моделей, таких как модели логистической регрессии. |
параметрПроцесс решения
, дляОбъясните процесс получения:
в:
- Преобразуйте == векторное выражение == в == матричное выражение ==, тогда есть,в:
- заРядМатрица столбцов (количество образцов,это количество функций)
- заматрица со строкой и столбцом
- заматрица со строкой и столбцом
- == правильноСделайте следующее преобразование ==
- следующий заЧастная производная, правило вывода матрицы ==, которое нужно использовать==:
Итак, есть:
сделать,
тогда есть
Реализация нормальных уравнений Python
import numpy as np
def normalEquation(X, y):
theta = np.linalg.inv(X.T@X)@X.T@Y # X.T@X等价于X.T.dot(X) @等价于.dot
return theta