Come prevedere nuovi dati con regressione spline / smooth


11

Qualcuno può aiutare a dare una spiegazione concettuale di come vengono fatte le previsioni per i nuovi dati quando si utilizzano smooths / spline per un modello predittivo? Ad esempio, dato un modello creato usando gamboostnel mboostpacchetto in R, con p-splines, come vengono fatte le previsioni per i nuovi dati? Cosa viene utilizzato dai dati di allenamento?

Supponiamo che ci sia un nuovo valore della variabile indipendente x e che vogliamo prevedere y. Una formula per la creazione di spline viene applicata a questo nuovo valore di dati usando i nodi o df utilizzati durante l'addestramento del modello e quindi i coefficienti del modello addestrato vengono applicati per produrre la previsione?

Ecco un esempio con R, cosa sta facendo la previsione concettualmente per produrre 899.4139 per i nuovi dati mean_radius = 15.99?

#take the data wpbc as example
library(mboost)
data(wpbc)

modNew<-gamboost(mean_area~mean_radius, data = wpbc, baselearner = "bbs", dfbase = 4, family=Gaussian(),control = boost_control(mstop = 5))
test<-data.frame(mean_radius=15.99)
predict(modNew,test)

Domanda: si tratta di interpolazione (interno al dominio) o estrapolazione? Sono gestiti in modo diverso. Sono anche molto dipendenti dalla funzione "base". Una funzione di base radiale come ci si aspetterebbe in un GLM avrà un comportamento sostanzialmente diverso, soprattutto oltre le code, rispetto ad alcune basi polinomiali di alto ordine.
EngrStudent,

EngrStudent, sono interessato a comprendere concettualmente cosa succede in entrambi i casi. Ho assunto (forse in modo errato) che il processo fosse lo stesso in entrambi i casi ma che i valori risultanti differiscono e differiscono per le funzioni di base utilizzate (ma che il processo è stato lo stesso)
B_Miner

Nelle basi polinomiali c'è un fenomeno a volte chiamato "effetto Gibbs". Se si adattano i dati che sono campioni uniformi di una distribuzione normale standard a qualcosa di simile a un polinomio del decimo ordine, e quindi si osserva la qualità dell'interpolazione, si noterà che alle estremità le pendenze sono alte e l'interpolazione è molto scarsa. Nelle basi polinomiali è consuetudine utilizzare un estrapolante di ordine inferiore rispetto all'interpolante. Senza conoscere la "fisica" che definisce i fenomeni, gli extrapolanti sono spesso lineari. Uso MatLab: mathworks.com/help/matlab/ref/interp1.html .
EngrStudent,

Risposte:


10

Il modo in cui viene calcolata la previsione è così:

Dalla vestibilità originale, hai posizioni dei nodi sparse attraverso la gamma dei mean_radiustuoi dati di allenamento. Insieme al grado della base della B-spline (cubico per impostazione predefinita in mboost), queste posizioni dei nodi definiscono la forma delle funzioni della base della B-spline. L'impostazione predefinita mboostè avere 20 nodi interni, che definiscono 24 funzioni cubiche di base B-spline (non chiedere ...). Chiamiamo queste funzioni di base . L'effetto della tua covariata `` mean_radius`` è rappresentato semplicemente come Questo è un trucco molto accurato, perché riduce il difficile problema di stimare il funzione non specificata al problema molto più semplice della stima dei pesi di regressione lineareBj(x);j=1,,24x=

f(x)=j24Bj(x)θj
f(x)θj associato a una raccolta di covariate sintetiche .Bj(x)

La previsione non è poi così complicata: dati i coefficienti stimati , dobbiamo valutare per i dati di previsione . Per questo, tutto ciò di cui abbiamo bisogno sono le posizioni dei nodi che definiscono le funzioni di base per i dati originali. Otteniamo quindi i valori previsti come θ^jx n e w f ( x n e w ) = 24 Σ j B j ( x n e w ) θ j .Bj();j=1,,24xnew

f^(xnew)=j24Bj(xnew)θ^j.

Poiché il boosting è una procedura iterativa, i coefficienti stimati all'iterazione di stop sono in realtà la somma degli aggiornamenti dei coefficienti nelle iterazioni . Se vuoi davvero avere un'idea dei dettagli, dai un'occhiata all'output che ottieni 1 , , m s t o pmstop1,,mstop

bbs(rnorm(100))$dpp(rep(1,100))$predict,

e vai a esplorare da lì. Per esempio,

with(environment(bbs(rnorm(100))$dpp(rep(1,100))$predict), newX)

chiamate

with(environment(bbs(rnorm(100))$dpp(rep(1,100))$predict), Xfun)

per valutare su .x n e wBj()xnew


è fantastico Mi chiedo se ti dispiacerebbe spiegare ampiamente cosa fanno queste funzioni? È vero che ciò che è necessario per "segnare" nuovi dati è l'insieme di coefficienti, posizioni dei nodi utilizzati durante l'allenamento e la formula per le spline? Vi sono altri dati di allenamento necessari per assegnare un punteggio a nuovi dati (come in un modello KNN)?
B_Miner,

1
Le informazioni di cui hai bisogno dipendono dal tipo di base spline che usi. Per le spline B, tutto ciò che devi sapere sono l'ordine delle spline B (quadratico / cubico / ecc.) E le posizioni dei nodi. La "formula" per B-spline è una ricorsione, la ricorsione di Cox-de Boor . Ho aggiunto una mezza frase alla mia risposta.
fabians,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.