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/…