Merkmalsauswahl und Kreuzvalidierung

76

Ich habe in letzter Zeit viel auf dieser Site (@Aniko, @Dikran Marsupial, @Erik) und anderswo über das Problem der Überanpassung bei der Kreuzvalidierung gelesen - (Smialowski et al. 2010, Bioinformatics, Hastie, Elements of Statistics Learning). Der Vorschlag ist, dass jede überwachte Merkmalsauswahl (unter Verwendung der Korrelation mit Klassenbezeichnungen), die außerhalb der Modellleistungsschätzung unter Verwendung einer Kreuzvalidierung (oder einer anderen Modellschätzmethode wie Bootstrapping) durchgeführt wird, zu einer Überanpassung führen kann.

Dies scheint mir nicht intuitiv zu sein. Wenn Sie ein Feature-Set auswählen und Ihr Modell dann nur anhand der ausgewählten Features mithilfe einer Kreuzvalidierung bewerten , erhalten Sie eine unvoreingenommene Schätzung der allgemeinen Modellleistung für diese Features (dies setzt voraus, dass die untersuchte Stichprobe repräsentativ ist) der Bevölkerung)?

Mit diesem Verfahren kann man natürlich keinen optimalen Funktionsumfang beanspruchen, aber kann man die Leistung des ausgewählten Funktionsumfangs bei unsichtbaren Daten als gültig melden?

Ich bin damit einverstanden, dass die Auswahl von Funktionen auf der Grundlage des gesamten Datensatzes zu Datenlecks zwischen Test- und Zugsätzen führen kann. Wenn der Funktionsumfang nach der anfänglichen Auswahl statisch ist und keine andere Optimierung durchgeführt wird, ist es sicher gültig, die quervalidierten Leistungsmetriken zu melden.

In meinem Fall habe ich 56 Features und 259 Cases und so #cases> #features. Die Merkmale werden aus Sensordaten abgeleitet.

Entschuldigung, wenn meine Frage nicht eindeutig ist, aber dies scheint ein wichtiger Punkt zu sein, der geklärt werden muss.

Bearbeiten: Beim Implementieren der Featureauswahl innerhalb der Kreuzvalidierung für den oben beschriebenen Datensatz (dank der folgenden Antworten) kann ich bestätigen, dass das Auswählen von Features vor der Kreuzvalidierung in diesem Datensatz eine signifikante Auswirkung hattevorspannen. Diese Abweichung / Überanpassung war am größten, wenn dies für eine 3-Klassen-Formulierung im Vergleich zu einer 2-Klassen-Formulierung durchgeführt wurde. Ich denke, die Tatsache, dass ich die schrittweise Regression für die Merkmalsauswahl verwendet habe, hat diese Überanpassung verstärkt. Zu Vergleichszwecken verglich ich mit einem anderen, aber verwandten Datensatz eine vor der Kreuzvalidierung durchgeführte sequentielle Vorwärts-Merkmalsauswahlroutine mit Ergebnissen, die ich zuvor mit der Merkmalsauswahl in CV erhalten hatte. Die Ergebnisse zwischen beiden Methoden unterschieden sich nicht dramatisch. Dies kann bedeuten, dass eine schrittweise Regression anfälliger für eine Überanpassung ist als eine sequenzielle FS oder eine Eigenart dieses Datensatzes.

BGreene
quelle
7
Ich glaube nicht, dass Hastie et al. befürworten. Das allgemeine Argument ist, dass, wenn die Merkmalsauswahl die Antwort verwendet, sie besser als Teil Ihres Lebenslaufverfahrens einbezogen werden sollte. Wenn Sie ein Prädiktor-Screening durchführen, indem Sie z. B. die Stichprobenvarianzen untersuchen und die Prädiktoren mit kleinen Abweichungen ausschließen, ist dies als einmaliges Verfahren in Ordnung.
Kardinal
3
+1 Die Kreuzvalidierung stellt jedoch auch in diesem Fall nicht die Varianz im Merkmalsauswahlprozess dar, was ein Problem sein kann, wenn die Merkmalsauswahl instabil ist. Wenn Sie das Screening zuerst durchführen, wird die wahre Variabilität durch die Variabilität der Leistung in jeder Falte unterrepräsentiert. Wenn Sie das Screening in jeder Falte durchführen, wird die Variabilität der Leistung in jeder Falte entsprechend erhöht. Ich würde das Screening immer in jeder Falte durchführen, wenn ich mir den Rechenaufwand leisten könnte.
Dikran Beuteltier
1
Ich denke, die Aussage "JEGLICHE Featureauswahl, die vor der Modellleistungsschätzung mittels Kreuzvalidierung durchgeführt wird, kann zu einer Überanpassung führen." ist ein falsches Zitat oder eine falsche Darstellung dessen, was Hastie und andere vorschlagen würden. Wenn Sie das Wort "vor" in "ohne" ändern, ist dies sinnvoller. Auch der Satz scheint darauf hinzudeuten, dass eine Kreuzvalidierung der einzige Weg ist, die Angemessenheit der ausgewählten Variablen zu überprüfen .
Michael Chernick
@MichaelChernick - einverstanden. Ich habe oben bearbeitet, um meine Bedeutung besser widerzuspiegeln.
BGreene
1
@Bgreene: Es gibt eine aktuelle Diskussion zu diesem Thema, die unter goo.gl/C8BUa gelesen werden kann .
Alekk

