2016-09-30 2 views
1

ich verschiedene Werte für verschiedene Läufe bin immer ... was mache ich falsch hier:Wie cross_val_score verwenden, um mit random_state

X=np.random.random((100,5)) 
y=np.random.randint(0,2,(100,)) 
clf=RandomForestClassifier() 
cv = StratifiedKFold(y, random_state=1) 
s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv) 
print(s) 
# [ 0.42321429 0.44360902 0.34398496] 
s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv) 
print(s) 
# [ 0.42678571 0.46804511 0.36090226] 

Antwort

4

Der Fehler, den Sie das ARG RandomForestClassifier dessen Standard Aufruf machen wird, random_state ist Keiner. Also nimmt es den Seed, der von generiert wird, um die zufällige Ausgabe zu erzeugen.

Die random_state in beiden StratifiedKFold und RandomForestClassifier müssen gleich sein, um gleiche Arrays von Bewertungen der Kreuzvalidierung zu erzeugen.

Illustration:

X=np.random.random((100,5)) 
y=np.random.randint(0,2,(100,)) 

clf = RandomForestClassifier(random_state=1) 
cv = StratifiedKFold(y, random_state=1)  # Setting random_state is not necessary here 
s = cross_val_score(clf, X,y,scoring='roc_auc', cv=cv) 
print(s) 
##[ 0.57612457 0.29044118 0.30514706] 
print(s) 
##[ 0.57612457 0.29044118 0.30514706] 

Ein anderer Weg, es entgegenzutreten nicht random_state args für beide RFC und SKF wäre zu liefern. Aber einfach die np.random.seed(value) bereitstellen, um die zufälligen Ganzzahlen am Anfang zu erstellen. Diese würden auch gleiche Arrays am Ausgang erzeugen.

+1

haha ​​yeah ich denke, der Hinweis ist im Namen, es heißt nicht ein 'DeterministicForestClassifier' ist es ?! – maxymoo

Verwandte Themen