Estou implementando Ridge Regression em um módulo Python / C e me deparei com esse "pequeno" problema. A idéia é que eu queira provar os graus efetivos de liberdade mais ou menos igualmente espaçados (como o gráfico na página 65, nos "Elementos do aprendizado estatístico" ), ou seja, exemplo: que são os autovalores da matriz , de a \ mathrm {df} (\ lambda _ {\ min}) = p . Uma maneira fácil de definir o primeiro limite é deixar \ lambda _ {\ max} = \ sum_i ^ p d_i ^ 2 / c (assumindo que \ lambda _ {\ max} \ gg d_i ^ 2 ), em que c
Como o título sugere, preciso amostrar de a em uma escala em que seja amostrada (aproximadamente), digamos, em intervalos de para ... há uma maneira fácil de fazer isso? Eu pensei em resolver a equação para cada usando o método Newton-Raphson, mas isso adicionará muitas iterações, especialmente quando for grande. Alguma sugestão?
fonte
Respostas:
Esta é uma resposta longa . Então, vamos dar uma versão resumida dela aqui.
R
código de morte encefálica, ausente de qualquer tentativa de otimização, pode calcular uma grade de tamanho 100 com em alguns segundos. Umcódigocuidadosamente escritoreduziria isso em pelo menos 2 a 3 ordens de magnitude.C
Existem dois esquemas abaixo para garantir a convergência monotônica. Um usa os limites mostrados abaixo, que parecem ajudar a salvar um ou dois passos de Newton ocasionalmente.
Exemplo : e uma grade uniforme para os graus de liberdade de tamanho 100. Os valores próprios são distribuídos por Pareto e, portanto, altamente distorcidos. Abaixo estão as tabelas do número de etapas de Newton para encontrar cada raiz.p=100000
Não haverá uma solução em forma fechada para esta , em geral, mas não é muito de estrutura presente, que pode ser usado para produzir soluções muito eficazes e seguros, utilizando métodos de determinação de raiz padrão.
Antes de aprofundar as coisas, vamos coletar algumas propriedades e conseqüências da função
Propriedade 0 : é uma função racional de . (Isso é aparente na definição.) Consequência 0 : Nenhuma solução algébrica geral existirá para encontrar a raiz . Isso ocorre porque existe um problema equivalente de busca de raiz polinomial de grau e, portanto, se não for extremamente pequeno (ou seja, menor que cinco), nenhuma solução geral existirá. Então, precisaremos de um método numérico.df λ
df(λ)−y=0 p p
Propriedade 1 : a função é convexa e diminui em . (Pegue derivadas.) Consequência 1 (a) : O algoritmo de busca de raiz de Newton se comportará muito bem nessa situação. Seja os graus de liberdade desejados e a raiz correspondente, ou seja, . Em particular, se começarmos com qualquer valor inicial (então, ), a sequência de iterações da etapa Newton convergirá monotonicamente para o solução únicadf λ≥0
y λ0 y=df(λ0) λ1<λ0 df(λ1)>y λ1,λ2,… λ0 .
λ1>λ0 λ2≤λ0 df df geralmente convexo para λ negativoλ , isso fornece um forte motivo para preferir começar à esquerda da raiz desejada. Caso contrário, precisamos verificar novamente se o passo de Newton não resultou em um valor negativo para a raiz estimada, o que pode nos colocar em algum lugar em uma porção não-convexa de .
Consequência 1 (c) : depois de encontrarmos a raiz para alguns y 1 e, em seguida, procurarmos a raiz de alguns , usandodf
y1 y2<y1 λ1 modo que como nosso palpite inicial garante que começamos à esquerda da segunda raiz. Portanto, nossa convergência é garantida para ser monotônica a partir daí.df(λ1)=y1
Consequência 1 (b) : Além disso, se com , o primeiro passo renderia , de onde aumentará monotonicamente para a solução pela consequência anterior (consulte a advertência abaixo). Intuitivamente, esse último fato se segue porque, se começarmos à direita da raiz, a derivada é "rasa" demais devido à convexidade de e, portanto, o primeiro passo de Newton nos levará a algum lugar à esquerda da raiz. NB Como d f não é
Propriedade 2 : Existem limites razoáveis para fornecer pontos de partida "seguros". Usando argumentos de convexidade e desigualdade de Jensen, temos os seguintes limites Consequência 2 : Isso nos diz que a raiz satisfazendo obedece 1
Isso pressupõe que para todos i . Se este não for o caso, então o mesmo limite detém por considerar unicamente o positivo d i e substituindo p pelo número de positiva d i . NB : Como d f ( 0 ) = p assumindo todos os d idEu> 0 Eu dEu p dEu d f( 0 ) = p , então y ∈ ( 0 , p ] , de onde os limites são sempre não triviais (por exemplo, o limite inferior é sempre não negativo).dEu> 0 y∈(0,p]
Aqui está um gráfico de um exemplo "típico" de com p = 400 . Sobrepusemos uma grade de tamanho 10 aos graus de liberdade. Estas são as linhas horizontais no gráfico. As linhas verdes verticais correspondem ao limite inferior em ( ⋆ ) .df(λ) p=400 (⋆)
Um algoritmo e algum exemplo de código R
Um algoritmo muito eficiente, dada uma grade dos graus de liberdade desejados em ( 0 , p ], é classificá-los em ordem decrescente e, em seguida,encontrarsequencialmentea raiz de cada um, usando a raiz anterior como ponto de partida para o Podemos refinar isso ainda mais, verificando se cada raiz é maior que o limite inferior para a próxima raiz e, se não, podemos iniciar a próxima iteração no limite inferior.y1,…yn (0,p]
Aqui está um exemplo de código
R
, sem nenhuma tentativa de otimizá-lo. Como visto abaixo, ainda é bastante rápido, emboraR
seja - para ser educado - horrivelmente, terrivelmente, terrivelmente lento nos loops.Abaixo está o algoritmo completo final, que recebe uma grade de pontos e um vetor de ( não d 2 i !).di d2i
Exemplo de chamada de função
fonte
Além disso, existem alguns métodos que calcularão o caminho completo da regularização com eficiência:
Os pacotes acima são todos R, como você está usando Python, o scikit-learn contém implementações para cume, laço e rede elástica.
fonte
ols
função norms
pacote R pode usar otimização numérica para encontrar a penalidade ideal usando AIC eficaz. Mas você deve aplicar a penalidade máxima que nem sempre é fácil.Uma alternativa possível, de acordo com a fonte abaixo, parece ser:
Fonte: https://onlinecourses.science.psu.edu/stat857/node/155
fonte