Antworten:

69

Wenn Sie eine Featureauswahl für alle Daten durchführen und dann eine Kreuzvalidierung durchführen, wurden die Testdaten in jeder Falte des Kreuzvalidierungsverfahrens auch zur Auswahl der Features verwendet, und dies ist der Grund für die Leistungsanalyse.

Betrachten Sie dieses Beispiel. Wir generieren einige Zieldaten, indem wir eine Münze zehnmal umwerfen und aufzeichnen, ob sie als Kopf oder Zahl ausgegeben wird. Als Nächstes generieren wir 20 Features, indem wir die Münze 10 Mal für jedes Feature werfen und aufschreiben, was wir erhalten. Anschließend führen wir die Featureauswahl durch, indem wir das Feature auswählen, das so genau wie möglich mit den Zieldaten übereinstimmt, und dies als unsere Vorhersage verwenden. Wenn wir dann eine Kreuzvalidierung durchführen, erhalten wir eine erwartete Fehlerrate von etwas weniger als 0,5. Dies liegt daran, dass wir das Merkmal in jeder Falte des Kreuzvalidierungsverfahrens auf der Grundlage einer Korrelation gegenüber dem Trainingssatz und dem Testsatz ausgewählt haben. Die wahre Fehlerrate wird jedoch 0,5 sein, da die Zieldaten einfach zufällig sind. Wenn Sie die Featureauswahl innerhalb jeder Falte der Kreuzvalidierung unabhängig durchführen, ist der erwartete Wert der Fehlerrate 0.

Die Schlüsselidee ist, dass die Kreuzvalidierung eine Methode zur Schätzung der Generalisierungsleistung eines Prozesses zum Erstellen eines Modells ist, sodass Sie den gesamten Prozess in jeder Falte wiederholen müssen. Andernfalls erhalten Sie eine voreingenommene Schätzung oder eine Unterschätzung der Varianz der Schätzung (oder beides).

HTH

Hier ist ein MATLAB-Code, der eine Monte-Carlo-Simulation dieses Aufbaus mit 56 Funktionen und 259 Fällen ausführt, um Ihrem Beispiel zu entsprechen. Die Ausgabe ist:

Verzerrter Schätzer: erate = 0.429210 (0.397683 - 0.451737)

Voreingenommener Schätzer: erate = 0.499689 (0.397683 - 0.590734)

Der verzerrte Schätzer ist derjenige, bei dem die Merkmalsauswahl vor der Kreuzvalidierung durchgeführt wird, der unverzerrte Schätzer ist derjenige, bei dem die Merkmalsauswahl unabhängig in jeder Falte der Kreuzvalidierung durchgeführt wird. Dies deutet darauf hin, dass die Verzerrung in diesem Fall abhängig von der Art der Lernaufgabe ziemlich stark sein kann.

NF    = 56;
NC    = 259;
NFOLD = 10;
NMC   = 1e+4;

% perform Monte-Carlo simulation of biased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform feature selection

   err       = mean(repmat(y,1,NF) ~= x);
   [err,idx] = min(err);

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, '  Biased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));

% perform Monte-Carlo simulation of unbiased estimator

erate = zeros(NMC,1);

for i=1:NMC

   y = randn(NC,1)  >= 0;
   x = randn(NC,NF) >= 0;

   % perform cross-validation

   partition = mod(1:NC, NFOLD)+1;
   y_xval    = zeros(size(y));

   for j=1:NFOLD

      % perform feature selection

      err       = mean(repmat(y(partition~=j),1,NF) ~= x(partition~=j,:));
      [err,idx] = min(err);

      y_xval(partition==j) = x(partition==j,idx(1));

   end

   erate(i) = mean(y_xval ~= y);

   plot(erate);
   drawnow;

