Wird beim Vergleichen von Features F-regression
dasselbe verwendet wie beim Korrelieren von Features mit der Beschriftung und beim Beobachten des Werts?
Ich habe oft gesehen, dass meine Kollegen F regression
in ihrer Pipeline für maschinelles Lernen eine für die Featureauswahl verwenden sklearn
:
sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)`
Einige sagen mir bitte - warum gibt es die gleichen Ergebnisse wie nur die Korrelation mit dem Label / der abhängigen Variablen?
Es ist mir nicht klar, welchen Vorteil die Verwendung F_regression
bei der Funktionsauswahl hat.
Hier ist mein Code: Ich verwende den mtcars
Datensatz von 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'])
Wie vermutet ist die Rangfolge der Features genau gleich:
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
Wie Sie sehen, ist das zweite Merkmal in beiden Fällen das höchste, das erste Merkmal das zweite, das vierte Merkmal das dritte und das dritte Merkmal das letzte.
Gibt es jemals einen Fall, in dem F_regression
die Ergebnisse unterschiedlich ausfallen oder die Merkmale auf irgendeine Weise unterschiedlich eingestuft werden?
EDIT: Zusammenfassend möchte ich wissen, ob diese beiden Rangfolgen von Features jemals unterschiedliche Ergebnisse liefern:
1) Ranking von Features anhand ihrer F-Statistik, wenn sie mit dem Ergebnis individuell regressiert werden (das macht sklearn) UND,
2) Klassifizieren von Merkmalen nach ihrem R-Quadrat-Wert, wenn sie mit dem Ergebnis erneut individuell regressiert werden.
sklearn
bezeichnet es als F-Regression, was vielleicht etwas irreführend ist, da es sich eigentlich um einen Test handelt. scikit-learn.org/stable/modules/generated/…Antworten:
TL: DR
Es wird keinen Unterschied geben, wenn Sie
F-regression
nur die F-Statistik berechnen und die besten Funktionen auswählen. Es könnte einen Unterschied in der Rangfolge geben, vorausgesetzt, dassF-regression
Folgendes zutrifft :Da die Korrelation nicht bei jeder Iteration gleich ist. Sie können dieses Ranking dennoch erhalten, indem Sie nur die Korrelation bei jedem Schritt berechnen. Warum wird
F-regression
dann ein zusätzlicher Schritt ausgeführt? Es macht zwei Dinge:F-regression
Was ist ein F-Test?
Ein F-Test (Wikipedia) ist eine Methode, um die Bedeutung der Verbesserung eines Modells in Bezug auf das Hinzufügen neuer Variablen zu vergleichen. Sie können es verwenden, wenn Sie ein Grundmodell und ein komplizierteres Modell M 1 haben , das alle Variablen von M 0 und einige mehr enthält. Der F-Test zeigt Ihnen, ob M 1 in Bezug auf einen p- Wert signifikant besser als M 0 ist .M0 M1 M0 M1 M0 p
Dazu verwendet es die verbleibende Quadratsumme als Fehlermaß und vergleicht die Fehlerreduzierung mit der Anzahl der hinzugefügten Variablen und der Anzahl der Beobachtungen (weitere Details auf Wikipedia ). Das Hinzufügen von Variablen, auch wenn sie völlig zufällig sind, soll dem Modell immer helfen, einen geringeren Fehler zu erzielen, indem eine weitere Dimension hinzugefügt wird. Ziel ist es herauszufinden, ob die neuen Features wirklich hilfreich sind oder ob es sich um Zufallszahlen handelt, die dem Modell jedoch trotzdem helfen, da sie eine Dimension hinzufügen.
Was macht
f_regression
das ?Beachten Sie, dass ich mit der Scikit-Lernimplementierung nicht vertraut bin, aber versuchen Sie, herauszufinden, was zu
f_regression
tun ist. Die Dokumentation besagt, dass die Prozedur sequentiell ist. Wenn das Wort sequentiell dasselbe bedeutet wie in anderen statistischen Paketen, wie z. B. Matlab Sequential Feature Selection , würde ich davon ausgehen, dass es folgendermaßen abläuft:Im Moment denke ich, dass es eine gute Annäherung ist, um Ihre Frage zu beantworten. Gibt es einen Unterschied zwischen der Rangfolge
f_regression
und der Rangfolge nach Korrelation?Wenn Sie mit dem konstanten Modell und versuchen, das beste Modell mit nur einem Merkmal, M 1 , zu finden, wählen Sie das gleiche Merkmal aus, unabhängig davon, ob Sie einen korrelationsbasierten Ansatz verwenden, da beide ein Maß für die lineare Abhängigkeit sind. Wenn Sie jedoch von M 0 auf M 1 und dann auf M 2 wechseln würden, gäbe es einen Unterschied in Ihrer Wertung.M0 M1 M0 M1 M2
f_regression
Angenommen, Sie haben drei Merkmale, , wobei sowohl x 1 als auch x 2 in hohem Maße mit der Ausgabe y , aber auch in hohem Maße miteinander korreliert sind, während x 3 nur in mittlerem Maße mit y korreliert ist . Ihre Bewertungsmethode würde die besten Bewertungen für x 1 und x 2 vergeben , die sequentielle Methode jedoch möglicherweise nicht. In der ersten Runde würde es das beste Feature auswählen, z. B. x 1 , um M 1 zu erstellen . Dann würde es beide auswertenx1,x2,x3 x1 x2 y x3 y x1 x2 x1 M1 und x 3 für M 2 . Da x 2 in hohem Maße mit einem bereits ausgewählten Merkmal korreliert, sind die meisten darin enthaltenen Informationen bereits in das Modell integriert, und daher kann die Prozedur x 3 auswählen. Während es weniger mit y korreliert,ist es mehr mit denResiduenkorreliert, dem Teil, den x 1 nicht bereits erklärt, als mit x 2 . So unterscheiden sich die beiden von Ihnen vorgeschlagenen Vorgehensweisen.x2 x3 M2 x2 x3 y x1 x2
Sie können mit Ihrer Idee immer noch den gleichen Effekt erzielen, indem Sie Ihr Modell nacheinander erstellen und die Verstärkungsdifferenz für jedes zusätzliche Feature messen, anstatt sie mit dem konstanten Modell wie Sie es jetzt tun. Das Ergebnis würde sich nicht von den Ergebnissen unterscheiden. Der Grund für die Existenz dieser Funktion besteht darin, diese sequentielle Merkmalsauswahl bereitzustellen und das Ergebnis zusätzlich in ein F-Maß umzuwandeln, mit dem Sie die Signifikanz beurteilen können.M0
f_regression
Ziel des F-Tests ist es, ein Signifikanzniveau bereitzustellen. Wenn Sie sicherstellen möchten, dass die von Ihnen eingeschlossenen Funktionen in Bezug auf Ihren Wert von Bedeutung sind, verwenden Sie einen F-Test. Wenn Sie nur die k besten Merkmale einbeziehen möchten, können Sie nur die Korrelation verwenden.p k
Zusätzliches Material: Hier finden Sie eine Einführung in den F-Test, die Sie möglicherweise hilfreich finden
quelle
Ich habe einige Zeit damit verbracht, den Scikit- Quellcode zu durchsuchen, um zu verstehen, was
f_regression
passiert, und möchte meine Beobachtungen hier posten.Die ursprüngliche Frage war:
F : Ergibt dies
SelectKBest(f_regression, k = 4)
dasselbe Ergebnis wie die VerwendungLinearRegression(fit_intercept=True)
und Auswahl der ersten 4 Features mit den höchsten Punktzahlen?Die Antwort lautet ja . Darüber hinaus ist die relative Reihenfolge der Ergebnisse dieselbe.
f_regression
center
False
SelectKBest
Now letR2i be the score computed by X[:,i] and y . This is a regression on a single variable, so R2i=ρ2i . Then
LinearRegression
forf_regression
andLinearRegression
. Although one could construct a model sequentially, this is not whatSelectKBest
does.quelle