Машинное обучение от входа до XX (четыре): переоснащение и регуляризация

машинное обучение

переоснащение

Рассмотрим следующие три подгоночные кривые для набора данных

На рисунке 1 в качестве гипотетической функции используется линия y = θ_0 + θ_1x, однако набор обучающих данных, похоже, не соответствует линии, поэтому гипотетическая функция не подходит. Рисунок 2 принимает y = θ_0 + θ_1x + θ_2x^2 , и мы получаем кривую с лучшим соответствием. Глядя на рисунок 3, кажется, что, добавляя функции более высокого порядка, мы получаем лучшее соответствие. Однако, если вы добавите слишком много функций, вы можете получить «идеальное» совпадение, но это не очень хорошая предсказательная функция. Мы называем рисунок 1 так называемым拟合不足(underfitting), рис. 3过度拟合(overfitting).

недообучение или вызов高偏差(high bias), что приводит к гипотетической функции, которая плохо представляет тенденцию данных, обычно потому, что функция слишком проста или имеет слишком мало признаков. другая крайность,过度拟合Хотя он может «хорошо» соответствовать набору обучающих данных, он плохо предсказывает новые данные, что может быть связано с предположением, что функция слишком сложна и вводит слишком много кривых и углов.

Это относится как к линейной регрессии, так и к логистической регрессии, вот пример логистической регрессии:

Есть два основных решения:

  1. Уменьшите количество функций: вручную удалите некоторые ненужные функции или используйте алгоритм выбора модели.
  2. Функция регуляризованных затрат: сохранить функции, но попытаться уменьшитьθ, если много признаков с малыми весами, подойдет регуляризация.

Регулярная функция затрат

正则化(regularized)Основная идея такова: если вы хотите уменьшить долю определенных слагаемых в многочлене, то увеличьте долю коэффициентов этих слагаемых в функции стоимости. Например, мы хотим, чтобы следующий полином был ближе к квадратичной кривой:

? θ_0 + θ_1x + θ_2x^2 + θ_3x^3 + θ_4x^4 ?

Если оба $θ_3 и θ_4$ равны 0, то полином представляет собой кривую квадратичной функции. Однако нам не нужно полностью удалять эти два члена более высокого порядка, пока θ_3 и θ_4 уменьшаются или даже стремятся к 0. Установите следующую функцию стоимости:

? min_\theta\ \frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + 1000\cdot\theta_3^2 + 1000\cdot\theta_4^2 ?

Глядя на эту функцию стоимости, мы добавляем два дополнительных члена к исходной функции стоимости, которые будут наказывать чрезмерно большие θ_3 и θ_4. Поэтому, чтобы минимизировать результат функции стоимости, алгоритм автоматически выберет относительно маленькое θ_3, θ_4$ или даже близкое к 0. Это приводит к гипотетической функции, которая является почти квадратичной функцией.

мы просто положили всеθВсе добавляются к функции стоимости, и она реализуется正则化的代价函数:

? min_\theta\ \frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + λ\sum_{j=1}^nθ_j^2 ?

здесьλ— параметр регуляризации, можно предположить, что еслиλЕсли она слишком велика, конечная функция гипотезы будет стремиться к постоянному члену $θ_0$, что приведет к недостаточной подгонке; если она слишком малаλ, что сделает регуляризацию недействительной и вызовет переоснащение.

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

Этот образец имеет две переменныеMicrochip Test 1иMicrochip Test 2, соответственно обозначаемые какx_1иx_2. Сначала мы сопоставляем две функции с 28 функциями (выполняя комбинацию двух параметров более высокого порядка):

? mapFeature(x)=\begin{bmatrix}1 \newline x_1 \newline x_2 \newline x_1^2 \newline x_1x_2 \newline x_2^2 \newline x_1^3 \newline \vdots \newline x_1x_2^5 \newline x_2^6\end{bmatrix} ?

еслиλ=0, получается следующая граница решения.Очевидно, что эта граница решения имеет过度拟合(overfitting)Подозревать:

еслиλ=1, получается следующая граница решения, которая кажется более подходящей:

еслиλ=100, получить следующую границу решения, кажется, что эта граница решения снова拟合不足(underfitting):

Вывод градиентного спуска

Функция стоимости введения регулярного члена приведена ранее:

? min_\theta\ \frac{1}{2m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + λ\sum_{j=1}^nθ_j^2 ?

Замечено, что дополнительный член $λ\sum_{j=1}^nθ_j^2 $, введенный регуляризованной функцией стоимости, взят изj=1началось (т.不惩罚常数项), поэтому наш вывод формулы алгоритма градиентного спуска должен различатьj=0иj=1Два случая:

? \begin{align*} & \text{Repeat}\ \lbrace \newline & \ \ \ \ \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} \newline & \ \ \ \ \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] &\ \ \ \ \ \ \ \ \ \ j \in \lbrace 1,2...n\rbrace\newline & \rbrace \end{align*} ?

Вторую часть приведенной выше формулы можно переписать как:

? θ_j := θ_j(1 - α\frac{λ}{m}) - α\frac{1}{m}\sum_{i=1}^m(h_θ(x^{(i)}) - y^{(i)})x_j^{(i)} ?

Первый член приведенной выше формулы равен $ 1 - α\frac{λ}{m}

Сводка кода логистической регрессии

использоватьfminuncФункция стоимости логистической регрессии алгоритма реализуется следующим образом:sigmoidфункция эквивалентнаg(z):

function [J, grad] = costFunction(theta, X, y)
    m = length(y); % number of training examples
    J = 0;
    grad = zeros(size(theta));
    J = (1 / m) * ( (-1 .* y') * log(sigmoid((X * theta))) - (1 - y)' * log(1 - sigmoid((X * theta))) );
    grad = ((1 / m) .* sum((sigmoid((X * theta)) - y) .* X))';
end

перечислитьfminunc:

options = optimset('GradObj', 'on', 'MaxIter', 400);
%  Run fminunc to obtain the optimal theta
%  This function will return theta and the cost 
[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

Функция регуляризованной стоимости, здесь следует отметить, что обычный член не штрафует $ \ theta_0 $:

function [J, grad] = costFunctionReg(theta, X, y, lambda)
    m = length(y); % number of training examples
    J = 0;
    grad = zeros(size(theta));

    theta_2 = theta;
    theta_2(1) = 0;
    J = (1 / m) * ( (-1 .* y') * log(sigmoid((X * theta))) - (1 - y)' * log(1 - sigmoid((X * theta))) ) + sum(theta_2.^2) * lambda / (2 * m);
    grad = ( (1 / m) .* sum((sigmoid((X * theta)) - y) .* X) + ( (lambda / m) .* theta_2' ) )';
end