end

erate = sort(erate);

fprintf(1, 'Unbiased estimator: erate = %f (%f - %f)\n', mean(erate), erate(ceil(0.025*end)), erate(floor(0.975*end)));
Dikran Beuteltier
quelle
3
Danke - das ist sehr hilfreich. Wenn Sie den vorgeschlagenen Ansatz wählen, wie bewerten Sie dann Ihr endgültiges Modell? Wie wählen Sie das endgültige Feature-Set aus, da Sie über mehrere Feature-Sets verfügen? In der Vergangenheit habe ich auch Ergebnisse gemeldet, die auf einer einzigen Kreuzvalidierung mit ausgewählten Modellparametern und Merkmalen basierten.
BGreene
16
Bei der Kreuzvalidierung wird am besten die Leistung eines Verfahrens zur Anpassung eines Modells und nicht das Modell selbst bewertet. Das Beste, was Sie normalerweise tun müssen, ist, eine Kreuzvalidierung wie oben durchzuführen und dann Ihr endgültiges Modell unter Verwendung des gesamten Datensatzes mit dem gleichen Verfahren zu erstellen, das in jeder Falte des Kreuzvalidierungsverfahrens verwendet wird.
Dikran Beuteltier
2
In diesem Fall melden wir dann Klassifizierungsergebnisse basierend auf der Kreuzvalidierung (möglicherweise viele verschiedene Feature-Sets), melden aber dennoch, dass das Modell nur eines dieser Feature-Sets enthält, dh, dass kreuzvalidierte Klassifizierungsergebnisse nicht unbedingt mit dem Feature-Set übereinstimmen?
BGreene
10
Im Wesentlichen ja, die Kreuzvalidierung schätzt nur die erwartete Leistung eines Modellbildungsprozesses, nicht das Modell selbst. Wenn der Merkmalssatz von einer Falte der Kreuzvalidierung zur anderen stark variiert, ist dies ein Hinweis darauf, dass die Merkmalsauswahl instabil und wahrscheinlich nicht sehr aussagekräftig ist. Es ist häufig am besten, die Regularisierung (z. B. Kammregression) anstelle der Merkmalsauswahl zu verwenden, insbesondere wenn letzteres instabil ist.
Dikran Beuteltier
3
Dies ist so ein wichtiger Beitrag. Erstaunlich, wie viele dies nicht anwenden.
Chris A.
12

So fügen Sie eine etwas andere und allgemeinere Beschreibung des Problems hinzu:

Wenn Sie irgendeine Art von datengesteuerter Vorverarbeitung durchführen , z

  1. Parameteroptimierung durch Cross-Validierung / Out-of-Bootstrap
  2. Dimensionsreduktion mit Techniken wie PCA oder PLS zur Erzeugung von Eingaben für das Modell (z. B. PLS-LDA, PCA-LDA)
  3. ...

Um die Leistung des endgültigen Modells durch Cross-Validation / Out-of-Bootstrap (/ Hold-Out) -Validierung abzuschätzen , muss die datengesteuerte Vorverarbeitung für die Surrogat-Trainingsdaten durchgeführt werden, dh für jedes Surrogat-Modell separat.

