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


11

Пусть A будет матрицей независимых переменных N×п а B будет соответствующей матрицей зависимых значений . В конька регрессии, определим параметр так , что: . Теперь давайте [usv] = svd (A) и диагональная запись 's'. мы определяем степени свободы (df) = . Ридж-регрессия сжимает коэффициенты компонентов низкой дисперсии и, следовательно, параметр управляет степенями свободы. Так что дляλ β = ( A T A + λ I ) - 1 A T B d i = i t hn i = 1 ( d i ) 2N×1λβзнак равно(ATA+λя)-1ATВdязнак равнояTчас λλ=0λΣязнак равно1N(dя)2(dя)2+λλλзнак равно0, что имеет место в случае нормальной регрессии, df = n, и, следовательно, будут рассмотрены все независимые переменные. Проблема, с которой я сталкиваюсь, заключается в том, чтобы найти значение учетом 'df' и матрицы 's'. Я попытался перестроить вышеприведенное уравнение, но не получил решение в закрытой форме. Пожалуйста, предоставьте любые полезные указатели.λ


Что ж, мне нужно время, чтобы ответить на это (возможно, другие помогут вам быстрее), но большинство идей можно почерпнуть из stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/… И что такое в определении степени свободы, так как я как-то скучаю по λ . Кλ
Дмитрий Челов

@Dmitrij: Спасибо за ответ, я обновил вопросы и заменил 'k' на λ
Амит

Привет, Амит, как узнать, какие степени свободы, прежде чем вычислять параметр регуляризации?
Баз

Ответы:


9

Для этого подходит алгоритм Ньютона-Рафсона / Фишера-Скоринга / Тейлора.

У вас есть уравнение для решения для h ( λ ) = p i = 1 d 2 iλ с производной h

час(λ)знак равноΣязнак равно1пdя2dя2+λ-dезнак равно0
Тогда вы получите: h(λ)h(λ(0))+(λ-λ(0))h
часλзнак равно-Σязнак равно1пdя2(dя2+λ)2
час(λ)час(λ(0))+(λ-λ(0))часλ|λзнак равноλ(0)знак равно0

реорганизуя для вы получаете: λ = λ ( 0 ) - [ hλ

λзнак равноλ(0)-[часλ|λзнак равноλ(0)]-1час(λ(0))
dя2знак равно1λ(0)знак равноп-dеdе

λ(J+1)знак равноλ(J)+[Σязнак равно1пdя2(dя2+λ(J))2]-1[Σязнак равно1пdя2dя2+λ(J)-dе]

λλ


dя2знак равно1

λ(0)λ(0)знак равно0

(+1) Я бы в любом случае дал бы одно и то же численное решение.
Дмитрий Челов

6

Вот небольшой код Matlab, основанный на формуле, доказанной вероятностью:

function [lamda] = calculate_labda(Xnormalised,df)
    [n,p] = size(Xnormalised);   

    %Finding SVD of data
    [u s v]=svd(Xnormalised);
    Di=diag(s);
    Dsq=Di.^2;

    %Newton-rapson method to solve for lamda
    lamdaPrev=(p-df)/df;
    lamdaCur=Inf;%random large value
    diff=lamdaCur-lamdaPrev;   
    threshold=eps(class(XstdArray));    
    while (diff>threshold)          
        numerator=(sum(Dsq ./ (Dsq+lamdaPrev))-df);        
        denominator=sum(Dsq./((Dsq+lamdaPrev).^2));        
        lamdaCur=lamdaPrev+(numerator/denominator);        
        diff=lamdaCur-lamdaPrev;        
        lamdaPrev=lamdaCur;        
    end
    lamda=lamdaCur;
end

2
Иди командой!
вероятностная

Попытка редактора утверждает, что условие while должно быть while ( abs(diff)>threshold ).
gung - Восстановить Монику

while( abs(diff) > threshold )-1001е-16
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.