Як обчислити параметр регуляризації в регресії хребта із заданими ступенями свободи та вхідною матрицею?


11

Нехай A - матриця незалежних змінних, а B - відповідна матриця залежних значень. У коника регресії, визначимо параметр так , що: . Тепер нехай [usv] = svd (A) і діагональний запис 's'. визначимо ступені свободи (df) = . Регресія хребта зменшує коефіцієнти низькодисперсних компонентів, а отже параметр контролює ступеня свободи. Отже, дляn × 1 λ β = ( A T A + λ I ) - 1 A T B d i = i t hn i = 1 ( d i ) 2н×pн×1λβ=(АТА+λЯ)-1АТБгi=iтгод λλ=0i=1н(гi)2(гi)2+λλλ=0, що є випадком нормальної регресії, df = n, а значить, будуть розглянуті всі незалежні змінні. Проблема, з якою я стикаюся, полягає у знаходженні значення заданого 'df', і матриці 's'. Я намагався впорядкувати вищевказане рівняння, але не отримував рішення закритої форми. Будь ласка, надайте будь-які корисні вказівники.λ


Ну, мені потрібен час, щоб відповісти на це (напевно, інші допоможуть вам швидше допомогти), але більшість розумінь можуть бути взяті з stat.lsa.umich.edu/~kshedden/Courses/Stat600/Notes/… І що таке у визначенні ступеня свободи, оскільки я якось сумую λ . кλ
Дмитро Челов

@Dmitrij: Thnx для відповіді, я оновив питання і замінив 'k' на λ
Amit

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

Відповіді:


9

Для цього підходить алгоритм серії Ньютона-Рафсона / Фішер-балів / Тейлора.

Ви маєте рівняння для розв’язання для h ( λ ) = p i = 1 d 2 iλ з похідною h

год(λ)=i=1pгi2гi2+λ-гf=0
Потім ви отримаєте: h(λ)h(λ(0))+(λ-λ(0))h
годλ=-i=1pгi2(гi2+λ)2
год(λ)год(λ(0))+(λ-λ(0))годλ|λ=λ(0)=0

перестановивши для ви отримаєте: λ = λ ( 0 ) - [ hλ

λ=λ(0)-[годλ|λ=λ(0)]-1год(λ(0))
гi2=1λ(0)=p-гfгf

λ(j+1)=λ(j)+[i=1pгi2(гi2+λ(j))2]-1[i=1pгi2гi2+λ(j)-гf]

λλ


гi2=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 ( abs(diff)>threshold ).
gung - Відновіть Моніку

while( abs(diff) > threshold )-1001е-16
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.