Differenza tra la selezione di funzioni in base a "regressione F" e in base ai valori di


15

Il confronto delle funzionalità utilizza F-regressionle stesse funzionalità correlate con l'etichetta individualmente e l'osservazione del valore ?R2

Ho visto spesso i miei colleghi utilizzare una F regressionselezione di funzionalità nella loro pipeline di machine learning da sklearn:

sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)`  

Alcuni, per favore, mi dicono: perché fornisce gli stessi risultati della semplice correlazione con la variabile label / depedendent?

Non mi è chiaro il vantaggio di utilizzare F_regressionnella selezione delle funzionalità.

Ecco il mio codice: sto usando il mtcarsset di dati da R:

import pandas as pd
import numpy as np
from sklearn import feature_selection
from sklearn.linear_model import LinearRegression

#....load mtcars dataset into a pandas dataframe called "df", not shown here for conciseness

# only using these numerical columns as features ['mpg', 'disp', 'drat', 'wt']
# using this column as the label:  ['qsec']

model = feature_selection.SelectKBest(score_func=feature_selection.f_regression,\
                                      k=4)

results = model.fit(df[columns], df['qsec'])

print results.scores_
print results.pvalues_

# Using just correlation coefficient:

columns = ['mpg', 'disp', 'drat', 'wt']
for col in columns:
    lm = LinearRegression(fit_intercept=True)
    lm.fit(df[[col]], df['qsec'])
    print lm.score(df[[col]], df['qsec'])

Come sospettato, la classifica delle caratteristiche è esattamente la stessa:

scores using f_regression:

[ 6.376702    6.95008354  0.25164249  0.94460378]


 scores using coefficient of determination:

0.175296320261  
0.18809385182
0.00831830818303
0.0305256382746

Come puoi vedere, la seconda funzione è classificata come la più alta, la prima è la seconda, la quarta è la terza e la terza è l'ultima, in entrambi i casi.

Esiste mai un caso in cui F_regressionciò darebbe risultati diversi o classificherebbe le caratteristiche in modo diverso in qualche modo?

EDIT: Per riassumere, vorrei sapere se queste due classifiche di funzionalità danno risultati diversi:

1) classifica le caratteristiche in base alla loro statistica F quando le regredisce individualmente con il risultato (questo è ciò che fa sklearn) E

2) classificare le caratteristiche in base al loro valore R-quadrato quando si regrediscono con il risultato, sempre individualmente.


SO è diminuito immediatamente dopo aver pubblicato questo, che sono sicuro ferito le possibilità che ottenga qualche attenzione.
Hunle,

1
La tua domanda contiene il termine "regressione-F". Cos'è e in cosa differisce dalla regressione? ... (Modifica :) Qualcosa mi viene in mente proprio ora: ti riferisci a un test F (o forse solo a una statistica F) per la regressione complessiva contro un zero-null (cioè solo per intercettazione)?
Glen_b

Mi riferisco al test F. Nella regressione, il test F e quindi la statistica F vengono utilizzati per testare l'ipotesi nulla che non vi sia alcuna relazione tra il regressore e il risultato / etichetta. sklearnsi riferisce ad esso come regressione F, che è forse un po 'fuorviante poiché in realtà è un test. scikit-learn.org/stable/modules/generated/…
Hunle

Il tuo commento suggerisce che hai solo una variabile regressor (nel qual caso perché stai parlando della selezione di funzionalità?)
Glen_b -Reststate Monica

2
Potresti per favore modificare quella spiegazione nella tua domanda?
Glen_b -Restate Monica

Risposte:


15

TL: DR

Non ci sarà differenza se F-regressioncalcoli solo la statistica F e scegli le migliori caratteristiche. Potrebbe esserci una differenza nella classifica, supponendo F-regressionche:

  • Inizia con un modello costante, M0
  • Prova tutti i modelli costituiti da una sola funzione e scegli il meglio in base alla statistica F.M1
  • Prova tutti i modelli costituiti da M 1 più un'altra funzione e scegli il migliore ...M2M1

Poiché la correlazione non sarà la stessa ad ogni iterazione. Ma puoi comunque ottenere questa classifica semplicemente calcolando la correlazione ad ogni passaggio, quindi perché F-regressioncompiere un ulteriore passo? Fa due cose:

  • k
  • pF-regression

Che cos'è un test F.

M0M1M0M1M0p

Per fare ciò, utilizza la somma residua di quadrati come misura di errore e confronta la riduzione dell'errore con il numero di variabili aggiunte e il numero di osservazioni (maggiori dettagli su Wikipedia ). L'aggiunta di variabili, anche se sono completamente casuali, dovrebbe sempre aiutare il modello a raggiungere un errore inferiore aggiungendo un'altra dimensione. L'obiettivo è capire se le nuove funzionalità sono davvero utili o se sono numeri casuali ma aiutano ancora il modello perché aggiungono una dimensione.


Che cosa significa f_regressionfare

Nota che non ho familiarità con l'implementazione di Scikit Learn, ma proviamo a capire cosa f_regressionsta facendo. La documentazione afferma che la procedura è sequenziale. Se la parola sequenziale ha lo stesso significato di altri pacchetti statistici, come Matlab Sequential Feature Selection , ecco come mi aspetto che proceda:

  • Inizia con un modello costante, M M0
  • Prova tutti i modelli M 1M1
  • Prova tutti i modelli M 2 costituiti da M 1M2M1

Per ora, penso che sia un'approssimazione abbastanza vicina per rispondere alla tua domanda; c'è una differenza tra la classificazione f_regressione la classificazione per correlazione.

M0M1f_regressionM0M1M2

x1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2 è fortemente correlato con una funzionalità già selezionata, la maggior parte delle informazioni in essa contenute è già incorporata nel modello e pertanto la procedura potrebbe selezionare x3yx1x2

M0f_regression


pk


Materiale aggiuntivo: ecco un'introduzione al test F che potresti trovare utile


OK, ora vedo come questo metodo di selezione delle funzionalità può proteggere dalla multicollinearità. Suppongo che se sto eseguendo qualcosa di simile a una foresta casuale, che non è così sensibile alla multicollinearità, questo metodo di selezione delle funzionalità potrebbe non essere applicabile. grazie @Winks
Hunle

Fai attenzione a usare la correlazione solo come misura di importanza delle funzionalità. Misura la dipendenza lineare tra le variabili e ti dice che una caratteristica (potrebbe essere) va bene per un modello lineare . Questo non è un presupposto che puoi fare per una foresta casuale, poiché gli alberi possono imparare molto più delle relazioni lineari. La correlazione non è tutto ciò che esiste (vedi Anscombe Dataset (Wikipedia) .
Strizza l'

Qual è il " leggero problema con i valori p " a cui ti riferisci? E c'è un problema di confronti multipli dal momento che testiamo sempre gli stessi dati?
Hunle,

M2R2

1
p
Strizza

16

Ho trascorso un po 'di tempo a guardare il codice sorgente di Scikit per capire cosa f_regressionfa, e vorrei pubblicare qui le mie osservazioni.

La domanda originale era:

D : SelectKBest(f_regression, k = 4)Produce lo stesso risultato dell'utilizzo LinearRegression(fit_intercept=True)e della scelta delle prime 4 caratteristiche con il punteggio più alto?

La risposta è . Inoltre, l'ordinamento relativo dato dai punteggi è lo stesso.

Ecco cosa f_regressionfa, sulla matrice di input e sull'arrayXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkXcon il punteggio più alto. Non vi è alcuna applicazione sequenziale o altro e neanche i valori p vengono utilizzati.

Ora lasciate il punteggio calcolato per X [ : , i ] e yRi2LinearRegressionX[:,i]yRi2=ρi2

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
f_regressionLinearRegressionSelectKBest

2
Wow, quindi` SelectKBest` non costruisce un modello in sequenza.
Hunle,

Per quello che vale, sono d'accordo con l'interpretazione di user43451. E, vorrei che sklearn lo chiamasse semplicemente una classifica di correlazione di singole funzionalità. L'F-test, per me, introduce la nozione di modelli sequenziali come Winks ha accennato nella sua risposta accettata.
MrDFFnerner,
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.