Różnica pomiędzy wybór funkcji oparty na „F” i regresji na podstawie

16

Czy porównywanie cech przy użyciu F-regressiontego samego, co korelowanie elementów z etykietą indywidualnie i obserwowanie wartości ?R2

Często widziałem, jak moi koledzy używają F regressiondo wyboru funkcji w procesie uczenia maszynowego z sklearn:

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

Proszę, proszę, powiedz mi - dlaczego daje takie same wyniki, jak skorelowanie go ze zmienną etykieta / zależna?

Nie jest dla mnie oczywista zaleta korzystania F_regressionz wyboru funkcji.

Oto mój kod: Używam mtcarszestawu danych z 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'])

Jak podejrzewano, ranking funkcji jest dokładnie taki sam:

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

Jak widać, druga cecha ma najwyższą pozycję, pierwsza cecha jest druga, czwarta cecha jest trzecia, a trzecia cecha jest ostatnia, w obu przypadkach.

Czy zdarzają się przypadki, w których F_regressiondawałyby inne wyniki lub inaczej klasyfikowałyby cechy w inny sposób?

EDYCJA: Podsumowując, chciałbym wiedzieć, czy te dwa rankingi funkcji dają kiedykolwiek inne wyniki:

1) klasyfikuje cechy według ich statystyki F, gdy regresuje je indywidualnie z wynikiem (to właśnie robi sklearn) ORAZ,

2) klasyfikuje cechy według ich wartości R-kwadrat przy regresowaniu ich z wynikiem, ponownie indywidualnie.

Hunle
źródło
SO spadło natychmiast po tym, jak to opublikowałem, co z pewnością zaszkodzi szansom na zwrócenie na siebie uwagi.
Hunle
1
Twoje pytanie zawiera termin „regresja F”. Co to jest i czym różni się od regresji? ... (Edytuj :) Coś mi się teraz przytrafia: czy odnosisz się do testu F (a może po prostu statystyki F) dla ogólnej regresji względem zera (tj. Tylko przechwytywanie)?
Glen_b
Mam na myśli test F. W regresji test F, a tym samym statystyka F, służy do testowania zerowej hipotezy, że nie ma związku między regresorem a wynikiem / etykietą. sklearnnazywa to regresją F, co może być nieco mylące, ponieważ w rzeczywistości jest to test. scikit-learn.org/stable/modules/generated/…
Hunle 15.04.2016
Twój komentarz sugeruje, że masz tylko jedną zmienną regresora (w takim przypadku dlaczego mówisz o wyborze funkcji?)
Glen_b
2
Czy możesz edytować to wyjaśnienie w swoim pytaniu?
Glen_b

Odpowiedzi:

16

TL: DR

Nie będzie różnicy, jeśli F-regressiontylko obliczy statystyki F i wybierze najlepsze funkcje. W rankingu może występować różnica, przy założeniu, że F-regression:

  • Zacznij od modelu stałego, M0
  • Wypróbuj wszystkie modele składające się tylko z jednej cechy i wybierz najlepsze według statystyki F.M1
  • Wypróbuj wszystkie modele składające się z M 1 plus jeszcze jedna funkcja i wybierz najlepsze ...M2M1

Ponieważ korelacja nie będzie taka sama przy każdej iteracji. Ale nadal możesz uzyskać ten ranking, po prostu obliczając korelację na każdym kroku, więc dlaczego robi F-regressiondodatkowy krok? Robi dwie rzeczy:

  • k
  • pF-regression

Co to jest test F.

M0M1M0M1M0p

W tym celu wykorzystuje resztkową sumę kwadratów jako miarę błędu i porównuje zmniejszenie błędu z liczbą dodanych zmiennych i liczbą obserwacji (więcej szczegółów na Wikipedii ). Oczekuje się, że dodanie zmiennych, nawet jeśli są one całkowicie losowe, zawsze pomoże modelowi osiągnąć niższy błąd poprzez dodanie innego wymiaru. Celem jest ustalenie, czy nowe funkcje są naprawdę pomocne, czy też są liczbami losowymi, ale nadal pomagają modelowi, ponieważ dodają wymiar.


Co ma f_regressionzrobić

Zauważ, że nie jestem zaznajomiony z implementacją uczenia się Scikit, ale spróbujmy dowiedzieć się, co f_regressionsię dzieje. Dokumentacja wskazuje, że procedura jest sekwencyjna. Jeśli słowo sekwencyjne oznacza to samo, co w innych pakietach statystycznych, takich jak Matlab Sequential Feature Selection , oto, jak mam się spodziewać:

  • Zacznij od modelu stałego, M M0
  • Wypróbuj wszystkie modele M 1M1
  • Wypróbuj wszystkie modele M 2 składające się z M 1M2M1

Na razie myślę, że jest to wystarczająco przybliżone przybliżenie, aby odpowiedzieć na twoje pytanie; czy istnieje różnica między rankingiem f_regressiona rankingiem według korelacji?

M0M1f_regressionM0M1M2

x1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2x3yx1x2

M0f_regression


pk


Dodatkowy materiał: Oto wprowadzenie do testu F, które może okazać się pomocne

Mruga
źródło
OK, teraz widzę, jak ta metoda wyboru funkcji może chronić przed wielokoliniowością. Podejrzewam, że jeśli prowadzę coś w rodzaju Losowego Lasu, który nie jest tak podatny na wielokoliniowość, to ta metoda wyboru funkcji może być nieodpowiednia. dziękuję @ Winks
Hunle 16.04.16
Wystrzegaj się używania korelacji jedynie jako miary ważności funkcji. Mierzy zależność liniową między zmiennymi i informuje, że cecha (być może) jest dobra dla modelu liniowego . Nie jest to założenie dla losowego lasu, ponieważ drzewa mogą nauczyć się znacznie więcej niż relacji liniowych. Korelacja to nie wszystko (patrz Anscombe Dataset (Wikipedia) .
Winks,
Na czym polega „ niewielki problem z wartościami p ”? I czy istnieje problem wielu porównań, ponieważ za każdym razem testujemy te same dane?
Hunle
M2R2
1
p
17

Spędziłem trochę czasu, przeglądając kod źródłowy Scikit , aby zrozumieć, co się f_regressiondzieje, i chciałbym opublikować tutaj moje obserwacje.

Pierwotne pytanie brzmiało:

P : Czy SelectKBest(f_regression, k = 4)daje taki sam wynik, jak użycie LinearRegression(fit_intercept=True)i wybranie pierwszych 4 cech z najwyższymi wynikami?

Odpowiedź brzmi: tak . Ponadto względna kolejność podana przez wyniki jest taka sama.

f_regressionXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkXz najwyższymi wynikami. Nie ma aplikacji sekwencyjnej ani nic, a wartości p również nie są używane.

Ri2LinearRegressionX[:,i]yRi2=ρi2

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
f_regressionLinearRegressionSelectKBest
użytkownik43451
źródło
2
Wow, więc `SelectKBest` nie buduje modelu sekwencyjnie.
Hunle,
Co do tego, co jest warte, zgadzam się z interpretacją user43451. I chciałbym, żeby sklearn nazwałby to rankingiem korelacji pojedynczych elementów. Test F, dla mnie, wprowadza pojęcie modeli sekwencyjnych, o których wspomniał Winks w swojej zaakceptowanej odpowiedzi.
MrDrFenner