SciKit-Learn:交叉验证的非常不同的结果
SciKit-Learn: Very Different Results with Cross Validation
我正在使用 SciKit-Learn 0.18.1 和 Python 2.7 进行一些基本的机器学习。我试图通过交叉验证来评估我的模型有多好。当我这样做时:
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)。
知道这里发生了什么吗?
谢谢!
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,这可能是造成差异的原因。
也许将 n
更改为 n_folds
我正在使用 SciKit-Learn 0.18.1 和 Python 2.7 进行一些基本的机器学习。我试图通过交叉验证来评估我的模型有多好。当我这样做时:
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)。
知道这里发生了什么吗?
谢谢!
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,这可能是造成差异的原因。
也许将 n
更改为 n_folds