【问题标题】:SciKit-Learn: Very Different Results with Cross ValidationSciKit-Learn:交叉验证的不同结果
【发布时间】:2017-12-22 05:25:30
【问题描述】:

我正在使用 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)。

知道这里发生了什么吗?

谢谢!

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案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,这可能是造成差异的原因。 也许将n 更改为n_folds

    【讨论】:

    • 请注意,我首先要做的是from sklearn.cross_validation import cross_val_score, KFold,所以它应该是n
    • 这样的话,n 不是示例数,n_folds 是折叠数吗?
    • 另外,scikit-learn.org/stable/modules/generated/… 让我觉得 sklearn.cross_validation.KFold 已被弃用
    猜你喜欢
    • 2016-04-25
    • 2018-03-30
    • 2017-09-02
    • 1970-01-01
    • 2012-01-07
    • 2015-06-22
    • 2016-05-09
    • 2021-10-25
    • 2019-07-04
    相关资源
    最近更新 更多