2017-07-17 58 views
0

我正在使用SciKit-Learn 0.18.1和Python 2.7進行一些基本的機器學習。我試圖通過交叉驗證來評估我的模型有多好。當我這樣做:SciKit-Learn:交叉驗證的結果非常不同

from sklearn.cross_validation import cross_val_score, KFold 

cv = KFold(n=5, random_state = 100) 

clf = RandomForestRegressor(n_estimators=400, max_features = 0.5, verbose = 2, max_depth=30, min_samples_leaf=3) 
score = cross_val_score(estimator = clf, X = X, y = y, cv = cv, n_jobs = -1, 
         scoring = "neg_mean_squared_error") 
avg_score = np.mean([np.sqrt(-x) for x in score]) 
std_dev = y.std() 
print "avg_score: {}, std_dev: {}, avg_score/std_dev: {}".format(avg_score, std_dev, avg_score/std_dev) 

我得到一個低avg_score(〜9K)。

令人不安的是,儘管指定了5次摺疊,但我的score數組中只有3個項目。相反,當我這樣做:

from sklearn.model_selection import KFold, cross_val_score 

並運行相同的代碼(除n成爲n_splits),我得到一個更糟糕的方式RMSE(〜24K)。

任何想法這裏發生了什麼?

謝謝!

回答

1
cv = KFold(n=5, random_state = 100) 

根據http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html#sklearn.model_selection.KFold n是示例和n_folds總數,默認爲3,是CV的數目褶皺。看起來你只用3倍和5個例子來運行CV,這可能是造成這種差異的原因。 也許改變nn_folds

+0

請注意,我第一次做'從sklearn.cross_validation進口cross_val_score,KFold'所以它應該是'N' – bclayman

+0

在這種情況下,不是n實例的數量和n_folds數的褶皺? –

+0

此外,http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.KFold.html#sklearn.model_selection.KFold讓我覺得sklearn.cross_validation.KFold已棄用 –