Unterschied zwischen der Auswahl von Merkmalen basierend auf „F-Regression“ und basierend auf


14

Wird beim Vergleichen von Features F-regressiondasselbe verwendet wie beim Korrelieren von Features mit der Beschriftung und beim Beobachten des Werts?R2

Ich habe oft gesehen, dass meine Kollegen F regressionin 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_regressionbei der Funktionsauswahl hat.

Hier ist mein Code: Ich verwende den mtcarsDatensatz 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_regressiondie 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.


SO ging es gleich nach dem Posten zu Ende. Ich bin sicher, das hat die Chance, dass es Aufmerksamkeit erregt.
Hunle

1
Ihre Frage enthält den Begriff "F-Regression". Was ist das und wie unterscheidet es sich von der Regression? ... (Bearbeiten :) Mir fällt gerade etwas ein: Beziehen Sie sich auf einen F-Test (oder vielleicht nur auf eine F-Statistik) für die allgemeine Regression gegen eine Null (dh nur Intercept)?
Glen_b

Ich beziehe mich auf den F-Test. Bei der Regression wird der F-Test und damit die F-Statistik verwendet, um die Nullhypothese zu testen, dass keine Beziehung zwischen dem Regressor und dem Ergebnis / Label besteht. sklearnbezeichnet es als F-Regression, was vielleicht etwas irreführend ist, da es sich eigentlich um einen Test handelt. scikit-learn.org/stable/modules/generated/…
Hunle

Ihr Kommentar deutet darauf hin, dass Sie nur eine Regressorvariable haben (in welchem ​​Fall sprechen Sie über die Funktionsauswahl?)
Glen_b

2
Könnten Sie diese Erklärung bitte in Ihre Frage aufnehmen?
Glen_b -Reinstate Monica

Antworten:


12

TL: DR

Es wird keinen Unterschied geben, wenn Sie F-regressionnur die F-Statistik berechnen und die besten Funktionen auswählen. Es könnte einen Unterschied in der Rangfolge geben, vorausgesetzt, dass F-regressionFolgendes zutrifft :

  • Beginnen Sie mit einem konstanten Modell, M0
  • Probieren Sie alle Modelle aus, die nur aus einem Merkmal bestehen, und wählen Sie das beste anhand der F-Statistik ausM1
  • Probieren Sie alle Modelle aus, die aus M 1 und einem weiteren Merkmal bestehen, und wählen Sie ...M2M1

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-regressiondann ein zusätzlicher Schritt ausgeführt? Es macht zwei Dinge:

  • Featureauswahl: Wenn Sie die besten Features in einer Pipeline für maschinelles Lernen auswählen möchten , bei der es nur auf Genauigkeit ankommt und Maßnahmen zur Anpassung von Unter- / Überanpassung vorhanden sind, interessiert Sie möglicherweise nur die Rangfolge, und die zusätzliche Berechnung ist nicht hilfreich.k
  • Signifikanztest: Wenn Sie versuchen, die Auswirkung einiger Variablen auf eine Ausgabe in einer Studie zu verstehen, möchten Sie möglicherweise ein lineares Modell erstellen und nur die Variablen einbeziehen, die Ihr Modell in Bezug auf einen bestimmten Wert erheblich verbessern . Hier ist es praktisch.pF-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 .M0M1M0M1M0p

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_regressiondas ?

Beachten Sie, dass ich mit der Scikit-Lernimplementierung nicht vertraut bin, aber versuchen Sie, herauszufinden, was zu f_regressiontun 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:

  • Beginnen Sie mit einem konstanten Modell, M0
  • Probieren Sie alle Modelle aus, die nur aus einem Merkmal bestehen, und wählen Sie das beste anhand der F-Statistik ausM1
  • Probieren Sie alle Modelle aus, die aus M 1 und einem weiteren Merkmal bestehen, und wählen Sie ...M2M1

Im Moment denke ich, dass es eine gute Annäherung ist, um Ihre Frage zu beantworten. Gibt es einen Unterschied zwischen der Rangfolge f_regressionund 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.M0M1f_regressionM0M1M2

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,x3x1x2yx3yx1x2x1M1 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.x2x3M2x2x3yx1x2

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.M0f_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.pk


Zusätzliches Material: Hier finden Sie eine Einführung in den F-Test, die Sie möglicherweise hilfreich finden


OK, jetzt sehe ich, wie diese Methode der Merkmalsauswahl gegen Multikollinearität schützen kann. Ich nehme an, wenn ich so etwas wie eine zufällige Gesamtstruktur verwende, die nicht so anfällig für Multikollinearität ist, ist diese Feature-Auswahlmethode möglicherweise nicht so anwendbar. Vielen Dank @Winks
Hunle

Achten Sie darauf, Korrelation nur als Maß für die Wichtigkeit von Merkmalen zu verwenden. Es misst die lineare Abhängigkeit zwischen Variablen und gibt an, dass ein Merkmal (möglicherweise) für ein lineares Modell geeignet ist . Dies ist keine Annahme, die Sie für zufällige Wälder treffen können, da Bäume viel mehr als nur lineare Beziehungen lernen können. Korrelation ist nicht alles, was es gibt (siehe Anscombe Dataset (Wikipedia) .
Winks

Was ist das " leichte Problem mit p-Werten ", auf das Sie sich beziehen? Und gibt es ein Problem mit mehreren Vergleichen, da wir jedes Mal dieselben Daten testen?
Hunle

M2R2

1
p

16

Ich habe einige Zeit damit verbracht, den Scikit- Quellcode zu durchsuchen, um zu verstehen, was f_regressionpassiert, und möchte meine Beobachtungen hier posten.

Die ursprüngliche Frage war:

F : Ergibt dies SelectKBest(f_regression, k = 4)dasselbe Ergebnis wie die Verwendung LinearRegression(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_regressionXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkXmit den höchsten Punktzahlen. Es gibt keine sequentielle Anwendung oder irgendetwas und die p-Werte werden auch nicht verwendet.

Now let Ri2 be the score computed by LinearRegression for X[:,i] and y. This is a regression on a single variable, so Ri2=ρi2. Then

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
Hence there is no difference between f_regression and LinearRegression. Although one could construct a model sequentially, this is not what SelectKBest does.

2
Wow, so` SelectKBest` does not construct a model sequentially.
Hunle

For what it's worth, I agree with user43451's interpretation. And, I wish sklearn would just call it a correlation ranking of single features. F-test, for me, bring in the notion of sequential models as Winks alluded to in his accepted answer.
MrDrFenner
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.