2016-07-01 13 views
4

Verwende Random Forest mit scikit learn. RF überlagert die Daten und Vorhersageergebnisse sind schlecht.Spezifische Kreuzvalidierung mit zufälliger Gesamtstruktur

Die Überanpassung nicht auf die Parameter der RF abhängt: NBtree, Depth_Tree

Überanpassung geschieht mit vielen verschiedenen Parametern (es über grid_search getestet).

Um Abhilfe zu schaffen: Ich zwecke die anfänglichen Daten/Down-Sampling einige Ergebnisse , um die Anpassung zu beeinflussen (manuelle Vor-Prozess Geräuschprobe).

Loop on random generation of RF fits, 

Get RF prediction on the data for prediction 
Select the model which best fits the "predicted data" (not the calibration data). 

Das Monte carlos sehr verbraucht, Nur frage mich, ob es eine andere Art und Weise ist Kreuzvalidierung auf gelegentlichem Wald zu tun? (dh NICHT die Hyper-Parameter-Optimierung).

EDITED

+0

Lesen Sie einfach die Dokumentation. Vor allem [dies] (http://scikit-learn.org/stable/modules/grid_search.html#grid-search). – sascha

+0

Verwenden Sie oob_score oder Genauigkeit, wenn Sie sagen, dass Ihr Modell überbaut? –

+0

Blick auf die Konfusionsmatrix Falsch Positiv/Negativ .... Training ist OK. Aber, aus der Probe ist nicht konsistent gut (in der Regel schlecht, manchmal in Ordnung). – Brook

Antwort

13

Kreuzvalidierung mit jedem Klassifizierer in Scikit-Learn ist wirklich trivial:

from sklearn.ensemble import RandomForest 
from sklearn.cross_validation import cross_val_score 
import numpy as np 

clf = RandomForest() #Initialize with whatever parameters you want to 

# 10-Fold Cross validation 
print np.mean(cross_val_score(clf, X_train, y_train, cv=10)) 

Wenn Sie Grid Search laufen, Sie leicht über die GridSearchCV Klasse tun können. Um müssen Sie eine param_grid bieten zu tun, was nach der Dokumentation

Wörterbuch mit Parametern Namen ist (string) als Schlüssel und Listen von Parametereinstellungen als Werte, um zu versuchen, oder eine Liste solcher Wörterbücher, In diesem Fall werden die Gitter, die von jedem Wörterbuch in der Liste aufgespannt werden, erkundet. Dies ermöglicht die Suche über eine beliebige Sequenz von Parameter Einstellungen.

Vielleicht könnten Sie Ihre param_grid wie folgt definieren:

param_grid = { 
       'n_estimators': [5, 10, 15, 20], 
       'max_depth': [2, 5, 7, 9] 
      } 

Dann können Sie die GridSearchCV Klasse verwenden als

from sklearn.grid_search import GridSearchCV 

grid_clf = GridSearchCV(clf, param_grid, cv=10) 
grid_clf.fit(X_train, y_train) 

folgt Anschließend können Sie das beste Modell erhalten grid_clf. best_estimator_ mit und die besten Parameter mit grid_clf. best_params_. In ähnlicher Weise können Sie die Rasterwerte erhalten mit grid_clf.grid_scores_

Hope this hilft!

+0

Frage bezieht sich nicht auf Hyper-Parameter-Optimierung. – Brook

Verwandte Themen