La comparaison d'entités utilise-t-elle F-regression
la même chose que la corrélation individuelle d'entités avec l'étiquette et l'observation de la valeur ?
J'ai souvent vu mes collègues utiliser une F regression
sélection de fonctionnalités dans leur pipeline d'apprentissage automatique à partir de sklearn
:
sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)`
Certains me disent s'il vous plaît - pourquoi cela donne-t-il les mêmes résultats que simplement le corrélant avec l'étiquette / la variable dépendante?
Il n'est pas clair pour moi l'avantage d'utiliser F_regression
dans la sélection des fonctionnalités.
Voici mon code: j'utilise l' mtcars
ensemble de données de 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'])
Comme suspect, le classement des fonctionnalités est exactement le même:
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
Comme vous pouvez le voir, la deuxième fonctionnalité est classée la plus élevée, la première fonctionnalité est deuxième, la quatrième fonctionnalité est troisième et la troisième fonctionnalité est la dernière, dans les deux cas.
Y a-t-il jamais un cas où le F_regression
donnerait des résultats différents ou classerait les caractéristiques différemment d'une manière ou d'une autre?
EDIT: Pour résumer, j'aimerais savoir si ces deux classements de fonctionnalités donnent jamais des résultats différents:
1) classer les caractéristiques selon leur statistique F lors de leur régression avec le résultat individuellement (c'est ce que fait sklearn) ET,
2) classer les entités par leur valeur R au carré lors de leur régression avec le résultat, encore une fois individuellement.
sklearn
l'appelle la régression F, ce qui est peut-être un peu trompeur car il s'agit en fait d'un test. scikit-learn.org/stable/modules/generated/…