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 è sì . 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]))∗(y−mean(y))std(X[:,i])∗std(y).
Fi=ρi21−ρi2∗(n−2),
n=len(y)centerFalsen−1SelectKBestkXcon 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−ρj2⇔Fi<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.