2017-01-26 1 views
0

traf ich ein Problem, wenn ich python3.6 mit Scikit-Learn 0,18unterschiedliche Punktzahl zwischen cross_val_score und train_test_split

verwendet wurde verwendet, ich die Random eine Regression zu tun, und die Regression war ziemlich gut, aber als ich versuche, das zu berechnen Kreuzvalidierung, traf ich ein Problem, das die Punkte aus cross_val_score und train_test_split waren wirklich unterschiedlich. Die Punktzahl von train_test_split ist 0,9, aber der Mittelwert von cross_val_score ist etwa 0,3.

Können Sie mir den Grund sagen? oder etwas falsch in meinem Code?

der Code

import numpy as np 
import cv2 
import itertools 

from sklearn.tree import DecisionTreeRegressor 
from sklearn.ensemble import RandomForestRegressor  
from sklearn.cross_validation import cross_val_score,cross_val_predict,ShuffleSplit,KFold 
from sklearn.model_selection import train_test_split 
train= np.loadtxt('.txt') 
traindata=train[0:,38:] 
traintarget=train[0:,j] 

rf=RandomForestRegressor(n_estimators=20) 
rf.fit(traindata,traintarget) 

X=traindata 
Y=traintarget 
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=0) 
print (rf.score(X_test, Y_test)) 
score3 = cross_val_score(rf, X, Y, scoring= 'r2',  cv=ShuffleSplit(n=len(X),test_size=0.3,train_size=0.6)) 
score4 = cross_val_score(rf, X, Y, scoring= 'neg_mean_absolute_error', cv=ShuffleSplit(n=len(X),test_size=0.3,train_size=0.6)) 
score5 = cross_val_score(rf, X, Y, scoring= 'neg_mean_squared_error', cv=ShuffleSplit(n=len(X),test_size=0.3,train_size=0.6)) 
print (score3) 
print (score4) 
print (score5) 
+0

Ich sah jemanden hatte das gleiche Problem. Aber ich habe die Zufallsstichprobe bereits in beiden Methoden hinzugefügt. –

Antwort

0

Wenn Sie train_test_split verwenden, sind Sie die Datenmenge in Zug und Test zufällig aufgeteilt wird.

Shufflesplit ist nicht zu unterschiedlich. Das Problem liegt möglicherweise darin, dass die Klassenverteilung sehr ungleichmäßig ist. (Übrigens, erinnern Sie sich an eine Sache, lassen Sie eine aus der Kreuzvalidierung, die Sie verwenden, gibt immer schlechte Ergebnisse in meiner Erfahrung). Verwenden Sie stattdessen eine 5-fache Kreuzvalidierung.

Sie können die geschichtete Kreuzvalidierung auch verwenden, wenn die Klassenverteilung ungleichmäßig ist. Es behält den Prozentsatz der Proben in jeder Klasse bei. Schauen Sie sich zum Beispiel http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html an.

Verwandte Themen