Mithilfe von decision tree-regression und Kreuzvalidierung in sklearn
Ich bin ein Neuling in statistischen Methoden, also bitte entschuldigt eventuelle Naivität. Ich habe ein problem, das Verständnis, die Durchführung der cross-Validierung bei der Verwendung von Entscheidungsbaum-regression von sklearn (z.B. DecisionTreeRegressor und RandomForestRegressor). Mein dataset unterschiedlich aus, die mehrere Prädiktoren (y = einzelne abhängige variable; X = mehrere unabhängige Variablen) auf einen einzigen Prädiktor und besteht aus mehr als genug Fälle (> 10k). Die folgende Erklärung gilt für alle Fälle.
Beim Einbau und erzielte den Regressoren, die mit den standard-Methoden:
dt = DecisionTreeRegressor()
rf = RandomForestRegressor()
dt.fit(X,y)
rf.fit(X,y)
dt_score = dt.score(X,y)
rf_score = rf.score(X,y)
Den dt_score und rf_score gibt vielversprechende R-Quadrat-Werte (> 0.7), aber ich bin mir bewusst, das over-fitting Eigenschaften des DT-und zu geringerem Maße auch die RF. Deshalb habe ich versucht, die Punktzahl, die der Regressoren mit der Kreuzvalidierung (10-Fach) verwenden, um eine getreuere Wiedergabe der Genauigkeit:
dt = DecisionTreeRegressor()
rf = RandomForestRegressor()
dt.fit(X,y)
rf.fit(X,y)
dt_scores = cross_val_score(dt, X, y, cv = 10)
rf_scores = cross_val_score(rf, X, y, cv = 10)
dt_score = round(sum(dt_scores )/len(dt_scores ), 3)
rf_score = round(sum(rf_scores )/len(rf_scores ), 3)
Die Ergebnisse der cross-Validierung gibt immer negative Werte. Ich nehme an, Sie sind R-Quadrat-Werte nach der sklearn guidlines: standardmäßig wird der score berechnet, bei jeder CV-iteration ist die score-Methode des Schätzers (die score-Methode sowohl von den Regressoren ist R-Quadrat). Die Erklärung, die sich aus den Richtlinien für die basic KFold cross validation ist: Jede Falte wird dann verwendet, einmal als Bestätigung, während die k - 1 restlichen Falten form der Ausbildung festgelegt.
Wie verstehe ich das, bei der Verwendung von 10 alten cv, ist: mein Datensatz ist aufgeteilt in 10 gleiche Teile, für jedes Teil die restlichen 9 Teile, die für die Ausbildung (ich bin nicht sicher, ob dies ist ein fit-operation oder eine Partitur-Betrieb) und der Verbleibende Teil wird für die Validierung verwendet werden (nicht sicher, was getan wird, für die Validierung). Diese Regressoren sind eine komplette "black box" für mich, so habe ich keine Idee, wie man eine Struktur verwendet, die für die regression und wo die cross-Validierung wird dem R-Quadrat-Werte aus.
Also um zusammenzufassen, ich bin kämpfen, um zu verstehen, wie die cross-Validierung kann eine Verringerung der Genauigkeit (R-Quadrat) so dramatisch? Bin ich mit dem cross validation richtige für ein regressor? Macht es Sinn, auf cross-Validierung für ein Entscheidungsbaum regressor? Soll ich mich mit anderen cross-validation-Methode?
Danke
- Cross validation ist eine Technik zum berechnen einer generalisierbaren Metrik, in diesem Fall, R^2. Wenn Sie trainieren (also fit) Ihr Modell auf einige Daten, und dann berechnen Sie Ihre Metrik, auf die gleichen Trainingsdaten (d.h. Validierung), die Metrik, die Sie erhalten könnte voreingenommen sein, weil dein Modell overfit zu den Trainingsdaten. In anderen Worten, cross-validation versucht zu schätzen, wie Ihr Modell führen Sie auf onseen Daten. Also, was dieser sagt Ihnen, wenn Sie es tun richtig ist, dass das Modell schlecht durchführen, die auf ungesehenen Daten, wahrscheinlich aufgrund von overfitting.
- Als Sie Stand, DTs-berüchtigt sind overfitters. Sie können versuchen, die Feinabstimmung der verschiedenen Parameter, die zur Entscheidung Baum Regressoren in sklearn. Ein guter Platz zum zu beginnen ist in der Regel die maximale Tiefe.
- Also, um zusammenzufassen, ist die Antwort auf die Frage "wie die Kreuz-Validierung kann eine Verringerung der Genauigkeit (R-Quadrat) so dramatisch?" ist "weil Ihr Modell sehr schlecht auf ungesehenen Daten".
- Danke für Eure inputs @juanpa.arrivillaga. Ihr Kommentar "wenn Sie es tun, richtig", sind Sie sich auf wie lade ich die sklearn Methoden in python? So erklären Sie, dass es ist völlig denkbar, dass der Entscheidungsbaum und random forest Regressoren über-Vorhersagen so stark, dass es fällt die R-Quadrat von 0,8 auf < 0, wenn die Anwendung der cross-Validierung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben zusammen einen kleinen code-snippet zu artikulieren, wie auf die Verwendung DecisionTreeRegressor und cross-validation.
A. In der ersten code-snippet "cross_val_score' verwendet wird. Aber, r2_score könnte negative Partitur, die Einblick über den Armen lernen durch das Modell.
B. Im nächsten Abschnitt, verwenden von cross-Validierung für die Durchführung GridSerach auf den parameter 'min_samples_split', dann mit den besten Schätzer für die Bewertung auf die valiation/Zurückhaltung gesetzt.
# Mittels GridSearch:
von sklearn.model_selection import GridSearchCV
von sklearn.Metriken importieren make_scorer
von sklearn.Metriken importieren mean_absolute_error
von sklearn.Metriken importieren r2_score
Hoffe, das war nützlich.
Referenz:
https://www.programcreek.com/python/example/75177/sklearn.cross_validation.cross_val_score
Decision tree-splits auf Werte der Funktionen, erzeugt eine Gruppe mit der höchsten Reinheit. Wenn ich sage, Reinheit, ich meine in dem Sinne, dass alle Mitglieder in dieser Gruppe teilt alles oder fast alles, was ähnlich ist (z.B. alle weiß, 35 Jahre alt, alle Männlich, etc.). Es wird halten Sie tun dies, bis alle Blattknoten sind vollkommen rein, oder bestimmte stoppen Mechanismen getroffen werden (z.B. minimale Anzahl von Proben, die ein Knoten benötigt, um split). Die Parameter, die Sie sehen in der sklearn Dokumentation sind im Grunde diejenigen, die beenden Parameter. Nun, in Bezug auf regression, was der Baum zu tun ist, nehmen Sie den Durchschnitt aller wahren
y
jedes Blatt, (der Knoten, der nicht mehr teilt) als die geschätztey-hat
für diesen bestimmten Pfad, so dass, wenn Sie Vorhersagen, Ihre test-dataset, jeder Datensatz aus, der test-Datensatz im Grunde Folgen Sie einem Pfad auf dem Baum, bis es auf einen Blatt-Knoten, und die geschätztey-hat
für diesen Datensatz wird die average truey
alle Beobachtungen in diesem Blattknoten.Einem random forest ist im Grunde eine Sammlung von Entscheidungsbäumen, welche eine Teilmenge der Trainingsdaten, um das training zu tun. Diese Bäume sind in der Regel nicht so tief, wie ein einzelner Entscheidungsbaum-Modell, das lindert die überanpassung Symptome einer einzigen Entscheidung Baum. Die Idee von RF ist, dass Sie viele schwache Lernende, kann generalisieren und Ihre Daten auch. Daher, weniger overfit.
Der R-Quadrat-Metrik ist im Grunde
1 - (SS_res /SS_tot)
. Bricht die Formel ab, du bist im Grunde auf der Suche auf die Summe der quadrierten Residuen und der Summe der quadrierten Summe. Daher, Sie müssen nur wissen, die wahrey
Werte, die geschätzty-hat
Werte, und der Mittelwert der wahrey
Wertey-bar
.min_samples_leaf
undmin_samples_split
schlagen Sie eine wirklich große Bäume. Auch dieRandomForestRegressor
hat diese default-Werte. Ich würde vorschlagen, die Erhöhung dieser Werte.GridSearchCV
. Dies stellt einen parameter für die Suche in mögliche Werte zu erhalten, die optimale parameter-Werte aus der Liste der Werte, die Sie liefern, im Netz suchen. Für den Anfang, führen Sie einfach einen parameter suchen, aufmin_samples_split
und habenmin_samples_leaf
auf 50 festgelegt. Und die Verwendung eines random forest.