Czy porównywanie cech przy użyciu F-regression
tego samego, co korelowanie elementów z etykietą indywidualnie i obserwowanie wartości ?
Często widziałem, jak moi koledzy używają F regression
do 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_regression
z wyboru funkcji.
Oto mój kod: Używam mtcars
zestawu 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_regression
dawał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.
sklearn
nazywa to regresją F, co może być nieco mylące, ponieważ w rzeczywistości jest to test. scikit-learn.org/stable/modules/generated/…Odpowiedzi:
TL: DR
Nie będzie różnicy, jeśli
F-regression
tylko obliczy statystyki F i wybierze najlepsze funkcje. W rankingu może występować różnica, przy założeniu, żeF-regression
: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-regression
dodatkowy krok? Robi dwie rzeczy:F-regression
Co to jest test F.
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_regression
zrobićZauważ, że nie jestem zaznajomiony z implementacją uczenia się Scikit, ale spróbujmy dowiedzieć się, co
f_regression
się 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ć: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_regression
a rankingiem według korelacji?f_regression
f_regression
Dodatkowy materiał: Oto wprowadzenie do testu F, które może okazać się pomocne
źródło
Spędziłem trochę czasu, przeglądając kod źródłowy Scikit , aby zrozumieć, co się
f_regression
dzieje, i chciałbym opublikować tutaj moje obserwacje.Pierwotne pytanie brzmiało:
P : Czy
SelectKBest(f_regression, k = 4)
daje taki sam wynik, jak użycieLinearRegression(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_regression
center
False
SelectKBest
LinearRegression
f_regression
LinearRegression
SelectKBest
źródło