Wenn die datengesteuerte Vorverarbeitung vom Typ 1 ist, führt dies zu einer "doppelten" oder "verschachtelten" Kreuzvalidierung: Die Parameterschätzung wird in einer Kreuzvalidierung nur unter Verwendung des Trainingssatzes der "äußeren" Kreuzvalidierung durchgeführt. Die ElemStatLearn haben eine Illustration ( https://web.stanford.edu/~hastie/Papers/ESLII.pdf Seite 222 von Druck 5).

Sie können sagen, dass die Vorverarbeitung wirklich Teil des Modellbaus ist. Nur die Vorverarbeitung wird durchgeführt

  • unabhängig für jeden Fall oder
  • unabhängig vom eigentlichen Datensatz

kann aus der Validierungsschleife genommen werden, um Berechnungen zu speichern.

Umgekehrt: Wenn Ihr Modell vollständig aus Kenntnissen außerhalb des jeweiligen Datensatzes aufgebaut ist (z. B. wenn Sie zuvor durch Ihr Fachwissen entscheiden, dass die Messkanäle 63 - 79 möglicherweise nicht zur Lösung des Problems beitragen können, können Sie diese Kanäle natürlich ausschließen Wenn Sie eine PLS-Regression durchführen und nach Ihren Erfahrungen feststellen, dass 3 latente Variablen eine vernünftige Wahl sind (aber nicht herumspielen, ob 2 oder 5 bessere Ergebnisse liefern), können Sie dies auch tun Fahren Sie mit einer normalen Out-of-Bootstrap- / Cross-Validierung fort.

Glaube
quelle
Leider funktioniert der Link für Druck 5 des ElemStatLearn-Buches nicht. Ich habe mich gefragt, ob sich die Abbildung, auf die Sie sich beziehen, noch auf derselben Seite befindet. Bitte erwähnen Sie auch die Bildunterschrift.
rraadd88
Wenn ich also über zwei Datensätze verfüge, auf einem Feature-Auswahl / Engineering und auf dem anderen CV, würde es keine Probleme geben?
Milos
1
@Milos: Nein, solange diese Features feste Parameter für die Modelle zur Kreuzvalidierung werden, sollte das in Ordnung sein. Dies wäre eine ordnungsgemäße Erstellung von Hypothesen (= Entwicklung von Merkmalen in Datensatz A) / Prüfung von Hypothesen (= Messung der Leistung der jetzt festgelegten Merkmale in Datensatz B).
Glaube
@cbeleites Ja, das wollte ich machen. Bestimmen Sie die Merkmale auf A, korrigieren Sie diese Merkmale und führen Sie eine Kreuzvalidierung für die Modelle auf B durch. Danke. :)
Milos
@Milos: Denken Sie jedoch daran, dass Ihre Argumentation für die erzielte Leistung noch besser ist, wenn Sie Ihr Modell vollständig auf A trainieren und dann B nur zum Testen verwenden.
Glaube
5

Lassen Sie uns versuchen, es ein bisschen intuitiv zu machen. Betrachten Sie dieses Beispiel: Sie haben einen binär abhängigen und zwei binäre Prädiktoren. Sie möchten ein Modell mit nur einem Prädiktor. Beide Prädiktoren haben eine Wahrscheinlichkeit von 95%, der abhängigen Person gleich zu sein, und eine Wahrscheinlichkeit von 5%, der abhängigen Person nicht zuzustimmen.

Nun ist zufällig in 97% der Fälle ein Prädiktor gleich dem von den gesamten Daten abhängigen und der andere nur in 93% der Fälle. Sie wählen den Prädiktor mit 97% und bauen Ihre Modelle. In jeder Falte der Kreuzvalidierung haben Sie den modellabhängigen Prädiktor =, weil er fast immer richtig ist. Daher erhalten Sie eine überproportionale prognostizierte Leistung von 97%.

Nun könnte man sagen, ok, das ist einfach Pech. Wenn die Prädiktoren jedoch wie oben konstruiert sind, haben Sie die Chance, dass 75% von mindestens einem davon eine Genauigkeit von> 95% für den gesamten Datensatz haben, und das ist derjenige, den Sie auswählen werden. Sie haben also eine Chance von 75%, die Leistung zu überschätzen.

In der Praxis ist es überhaupt nicht trivial, den Effekt abzuschätzen. Es ist durchaus möglich, dass Ihre Featureauswahl in jeder Falte dieselben Features auswählt, als ob Sie dies für den gesamten Datensatz getan hätten, und dass dann keine Verzerrung auftritt. Der Effekt wird auch kleiner, wenn Sie viel mehr Samples, aber Features haben. Es kann hilfreich sein, beide Methoden mit Ihren Daten zu verwenden und festzustellen, wie sich die Ergebnisse unterscheiden.

Sie können auch eine Datenmenge (z. B. 20%) beiseite legen, Ihre Methode und die richtige Methode verwenden, um Leistungsschätzungen zu erhalten, indem Sie eine Kreuzvalidierung für die 80% durchführen und feststellen, welche Leistungsvorhersage sich als genauer herausstellt, wenn Sie Ihr Modell auf die 20 übertragen % des Datensatzes beiseite. Damit dies funktioniert, muss Ihre Featureauswahl vor dem Lebenslauf auch nur für 80% der Daten durchgeführt werden. Andernfalls wird die Übertragung Ihres Modells auf Daten außerhalb Ihrer Stichprobe nicht simuliert.

Erik
quelle
Könnten Sie anhand Ihres intuitiven Beispiels genauer erläutern, wie die Featureauswahl korrekt durchgeführt wird? Danke.
Uared1776