Devo aggiungere una nuova funzione di differenza (z = x1-x2) nel modello?
Di recente, sto pensando a questa domanda: devo aggiungere nuove funzionalità in base alle differenze delle funzionalità grezze?
Ambientazione
Supponiamo di avere 50.000 dati e 20 funzioni e che sia un'attività di regressione. Nella pratica della scienza dei dati, di solito aggiungiamo nuove funzionalità basate su funzionalità non elaborate. Tuttavia, non so quando dovremmo aggiungere una nuova funzionalità z (z = x1 - x2) nel nostro modello .
My Throughts
Ecco la mia comprensione: poiché la funzionalità verrà scaricata nei modelli, quindi se una funzionalità funziona correttamente dipende sia dalla funzionalità che dal modello.
Prendiamo come esempio la regressione lineare:
head(mtcars)
fit1 = lm(mpg~ cyl+disp +hp +vs, data = mtcars)
summary(fit1)$adj.r.squared
data_add = cbind(mtcars,'c1' = mtcars$disp - mtcars$hp)
fit2 = lm(mpg~ cyl+disp + hp +vs + c1, data = data_add)
summary(fit2)$adj.r.squared
summary(fit2)
add_noise <- function(n){
res = NULL
for(i in 1:n){
data_add_noise = cbind(mtcars,'c1' = mtcars$disp - mtcars$hp + rnorm(nrow(mtcars),0,1))
fit3 = lm(mpg~ cyl+disp + hp +vs + c1, data = data_add_noise)
res = c(res,summary(fit3)$adj.r.squared)
}
return(mean(res))
}
add_noise(10000)
Uscite:
> summary(fit1)$adj.r.squared
[1] 0.7359967
> summary(fit2)$adj.r.squared
[1] 0.7359967
> add_noise(10000)
[1] 0.7359121
Nella regressione lineare, se mettiamo z = x1-x2 nel nostro modello, otterremo una matrice di progetto singolare, il che significa che R non userà z per adattare i coefficienti. In altre parole, la nuova funzione z non darà alcun incremento alle prestazioni del nostro modello.
Se usiamo z = x1- x2 + rnorm (n = 1, media = 0, sd = 1) nel nostro modello, diminuiremo le prestazioni del nostro modello poiché introduciamo rumore aggiuntivo nel nostro modello.
Tuttavia, se utilizziamo modelli lgbm / xgboost / rf, poiché i nodi di divisione del modello ad albero basati su guadagno di informazioni / rapporto di guadagno di informazioni / impurità gini, la nostra nuova funzione z = x1 - x2 potrebbe aiutare con le prestazioni del nostro modello.
Sommario
Se dobbiamo aggiungere la nostra nuova funzione di differenza (z = x1- x2) nel nostro modello dipende dal modello che usiamo. Sarò molto grato di vedere altre idee!
Risposte
La caratteristica distintiva di un modello lineare è che è lineare. Ciò significa che il risultato$y$è modellato come una funzione lineare delle caratteristiche silenziose$x_1, x_2$.
$$ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2+ \epsilon $$
Supponiamo di aggiungere una funzione silenziosa $x_3=x_1 - x_2$. Se guardiamo a come viene espresso questo modello, dovrebbe essere ovvio che questo non è diverso dal nostro modello originale. $$\begin{align} y &= \beta_0 + \tilde{\beta}_1 x_1 + \tilde{\beta}_2 x_2 + {\beta}_3 (x_1 - x_2)+ \epsilon \\ y &= \beta_0 + (\tilde{\beta}_1 + {\beta}_3) x_1 + (\tilde{\beta}_2 - {\beta}_3) x_2+ \epsilon \\ y &= \beta_0 + \beta_1 x_1 + \beta_2 x_2+ \epsilon \\ \end{align}$$ In altre parole, il coefficiente su $x_3$ non è identificato in questo modello perché è esattamente una combinazione lineare di $x_1$ e $x_2$.
Il tuo esempio usa il rumore $x_3 = x_1 - x_2 + \eta$per evitare la non identificazione. Tuttavia, ciò equivale ad aggiungere un coefficiente per il rumore$\eta$: $$\begin{align} y &= \beta_0 + \tilde{\beta}_1 x_1 + \tilde{\beta}_2 x_2 + {\beta}_3 (x_1 - x_2 + \eta) + \epsilon\\ y &= \beta_0 + (\tilde{\beta}_1 + {\beta}_3) x_1 + (\tilde{\beta}_2 - {\beta}_3) x_2 + {\beta}_3\eta + \epsilon \\ y &= \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 \eta + \epsilon \\ \end{align}$$
In altre parole, il rumore $\eta$è una terza funzionalità fornita al modello. Si presume che il rumore non sia correlato a$y$, quindi sappiamo che il vero effetto di $\eta$ sopra $y$è zero; Compreso$\eta$ probabilmente danneggerà le previsioni ogni volta $\hat{\beta}_3 \neq 0$.
Conclusione : non aggiungere$x_1-x_2+\eta$ a un modello di regressione lineare perché non ha nuove informazioni su $y$.
Il modello dell'insieme di alberi (foresta casuale, xgboost) non è lineare: per qualsiasi divisione binaria, i nodi figlie producono funzioni costanti distinte. L'effetto di molte di queste suddivisioni binarie è quello di dividere lo spazio delle caratteristiche in un numero di rettangoli allineati all'asse, ciascuno con una stima diversa.
Arbitrariamente, molte divisioni binarie allineate all'asse possono approssimare un confine complesso utilizzando forme più semplici. L'esempio classico è considerare un'attività di classificazione binaria con un confine di decisione lineare perfetto sulla linea$x_1 - x_2 > c$. Questo si manifesta come una divisione diagonale . Chiaramente una singola divisione allineata all'asse non può approssimare molto bene una diagonale, ma molte divisioni allineate sull'asse, puoi creare una forma a "gradino" che può approssimare arbitrariamente bene la diagonale . Allo stesso modo, lo stesso vale per l'approssimazione di relazioni come logaritmi, quadratiche, sinusoidi, ecc.
D'altra parte, l'aggiunta di una funzionalità $x_1 - x_2$ al set di funzionalità potrebbe migliorare il modello perché una divisione binaria sarà in grado di recuperare esattamente $x_1 - x_2 > c$. Questo tipo di progettazione delle funzionalità può migliorare il modello quando si sa in anticipo che questa funzionalità è utile. D'altra parte, il punto centrale dell'utilizzo di modelli avanzati come la foresta casuale o gli alberi potenziati è recuperare funzioni utili quando non sappiamo esattamente come tutte le caratteristiche siano correlate al risultato.
Conclusione : aggiunta$x_1 - x_2$ può migliorare il modello se $x_1 - x_2 > c$ è importante $y$.
Ulteriori informazioni: conseguenze dell'aggiunta di colonne di feature trasformate per foreste casuali e lazo?