Является ли регрессия гребня бесполезной в больших размерах (


50

Рассмотрим старую добрую регрессионную проблему с п предикторами и размером выборки . Обычная мудрость заключается в том, что оценщик OLS будет более подходящим и, как правило, будет превосходить оценщик регрессии гребня:Стандартно используется перекрестная проверка для нахождения оптимального параметра регуляризации . Здесь я использую 10-кратное резюме. Уточнение уточнения: когда , под "оценщиком OLS" я понимаю "оценщик минимальной нормы OLS", заданныйN

β^знак равно(ИксИкс+λя)-1ИксY,
n<pλN<п
β^МНКзнак равно(ИксИкс)+ИксYзнак равноИкс+Y,

У меня есть набор данных с и . Все предикторы стандартизированы, и есть немало, которые (одни) могут хорошо предсказать . Если я случайно выберу маленькое число, скажем, , число предикторов, я получу разумную кривую CV: большие значения дают нулевой R-квадрат, маленькие значения дают отрицательный R-квадрат (потому что переоснащение) и есть некоторый максимум между ними. Для кривая выглядит аналогично. Тем не менее, для намного превышающего это значение, например, , я вообще не получаю никакого максимума: кривые плато, означающие, что OLS сNзнак равно80п>1000Yпзнак равно50<Nλλпзнак равно100>Nппзнак равно1000λλ0 работает так же хорошо, как регрессия гребня с оптимальной .λ

введите описание изображения здесь

Как это возможно и что это говорит о моем наборе данных? Я упускаю что-то очевидное или это действительно нелогично? Как может быть какая-либо качественная разница между и учитывая, что оба больше, чем ?пзнак равно100пзнак равно1000N

При каких условиях OLS-решение с минимальной нормой для не подходит?N<п


Обновление: было некоторое недоверие в комментариях, так что вот воспроизводимый пример с использованием glmnet. Я использую Python, но пользователи R легко адаптируют код.

%matplotlib notebook

import numpy as np
import pylab as plt
import seaborn as sns; sns.set()

import glmnet_python    # from https://web.stanford.edu/~hastie/glmnet_python/
from cvglmnet import cvglmnet; from cvglmnetPlot import cvglmnetPlot

# 80x1112 data table; first column is y, rest is X. All variables are standardized
mydata = np.loadtxt('../q328630.txt')   # file is here https://pastebin.com/raw/p1cCCYBR
y = mydata[:,:1]
X = mydata[:,1:]

# select p here (try 1000 and 100)
p = 1000

# randomly selecting p variables out of 1111
np.random.seed(42)
X = X[:, np.random.permutation(X.shape[1])[:p]]

fit = cvglmnet(x = X.copy(), y = y.copy(), alpha = 0, standardize = False, intr = False, 
               lambdau=np.array([.0001, .001, .01, .1, 1, 10, 100, 1000, 10000, 100000]))
cvglmnetPlot(fit)
plt.gcf().set_size_inches(6,3)
plt.tight_layout()

введите описание изображения здесь введите описание изображения здесь


2
@DJohnson Без шуток. Обычное 10-кратное резюме, означающее, что каждый тренировочный набор имеет n = 72, а каждый тестовый набор имеет n = 8.
говорит амеба, восстанови Монику

2
Это далеко от обычного резюме. Учитывая это, как можно ожидать чего-то подобного обнаруживаемому результату?
Майк Хантер

3
@DJohnson Я не понимаю, почему ты говоришь, что это далеко от обычного. Это и есть 10-кратное резюме.
говорит амеба, восстанови Монику

2
@ seanv507 Понятно. Ну, я предлагаю определить «решение с лямбда = 0» как «решение с минимальной нормой с лямбда = 0». Я предполагаю, что мой вопрос может быть переформулирован следующим образом: при каких условиях будет решение с минимальной нормой OLS с n <p overfit против not overfit?
говорит амеба, восстанови Монику

3
@amoeba: Спасибо за этот вопрос. Это было чрезвычайно поучительно и интересно до сих пор.
usεr11852 говорит восстановить Monic

Ответы:


23

Естественная регуляризация происходит из-за присутствия множества мелких компонентов в теоретическом PCA . Эти небольшие компоненты неявно используются, чтобы соответствовать шуму, используя маленькие коэффициенты. При использовании минимальной нормы OLS вы подгоняете шум многими небольшими независимыми компонентами, и это имеет эффект регуляризации, эквивалентный регуляризации Риджа. Эта регуляризация часто слишком сильна, и ее можно компенсировать, используя «антирегуляризацию», известную какотрицательный хребет. В этом случае вы увидите, что минимум кривой MSE появляется для отрицательных значений λ .Иксλ

Под теоретическим PCA я имею в виду:

Пусть Икс~N(0,Σ) многомерное нормальное распределение. Существует линейная изометрия е такая как Uзнак равное(Икс)~N(0,D) где D диагонально: компоненты независимы. D просто получается диагонализацией Σ .UDΣ

Теперь модель можно записать y = f ( β ) . f ( x ) + ϵ (линейная изометрия сохраняет скалярное произведение). Если вы напишите γ = f ( β ) , модель можно записать y = γ .Yзнак равноβ,Икс+εYзнак равное(β),е(Икс)+εγзнак равное(β)Yзнак равноγ,U+εy = γ . u + ϵ f y = β . х + ϵ| |β| |знак равно| |γ| |Yзнак равноγ,U+ε является изображение с помощьюе оценки .Yзнак равноβ,Икс+ε

Теоретический PCA превращает независимые предикторы в независимых предикторов. Это только слабо связано с эмпирическим PCA, где вы используете эмпирическую ковариационную матрицу (которая сильно отличается от теоретической с небольшим размером выборки). Теоретический PCA не является практически вычисляемым, но используется здесь только для интерпретации модели в пространстве ортогональных предикторов.

Давайте посмотрим, что произойдет, когда мы добавим в модель множество независимых от малой дисперсии предикторов:

теорема

Регуляризация хребта с коэффициентом p λ эквивалентна (когда ):п

  • добавление поддельных независимых предикторов (центрированных и одинаково распределенных), каждый с дисперсиейλпλп
  • примерка обогащенной модели с минимальной нормой оценки МНК
  • сохраняя только параметры для истинных предикторов

(эскиз) Доказательство

Мы собираемся доказать, что функции стоимости асимптотически равны. Давайте модель на реальные и поддельные предикторы:Yзнак равноβИкс+β'Икс'+ε . Функция стоимости Риджа (для истинных предикторов) может быть записана:

соsTλзнак равно| |β| |2+1λ| |Y-Иксβ| |2

При использовании минимальной нормы OLS отклик подгоняется идеально: погрешность равна 0. Функция стоимости имеет отношение только к норме параметров. Это может быть разделено на истинные параметры и поддельные:

соsTλ,пзнак равно| |β| |2+инф{| |β'| |2|Икс'β'знак равноY-Иксβ}

В правильном выражении минимальное решение нормы дается выражением:

β'знак равноИкс'+(Y-Иксβ)

Теперь используем SVD для :Икс'

Икс'знак равноUΣВ

Икс'+знак равноВΣ+U

Мы видим, что норма существенно зависит от сингулярных значений которые являются обратной величиной сингулярных значений . Нормализованная версия - . Я смотрел на литературу, и особые значения больших случайных матриц хорошо известны. Для достаточно больших и минимальные и максимальные особые значения аппроксимируются (см. Теорему 1.1 ):X + X X β'Икс'+Икс'Икс'pnsminsmaxп/λИкс'пNsминsМаксимум

смакс(

sмин(п/λИкс')п(1-N/п)
sМаксимум(п/λИкс')п(1+N/п)

Так как при большом , стремится к 0, мы можем только сказать , что все особые значения аппроксимируются . Таким образом:пN/пп

| |β'| |1λ| |Y-Иксβ| |

В заключение:

соsTλ,п| |β| |2+1λ| |Y-Иксβ| |2знак равносоsTλ

Примечание : не имеет значения, сохраняете ли вы коэффициенты ложных предикторов в вашей модели. Дисперсия, введенная равна . Таким образом, вы увеличиваете свое MSE только в что в любом случае стремится к 1. Каким-то образом вам не нужно обращаться с ложными предикторами иначе, чем с реальными.λβ'Икс'1+n/pλп| |β'| |21п| |Y-Иксβ| |2NпMSЕ(β)1+N/п

Теперь вернемся к данным @ amoeba. После применения теоретического PCA к (предполагается, что оно нормальное) преобразуется с помощью линейной изометрии в переменную , компоненты которой являются независимыми и сортируются в порядке убывания дисперсии. Задача эквивалентна преобразованной проблеме .x u y = β x + ϵ y = γ u + ϵИксИксUYзнак равноβИкс+εYзнак равноγU+ε

Теперь представьте, что дисперсия компонентов выглядит так:

введите описание изображения здесь

Рассмотрим множество из последних компонент, назовем сумму их дисперсии . Каждая из них имеет дисперсию, приблизительно равную и независима. Они играют роль ложных предикторов в теореме.λ λ / pпλλ/п

Этот факт более ясен в модели @ jonny: только первый компонент теоретического PCA соотносится с (он пропорционален ) и имеет огромную дисперсию. Все остальные компоненты (пропорциональные ) имеют сравнительно очень малую дисперсию (напишите ковариационную матрицу и по диагонали ее, чтобы увидеть это) и играют роль ложных предикторов. Я рассчитал, что регуляризация здесь соответствует (приблизительно) предыдущему на то время как истинное . Это определенно переусердствует.¯ х х я - ¯ х N ( 0 , 1YИкс¯Икся-Икс¯γ1γ 2 1 =1N(0,1п2)γ1γ12знак равно1пЭто видно по тому факту, что конечное MSE намного больше, чем идеальное MSE. Эффект регуляризации слишком сильный.

Иногда возможно улучшить эту естественную регуляризацию с помощью хребта. Во-первых, в теореме иногда требуется действительно большое (1000, 10000 ...), чтобы серьезно соперничать с Риджем, и конечность подобна неточности. Но это также показывает, что Ридж является дополнительной регуляризацией по сравнению с естественной неявной регуляризацией и, таким образом, может иметь очень небольшой эффект. Иногда эта естественная регуляризация уже слишком сильна, и Ридж может даже не быть улучшением. Более того, лучше использовать антирегуляризацию: хребет с отрицательным коэффициентом. Это показывает MSE для модели @ jonny ( ), используя :p p = 1000 λ Rпппзнак равно1000λр

введите описание изображения здесь


2
+1 Очень приятно, спасибо, что написали это. Я думаю, что важно уточнить, что когда вы говорите «регуляризация», вы имеете в виду регуляризацию (т.е. ребра). Можно надеяться, что лассо или эластичная сетка могут вести себя лучше, и именно это люди и используют в ситуациях . Никто не использует чистый гребень в таких условиях, и стандартным советом является использование регуляризации, обеспечивающей разреженность; поэтому поведение чистого гребня может иметь только академический интерес. Тем не менее, довольно удивительно, что мы, кажется, обнаруживаем это здесь. Почему это не известно? n pL2np
говорит амеба: восстанови Монику

1
Плохо закодированный пропорциональный . Извините, я не успел что-то сделать. Мое основное внимание было уделено поведению минимальной нормы OLS, чтобы убедиться, что оно отличается от вашего примера, и что «некоторая не слишком плохая регуляризация» в 40 первых случаях была значительно лучше. σ 2λσ2
Бенуа Санчес

3
Я думаю, что я понял тайну: регуляризация хребта с коэффициентом эквивалентна минимальной норме OLS, добавляющей поддельных предикторов, каждый с дисперсией (асимптотически для больших ). В ваших данных и модели Джони это происходит без каких-либо действий благодаря компонентам PCA с наименьшей дисперсией. Теперь мне нужно время, чтобы найти способ объяснить это ясно ...p λ / p pλpλ/pp
Бенуа Санчес

1
Я уточнил небольшой момент: коэффициенты ложных предикторов не сильно увеличивают ошибку (см. Примечание в конце доказательства). Это важно, потому что в ваших данных / Джонни они неизбежно сохраняются.
Бенуа Санчес

3
Я попробовал отрицательный хребет. Я не могу поверить, но это работает !!! (и не только на модели Джонни ...)
Бенуа Санчес

16

Спасибо всем за отличную дискуссию. Суть дела в том, что МНК с минимальной нормой эффективно выполняет усадку, которая похожа на регрессию гребня. Кажется, это происходит всякий раз, когда . По иронии судьбы, добавление предикторов чистого шума может даже использоваться как очень странная форма или регуляризация.pn


Часть I. Демонстрация с искусственными данными и аналитическое резюме

@Jonny (+1) предложил очень простой искусственный пример, который я немного адаптирую здесь. из размера и генерируются таким образом, что все переменные являются гауссовым с единичной дисперсией, а соотношение между каждым предсказателем и ответом . Я исправлю .n × p y ρ ρ = .2Xn×pyρρ=.2

Я буду использовать CV без изменений, потому что для квадратичной ошибки есть аналитическое выражение: оно называется PRESS , «прогнозируемая сумма квадратов». где - остатки а - это матрица в терминах СВД . Это позволяет реплицировать результаты @ Джонни, не используя и фактически не выполняя перекрестную проверку (я строю график отношения PRESS к сумме квадратов ):еяе=у-у=у-Ну,НН=Х(ХХ+λI)-1х=US2

PRESS=i(ei1Hii)2,
ei
e=yy^=yHy,
HX=USVy
H=X(XX+λI)1X=US2S2+λU
X=USVglmnety

введите описание изображения здесь

Этот аналитический подход позволяет вычислить предел при . Простое включение в формулу PRESS не работает: когда и , все остатки равны нулю, а матрица hat является единичной матрицей с единицами на диагонали, что означает, что дроби в PRESS Уравнение не определено. Но если мы вычислим предел в , то он будет соответствовать OLS-решению минимальной нормы с .λ = 0 n < p λ = 0 λ 0 λ = 0λ0λ=0n<pλ=0λ0λ=0

Хитрость заключается в том, чтобы выполнить разложение в ряд Тейлора, если : Здесь я ввел матрицу ГрамаH = U 1λ0G=XX=US2U

H=U11+λ/S2UU(1λ/S2)U=IλUS2U=IλG1.
G=XX=US2U .

Мы почти закончили:Лямбда была отменена, поэтому здесь мы имеем предельное значение. Я нарисовал его с большой черной точкой на рисунке выше (на панелях, где ), и он идеально подходит.р>н

PRESS=i(λ[G1y]iλGii1)2=i([G1y]iGii1)2.
p>n

Обновление 21 февраля. Приведенная выше формула является точной, но мы можем получить некоторое представление, сделав дальнейшие приближения. Похоже, что имеет приблизительно равные значения по диагонали, даже если имеет очень неравные значения (вероятно, потому что довольно хорошо смешивает все собственные значения). Таким образом, для каждого у нас есть где угловые скобки обозначают усреднение. Используя это приближение, мы можем переписать:Это приближение показано на рисунке выше с красными кружками. S U я G - 1 я яS - 2PRESS S - 2G1SUiGii1S2

PRESSS2S2Uy2.

Будет ли это быть больше или меньше , чем зависит от единственного числа значений . В этом моделировании соотносится с первым ПК из поэтому большое, а все остальные члены маленькие. (В моих реальных данных также хорошо предсказывается ведущими компьютерами.) Теперь, в случае , если столбцы достаточно случайны, то все сингулярные значения будут довольно близки друг к другу (строки примерно ортогональны). «Основной» терминy2=Uy2SyXU1yypnXU1yбудет умножено на коэффициент меньше 1. Сроки к концу умножатся на факторы больше 1, но не намного больше. В целом норма уменьшается. Напротив, в случае будут очень маленькие особые значения. После инверсии они станут крупными факторами, которые увеличат общую норму.pN

[Этот аргумент очень волнистый; Я надеюсь, что это можно сделать более точным.]

В качестве проверки работоспособности, если я поменяю местами порядок значений в единственном числе, S = diag(flipud(diag(S)));то прогнозируемое MSE будет выше везде на 2-й и 3-й панелях.1

figure('Position', [100 100 1000 300])
ps = [10, 100, 1000];

for pnum = 1:length(ps)
    rng(42)
    n = 80;
    p = ps(pnum);
    rho = .2;
    y = randn(n,1);
    X = repmat(y, [1 p])*rho + randn(n,p)*sqrt(1-rho^2);

    lambdas = exp(-10:.1:20);
    press = zeros(size(lambdas));
    [U,S,V] = svd(X, 'econ');
    % S = diag(flipud(diag(S)));   % sanity check

    for i = 1:length(lambdas)
        H = U * diag(diag(S).^2./(diag(S).^2 + lambdas(i))) * U';
        e = y - H*y;
        press(i) = sum((e ./ (1-diag(H))).^2);
    end

    subplot(1, length(ps), pnum)
    plot(log(lambdas), press/sum(y.^2))
    hold on
    title(['p = ' num2str(p)])
    plot(xlim, [1 1], 'k--')

    if p > n
        Ginv = U * diag(diag(S).^-2) * U';
        press0 = sum((Ginv*y ./ diag(Ginv)).^2);
        plot(log(lambdas(1)), press0/sum(y.^2), 'ko', 'MarkerFaceColor', [0,0,0]);

        press0approx = sum((diag(diag(S).^-2/mean(diag(S).^-2)) * U' * y).^2);
        plot(log(lambdas(1)), press0approx/sum(y.^2), 'ro');
    end
end

Часть II. Добавление предикторов чистого шума как форма регуляризации

@Jonny, @Benoit, @Paul, @Dikran и другие приводят веские аргументы в пользу того, что увеличение количества предикторов приведет к сокращению минимального нормативного OLS-решения. Действительно, если , любой новый предиктор может только уменьшить норму решения с минимальной нормой. Таким образом, добавление предикторов приведет к снижению нормы, в некоторой степени аналогично тому, как регрессия гребня нарушает норму.п>N

Так можно ли это использовать как стратегию регуляризации? Мы начинаем с и а затем продолжаем добавлять предикторов чистого шума в качестве попытки регуляризации. Я сделаю LOOCV и сравню его с LOOCV для гребня (рассчитанного как указано выше). Обратите внимание, что после получения для предикторов я «обрезаю» его на потому что меня интересуют только исходные предикторы.Nзнак равно80пзнак равно40Qβ^п+Qп

введите описание изображения здесь

ОНО РАБОТАЕТ!!!

На самом деле не нужно «усекать» бета-версию; даже если я использую полную бета-версию и полные предикторы , я могу получить хорошую производительность (пунктирная линия на правом участке). Я думаю, что это подражает моим фактическим данным в этом вопросе: только немногие предикторы действительно предсказывают , большинство из них - чистый шум, и они служат регуляризацией. В этом режиме дополнительная регуляризация гребня совсем не помогает.п+QY

rng(42)
n = 80;
p = 40;
rho = .2;
y = randn(n,1);
X = repmat(y, [1 p])*rho + randn(n,p)*sqrt(1-rho^2);

lambdas = exp(-10:.1:20);
press = zeros(size(lambdas));
[U,S,V] = svd(X, 'econ');

for i = 1:length(lambdas)
    H = U * diag(diag(S).^2./(diag(S).^2 + lambdas(i))) * U';
    e = y - H*y;
    press(i) = sum((e ./ (1-diag(H))).^2);
end

figure('Position', [100 100 1000 300])
subplot(121)
plot(log(lambdas), press/sum(y.^2))
hold on
xlabel('Ridge penalty (log)')
plot(xlim, [1 1], 'k--')
title('Ridge regression (n=80, p=40)')
ylim([0 2])

ps = [0 20 40 60 80 100 200 300 400 500 1000];
error = zeros(n, length(ps));
error_trunc = zeros(n, length(ps));
for fold = 1:n
    indtrain = setdiff(1:n, fold);
    for pi = 1:length(ps)
        XX = [X randn(n,ps(pi))];
        if size(XX,2) < size(XX,1)
            beta = XX(indtrain,:) \ y(indtrain,:);
        else
            beta = pinv(XX(indtrain,:)) * y(indtrain,:);
        end
        error(fold, pi) = y(fold) - XX(fold,:) * beta;
        error_trunc(fold, pi) = y(fold) - XX(fold,1:size(X,2)) * beta(1:size(X,2));
    end
end

subplot(122)
hold on
plot(ps, sum(error.^2)/sum(y.^2), 'k.--')
plot(ps, sum(error_trunc.^2)/sum(y.^2), '.-')
legend({'Entire beta', 'Truncated beta'}, 'AutoUpdate','off')
legend boxoff
xlabel('Number of extra predictors')
title('Extra pure noise predictors')
plot(xlim, [1 1], 'k--')
ylim([0 2])

@MartijnWeterings В этом эксперименте я начинаю с n = 80 и p = 40. По мере того, как общее число предикторов (p + q) приближается к n = 80, проблема становится плохо обусловленной, и решение OLS резко переопределяется. Существует огромный пик в погрешности около q = 40. Как только p + q> n, вступает в силу ограничение «минимальной нормы», и ошибка начинает уменьшаться, но требуется некоторое время, пока она не вернется туда, где она была с q = 0. Это происходит около q = 70, то есть p + q = 130. После этого ошибка уменьшается еще больше, и эта часть графика аналогична графику регрессии гребня. Имеет ли это смысл?
говорит амеба, восстанови Монику

@MartijnWeterings 1-й комментарий: мы на одной странице. На 2-й комментарий: в моем вопросе я не усекаю бета, это правильно. Но на самом деле, если я не усекаю бета в своей симуляции (использую y(fold) - XX(fold,:) * betaвместо XX(fold,1:size(X,2)) * beta(1:size(X,2))), то результаты не сильно меняются. Я думаю, я должен добавить это к моему ответу. Я думаю, что мои исходные данные показывают такое поведение.
говорит амеба, восстанови Монику

(1/2): Я все еще прорабатываю все комментарии и код, чтобы понять, но мне приходит мысль: есть ли связь между этим явлением, которое мы наблюдаем, и связью между регрессией гребня и случайными эффектами?
Райан Симмонс

(2/2): согласно ответу Ранделя здесь ( stats.stackexchange.com/questions/122062/… ), мы видим оценочный эквивалент между случайными эффектами и регрессией гребня, где лямбда равна отношению невязок к дисперсии случайный эффект. Здесь, согласно ответу Бенуа Санчеса, мы видим, что регрессия гребня эквивалентна добавлению произвольного числа поддельных независимых предикторов, каждый из которых имеет дисперсию, равную функции лямбды и числу параметров. Мне кажется, есть концептуальные отношения.
Райан Симмонс

@amoeba это была ошибка. добавление масштабированного вектора y к матрице X несколько регуляризует, но не совпадает с векторами регрессии гребня или шума. Это, однако, заставляет меня задуматься, что происходит, когда мы вычитаем немного из каждого x, чтобы сделать каждую переменную слегка отрицательно коррелированной (или менее положительной) с вектором y. Это для того, чтобы выполнить некоторую «отрицательную» регуляризацию. Это делается для того, чтобы «отменить» регуляризацию 1000 векторов (в какой-то момент она может стать слишком большой, как вы видите, когда пиковый / оптимальный коэффициент регуляризации сейчас почти вне диапазона). Y
Секст Эмпирик

15

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

library(glmnet)
set.seed(1846)
noise <- 10
N <- 80
num.vars <- 100
target <- runif(N,-1,1)
training.data <- matrix(nrow = N, ncol = num.vars)
for(i in 1:num.vars){
  training.data[,i] <- target + rnorm(N,0,noise)
}
plot(cv.glmnet(training.data, target, alpha = 0,
               lambda = exp(seq(-10, 10, by = 0.1))))

MSE для различной лямбды с 100 предикторами

100 переменных ведут себя «нормальным» образом: некоторое положительное значение лямбда сводит к минимуму ошибки выборки.

Но увеличьте num.vars в приведенном выше коде до 1000, и вот новый путь MSE. (Я расширил лог (лямбда) = -100, чтобы убедить себя.

MSE для различных лямбда с 1000 предикторов

Что я думаю, что происходит

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

Поскольку число предикторов становится очень большим, «средняя ошибка» стремится к нулю, и становится лучше просто позволить коэффициентам падать, где они могут, и суммировать все, чем смещать их в сторону 0.

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

РЕДАКТИРОВАТЬ:

«Плоское» поведение для очень низкой лямбды всегда будет происходить, так как решение сходится к решению с минимальной нормой OLS. Точно так же кривая будет плоской для очень высокой лямбды, так как решение сходится к 0. Минимума не будет, если одно из этих двух решений является оптимальным.

Почему решение с минимальной нормой OLS так (сравнительно) хорошо в этом случае? Я думаю, что это связано со следующим поведением, которое я нашел очень нелогичным, но размышление имеет большой смысл.

max.beta.random <- function(num.vars){
  num.vars <- round(num.vars)
  set.seed(1846)
  noise <- 10
  N <- 80
  target <- runif(N,-1,1)
  training.data <- matrix(nrow = N, ncol = num.vars)

  for(i in 1:num.vars){
    training.data[,i] <- rnorm(N,0,noise)
  }
  udv <- svd(training.data)

  U <- udv$u
  S <- diag(udv$d)
  V <- udv$v

  beta.hat <- V %*% solve(S) %*% t(U) %*% target

  max(abs(beta.hat))
}


curve(Vectorize(max.beta.random)(x), from = 10, to = 1000, n = 50,
      xlab = "Number of Predictors", y = "Max Magnitude of Coefficients")

abline(v = 80)

График максимальной величины коэффициентов при увеличении числа предикторов

При случайном генерировании предикторов, не связанных с ответом, при увеличении p коэффициенты становятся больше, но как только p становится намного больше, чем N, они уменьшаются до нуля. Это также происходит в моем примере. Таким образом, нерегулярные решения этих проблем не требуют усадки, потому что они уже очень малы!

Это происходит по тривиальной причине. может быть выражен точно в виде линейной комбинации столбцов . - вектор минимальной нормы коэффициентов. По мере добавления большего числа столбцов норма должна уменьшаться или оставаться постоянной, поскольку возможная линейная комбинация состоит в том, чтобы сохранить прежние коэффициенты такими же и установить новые коэффициенты равными .YИксβ^β^0


1
(+1). Таким образом, явление, кажется, происходит, когда предсказатели коррелируют. Формально это не означает, что кривая ошибки не имеет минимума для положительного значения и что предел в 0 не является большим. Это просто означает, что кривая имеет тенденцию становиться плоской, и что порог того, насколько малым должно быть чтобы регуляризация прекратила работать, стремится к 0 для больших . Здесь этот порог выходит за пределы вычислительных ограничений, но ответ Firebug предполагает, что он может существовать всегда. λλп
Бенуа Санчес

1
Зачем вам нужно glmnetв вашем обновлении? Если вам нужно только решение с минимальной нормой OLS, тогда есть прямая формула (см. 2-ую формулу в моем вопросе), и если вычислить SVD для тогда эта формула становится просто . Вероятно, в R также есть функция, которая вычисляет это решение, но я действительно не знаю R :),& beta ; = V S - 1 U уИксзнак равноUSВβ^знак равноВS-1UY
говорит амеба. Восстановите Монику

2
Думая об этом еще немного, это совсем не удивительно. может быть выражен точно в виде линейной комбинации векторов в . - вектор коэффициентов с наименьшей нормой. Когда вы добавляете вектор, норма должна уменьшаться или оставаться той же величины, потому что вы можете оставить старые коэффициенты такими же и установить новые равными нулю. X & beta ; βyXβ^β^
Джонни Ломонд

3
Пример Джонни хорош, потому что он уже проанализирован: см. Оценку Джеймса-Стейна . Оценивая среднее фиксированного вектора с размером 3 или больше, мы всегда можем улучшить простое усреднение, смещаясь к нулю, что в большей или меньшей степени соответствует регрессии гребня. Интересно, может быть, улучшение слишком слабое, чтобы наблюдать в этом случае? θ
Пол

3
Хорошо известно, что регрессия гребня эквивалентна добавлению дополнительных «поддельных» выборок к набору данных, где каждая выборка имеет значение в одном объекте и нули везде, а все соответствующие ответы равны нулю. (Переписать функцию стоимости RR в этой форме тривиально.) Теперь мне интересно, есть ли способ добавить дополнительные функции (например, чистый шум?), Которые имели бы аналогичный эффект. Конечно, добавление дополнительных функций означает, что увеличит его размерность, но можно взглянуть на его значения только у «оригинальных» предикторов. @Paulп& beta ;λβ^
амеба говорит восстановить Монику

6

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

Код (для запуска на обычном ноутбуке требуется несколько минут)

library(mlr)
daf = read.csv("https://pastebin.com/raw/p1cCCYBR", sep = " ", header = FALSE)

tsk = list(
  tsk1110 = makeRegrTask(id = "tsk1110", data = daf, target = colnames(daf)[1]),
  tsk500 = makeRegrTask(id = "tsk500", data = daf[, c(1,sample(ncol(daf)-1, 500)+1)], target = colnames(daf)[1]),
  tsk100 = makeRegrTask(id = "tsk100", data = daf[, c(1,sample(ncol(daf)-1, 100)+1)], target = colnames(daf)[1]),
  tsk50 = makeRegrTask(id = "tsk50", data = daf[, c(1,sample(ncol(daf)-1, 50)+1)], target = colnames(daf)[1]),
  tsk10 = makeRegrTask(id = "tsk10", data = daf[, c(1,sample(ncol(daf)-1, 10)+1)], target = colnames(daf)[1])
)

rdesc = makeResampleDesc("CV", iters = 10)
msrs = list(mse, rsq)
configureMlr(on.par.without.desc = "quiet")
bm3 = benchmark(learners = list(
    makeLearner("regr.cvglmnet", alpha = 0, lambda = c(0, exp(seq(-10, 10, length.out = 150))),
    makeLearner("regr.glmnet", alpha = 0, lambda = c(0, exp(seq(-10, 10, length.out = 150))), s = 151)
    ), tasks = tsk, resamplings = rdesc, measures = msrs)

Результаты

getBMRAggrPerformances(bm3, as.df = TRUE)
#   task.id    learner.id mse.test.mean rsq.test.mean
#1    tsk10 regr.cvglmnet     1.0308055  -0.224534550
#2    tsk10   regr.glmnet     1.3685799  -0.669473387
#3   tsk100 regr.cvglmnet     0.7996823   0.031731316
#4   tsk100   regr.glmnet     1.3092522  -0.656879104
#5  tsk1110 regr.cvglmnet     0.8236786   0.009315037
#6  tsk1110   regr.glmnet     0.6866745   0.117540454
#7    tsk50 regr.cvglmnet     1.0348319  -0.188568886
#8    tsk50   regr.glmnet     2.5468091  -2.423461744
#9   tsk500 regr.cvglmnet     0.7210185   0.173851634
#10  tsk500   regr.glmnet     0.6171841   0.296530437

Они делают в основном то же самое для разных задач.

Итак, как насчет оптимальных лямбд?

sapply(lapply(getBMRModels(bm3, task.ids = "tsk1110")[[1]][[1]], "[[", 2), "[[", "lambda.min")
# [1] 4.539993e-05 4.539993e-05 2.442908e-01 1.398738e+00 4.539993e-05
# [6] 0.000000e+00 4.539993e-05 3.195187e-01 2.793841e-01 4.539993e-05

Обратите внимание, что лямбды уже преобразованы. В некоторых случаях даже выбирается минимальная лямбда .λзнак равно0

Я немного повозился glmnetи обнаружил, что минимальная лямбда не выбрана. Проверьте:

РЕДАКТИРОВАТЬ:

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

cvfit = cv.glmnet(x = x, y = y, alpha = 0, lambda = exp(seq(-10, 10, length.out = 150)))
plot(cvfit)

введите описание изображения здесь

Заключение

Таким образом, в основном действительно улучшает подгонку ( отредактируйте: но не намного! ).λ>0

Как это возможно и что это говорит о моем наборе данных? Я упускаю что-то очевидное или это действительно нелогично?

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

Изменить: Имейте в виду, однако, что путь регуляризации гребня использует предыдущие оценки параметров, когда мы вызываем glmnet, но это за пределами моей компетенции. Если мы установим действительно низкий уровень lambdaизоляции, это, вероятно, приведет к снижению производительности.

РЕДАКТИРОВАТЬ: лямбда-выбор действительно говорит больше о ваших данных. Поскольку большие лямбда-выражения уменьшают производительность, это означает, что в вашей модели существуют преференциальные, то есть большие коэффициенты, поскольку большие лямбда-сокращения сокращают все коэффициенты до нуля. Хотя означает, что эффективные степени свободы в вашей модели меньше, чем кажущиеся степени свободы, .рλ0п

Как может быть какая-либо качественная разница между p = 100 и p = 1000, учитывая, что оба больше, чем n?

р = 100пзнак равно1000 неизменно содержит по крайней мере ту же информацию или даже больше, чем .пзнак равно100


Комментарии

Кажется, вы получаете крошечный минимум для некоторой ненулевой лямбды (я смотрю на вашу фигуру), но кривая все еще действительно очень плоская слева от нее. Таким образом, мой главный вопрос состоит в том, почему λ → 0 заметно не подходит. Я пока не вижу ответа здесь. Вы ожидаете, что это будет общим явлением? Т.е. для любых данных с n≪p lambda = 0 будет работать [почти] так же хорошо, как оптимальная лямбда? Или это что-то особенное в этих данных? Если вы посмотрите выше в комментариях, вы увидите, что многие люди даже не поверили мне, что это возможно.

Я думаю, что вы связываете производительность проверки с производительностью теста, и такое сравнение не является оправданным.

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

Кроме того, я не совсем понимаю вашу последнюю строчку. Посмотрите на вывод cv.glmnet для p = 100. Он будет иметь совсем другую форму. Так что же влияет на эту форму (асимптоту слева и отсутствие асимптоты), когда р = 100 или р = 1000?

Давайте сравним пути регуляризации для обоих:

fit1000 = glmnet(x, y, alpha = 0, lambda = exp(seq(-10,10, length.out = 1001)))
fit100 = glmnet(x[, sample(1000, 100)], y, alpha = 0, lambda = exp(seq(-10,10, length.out = 1001)))
plot(fit1000, "lambda")

введите описание изображения здесь

x11()
plot(fit100, "lambda")

введите описание изображения здесь

пзнак равно1000λпзнак равно100

пзнак равно1000


λ0N«п

Кроме того, я не совсем понимаю вашу последнюю строчку. Посмотрите на cv.glmnetвыход для р = 100. Он будет иметь совсем другую форму. Так что же влияет на эту форму (асимптоту слева и отсутствие асимптоты), когда р = 100 или р = 1000?
говорит амеба, восстанови Монику

Знаете ли вы, mlrвыбирает lambda.minили lambda.1secv.glmnetтерминологии)?
говорит амеба: восстанови Монику

@amoeba lambda.min. Также есть regr.cvglmnetученик, который, вероятно, позволяет выбрать другие правила.
Firebug

Благодарю. Честно говоря, я не понимаю результаты вашего теста 1e-100. Например, для р = 1100 это дает MSE = 1,45. Но здесь нет настройки гиперпараметра во внутреннем цикле, так что в общем случае внутренний цикл CV вообще не нужен. Это означает, что результат должен быть таким же, как и с не вложенным CV при лямбда = 1e-100. Но мы видим на первом рисунке, что MSE там около 0,7. Это не имеет смысла для меня.
говорит амеба: восстанови Монику

5

Каким образом (минимальная норма) МНК может не соответствовать?

Короче говоря:

Экспериментальные параметры, которые коррелируют с (неизвестными) параметрами в истинной модели, с большей вероятностью будут оцениваться с высокими значениями в процедуре подбора OLS с минимальной нормой. Это потому, что они будут соответствовать «модель + шум», тогда как другие параметры будут соответствовать только «шуму» (таким образом, они будут соответствовать большей части модели с более низким значением коэффициента и с большей вероятностью будут иметь высокое значение в минимальной норме мсл).

Этот эффект уменьшит количество переоснащения в минимальной норме процедуры подбора OLS. Эффект становится более выраженным, если доступно больше параметров, так как тогда становится более вероятным включение большей части «истинной модели» в оценку.

Более длинная часть:
(Я не уверен, что здесь разместить, так как проблема не совсем ясна для меня, или я не знаю, с какой точностью ответ должен ответить на вопрос)

Ниже приведен пример, который может быть легко построен и демонстрирует проблему. Эффект не так уж странен, и примеры легко сделать.

  • пзнак равно200
  • Nзнак равно50
    • Tмзнак равно10
    • коэффициенты модели определяются случайным образом

В этом примере мы видим, что есть некоторая перестройка, но коэффициенты параметров, которые принадлежат истинной модели, имеют более высокое значение. Таким образом, R ^ 2 может иметь некоторое положительное значение.

Изображение ниже (и код для его генерации) демонстрируют, что перенастройка ограничена. Точки, которые относятся к модели оценки 200 параметров. Красные точки относятся к тем параметрам, которые также присутствуют в «истинной модели», и мы видим, что они имеют более высокое значение. Таким образом, существует некоторая степень приближения к реальной модели и получения R ^ 2 выше 0.

  • Обратите внимание, что я использовал модель с ортогональными переменными (синус-функции). Если параметры коррелируют, то они могут встречаться в модели с относительно очень высоким коэффициентом и становиться более наказуемыми при минимальной норме OLS.
  • sяN(aИкс)sяN(бИкс)ИксИксNп

пример перетяжки

library(MASS)

par(mar=c(5.1, 4.1, 9.1, 4.1), xpd=TRUE)

p <- 200       
l <- 24000
n <- 50
tm <- 10

# generate i sinus vectors as possible parameters
t <- c(1:l)
xm <- sapply(c(0:(p-1)), FUN = function(x) sin(x*t/l*2*pi))

# generate random model by selecting only tm parameters
sel <- sample(1:p, tm)
coef <- rnorm(tm, 2, 0.5)

# generate random data xv and yv with n samples
xv <- sample(t, n)
yv <- xm[xv, sel] %*% coef + rnorm(n, 0, 0.1)

# generate model
M <- ginv(t(xm[xv,]) %*% xm[xv,])

Bsol <- M %*% t(xm[xv,]) %*% yv
ysol <- xm[xv,] %*% Bsol

# plotting comparision of model with true model
plot(1:p, Bsol, ylim=c(min(Bsol,coef),max(Bsol,coef)))
points(sel, Bsol[sel], col=1, bg=2, pch=21)
points(sel,coef,pch=3,col=2)

title("comparing overfitted model (circles) with true model (crosses)",line=5)
legend(0,max(coef,Bsol)+0.55,c("all 100 estimated coefficients","the 10 estimated coefficients corresponding to true model","true coefficient values"),pch=c(21,21,3),pt.bg=c(0,2,0),col=c(1,1,2))

Усеченная бета-техника в отношении регрессии гребня

L2β

  • Кажется, что модель усеченного шума делает то же самое (только вычисляет немного медленнее, а может быть, чуть чаще и хуже).
  • Однако без усечения эффект гораздо менее сильный.
  • Это соответствие между добавлением параметров и штрафом за гребень не обязательно является самым сильным механизмом отсутствия перенастройки. Это особенно заметно на кривой 1000p (на изображении вопроса), доходящей почти до 0,3, в то время как другие кривые с другим p не достигают этого уровня, независимо от того, каков параметр регрессии гребня. Дополнительные параметры в этом практическом случае не совпадают со сдвигом параметра гребня (и я предполагаю, что это потому, что дополнительные параметры создадут лучшую, более полную, модель).

  • Параметры шума снижают норму с одной стороны (точно так же как регрессия гребня), но также вносят дополнительный шум. Бенуа Санчес показывает, что в пределе, добавив много параметров шума с меньшим отклонением, он в конечном итоге станет таким же, как регрессия гребня (растущее число параметров шума компенсирует друг друга). Но в то же время требуется гораздо больше вычислений (если мы увеличим отклонение шума, чтобы позволить использовать меньше параметров и ускорить вычисления, разница станет больше).

Rho = 0,2 сравнение усеченного шума с регрессией гребня

Rho = 0,4 сравнение усеченного шума с регрессией гребня

Rho = 0,2, увеличивая дисперсию шумовых параметров до 2 сравнение усеченного шума с регрессией гребня

пример кода

# prepare the data
set.seed(42)
n = 80
p = 40
rho = .2
y = rnorm(n,0,1)
X = matrix(rep(y,p), ncol = p)*rho + rnorm(n*p,0,1)*(1-rho^2)

# range of variables to add
ps = c(0, 5, 10, 15, 20, 40, 45, 50, 55, 60, 70, 80, 100, 125, 150, 175, 200, 300, 400, 500, 1000)
#ps = c(0, 5, 10, 15, 20, 40, 60, 80, 100, 150, 200, 300) #,500,1000)

# variables to store output (the sse)
error   = matrix(0,nrow=n, ncol=length(ps))
error_t = matrix(0,nrow=n, ncol=length(ps))
error_s = matrix(0,nrow=n, ncol=length(ps))

# adding a progression bar
pb <- txtProgressBar(min = 0, max = n, style = 3)

# training set by leaving out measurement 1, repeat n times 
for (fold in 1:n) {
    indtrain = c(1:n)[-fold]

    # ridge regression
    beta_s <- glmnet(X[indtrain,],y[indtrain],alpha=0,lambda = 10^c(seq(-4,2,by=0.01)))$beta
    # calculate l2-norm to compare with adding variables
    l2_bs <- colSums(beta_s^2)

    for (pi in 1:length(ps)) {
        XX = cbind(X, matrix(rnorm(n*ps[pi],0,1), nrow=80))
        XXt = XX[indtrain,]

        if (p+ps[pi] < n) {
            beta = solve(t(XXt) %*% (XXt)) %*% t(XXt) %*% y[indtrain]
        }
        else {
            beta = ginv(t(XXt) %*% (XXt)) %*% t(XXt) %*% y[indtrain]
        }

        # pickout comparable ridge regression with the same l2 norm      
        l2_b <- sum(beta[1:p]^2)
        beta_shrink <- beta_s[,which.min((l2_b-l2_bs)^2)] 

        # compute errors
        error[fold, pi] = y[fold] - XX[fold,1:p] %*% beta[1:p]
        error_t[fold, pi] = y[fold] - XX[fold,] %*% beta[]
        error_s[fold, pi] = y[fold] - XX[fold,1:p] %*% beta_shrink[]
    }
    setTxtProgressBar(pb, fold) # update progression bar
}

# plotting
plot(ps,colSums(error^2)/sum(y^2) , 
     ylim = c(0,2),
     xlab ="Number of extra predictors",
     ylab ="relative sum of squared error")
lines(ps,colSums(error^2)/sum(y^2))
points(ps,colSums(error_t^2)/sum(y^2),col=2)
lines(ps,colSums(error_t^2)/sum(y^2),col=2)
points(ps,colSums(error_s^2)/sum(y^2),col=4)
lines(ps,colSums(error_s^2)/sum(y^2),col=4)

title('Extra pure noise predictors')

legend(200,2,c("complete model with p + extra predictors",
               "truncated model with p + extra predictors",
               "ridge regression with similar l2-norm",
               "idealized model uniform beta with 1/p/rho"),
       pch=c(1,1,1,NA), col=c(2,1,4,1),lt=c(1,1,1,2))

# idealized model (if we put all beta to 1/rho/p we should theoretically have a reasonable good model)
error_op <- rep(0,n)
for (fold in 1:n) {
  beta = rep(1/rho/p,p)
    error_op[fold] = y[fold] - X[fold,] %*% beta
}
id <- sum(error_op^2)/sum(y^2)
lines(range(ps),rep(id,2),lty=2)

1
(+1) Спасибо. Я думаю, что интуитивный аргумент в начале вашего ответа имеет смысл.
говорит амеба: восстанови Монику

1

N«п ) - некорректная обратная задача, а псевдообратный - один из способов ее решения. Регуляризация - это улучшение.

AИксзнак равнограммδ,
Aграммδ - данные с шумом.

Очевидно, что это некорректная обратная задача. Таким образом, вы можете решить эту проблему с помощью SVD или обратного Мура-Пенроуза, что на самом деле сделает решение с наименьшей нормой. Таким образом, это не должно быть удивительно , что ваше решение хотя бы норма не подведет наповал.

Тем не менее, если вы будете следовать документу, вы увидите, что регрессия гребня будет улучшением вышеописанного. Улучшение действительно лучше поведения оценщика, поскольку решение Мура-Пенроуза не обязательно ограничено.

ОБНОВИТЬ

Я понял, что не давал понять, что некорректные проблемы приводят к переоснащению. Вот цитата из газеты Gábor A, Banga JR. Робастная и эффективная оценка параметров в динамических моделях биологических систем . BMC Системная биология. 2015; 9: 74. DOI: 10,1186 / s12918-015-0219-2:

Плохая обусловленность этих проблем обычно возникает из-за (i) моделей с большим количеством параметров (чрезмерная параметризация), (ii) недостаточности экспериментальных данных и (iii) существенных ошибок измерений [19, 40]. Как следствие, мы часто получаем переоснащение таких кинетических моделей, то есть откалиброванных моделей с разумным соответствием имеющимся данным, но плохой способностью к обобщению (низкая прогностическая ценность)

Итак, мой аргумент можно сформулировать следующим образом:

  • плохо поставленные проблемы приводят к переоснащению
  • (n <p) случай - крайне некорректная обратная задача
  • Икс+
  • следовательно, он позаботится о переоснащении, по крайней мере, до некоторой степени, и не должно быть удивительно, что он не полностью потерпит неудачу, в отличие от обычного OLS

Опять же, регуляризация еще более надежное решение.


1
(+1) Спасибо, но я не совсем понимаю, насколько эта статья актуальна. Я посмотрю на это завтра более подробно. Где именно они говорят, что решение с минимальной нормой OLS не будет соответствовать требованиям или что требование минимальной нормы может рассматриваться как регуляризация?
говорит амеба: восстанови Монику

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

1
Я думаю, что загадкой является не то, что решение с минимальной нормой в некоторой степени не улучшает переоснащение, а то, что добавление большего количества регуляризации не улучшает ситуацию дальше. Кроме того, почему решение с минимальной нормой является более эффективным, поскольку число функций растет. Моя интуиция заключается в том, что проблемы с большим количеством параметров требуют большей регуляризации (при прочих равных условиях), а не меньшего. Это действительно интересная проблема, и она может помочь объяснить, почему, например, даже нерегулярные нейронные сети не соответствуют так много, как вы могли бы ожидать.
Дикран Сумчатый

1
@Dikran На самом деле другие формы или регуляризация могут все еще улучшить производительность: например, я могу улучшить производительность (по сравнению с минимальной нормой OLS) с регрессией основного компонента или с эластичной сеткой. Просто регуляризация гребня становится бесполезной. Аналогия с нейронными сетями - захватывающая мысль, которая не приходила мне в голову. То , что я сделал думать о недавно , хотя, является то , что не удивительно , что никто не понимает , почему сложную глубокие обучения вещи , как пакетная нормализация реально работать, учитывая , что даже линейная регрессия гряды из статистики 101 может быть настолько озадачивает :-)
амеба говорит восстановила Моника

2
βN<<пrmsols
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.