如何保存像StratiferKfold这样的生成器的副本



我在笔记本上在两个不同的单元格中执行以下命令:

  • skf = StratifiedKFold(n_splits = 4).split(X,Y)
  • regrl = LinearRegression() mse = np.mean(cross_val_score(regrl, X, Y, cv = skf, scoring = 'mean_squared_error'))

cross_val_score的第一次执行没有错误,但第二次尝试返回:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-48-de4073ce654d> in <module>
2 
3 
----> 4     mse = np.mean(cross_val_score(regrl, X, Y, cv = skf, scoring = 'mean_squared_error'))
5 mse
/opt/conda/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_val_score(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch)
340                                 n_jobs=n_jobs, verbose=verbose,
341                                 fit_params=fit_params,
--> 342                                 pre_dispatch=pre_dispatch)
343     return cv_results['test_score']
344 
/opt/conda/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_validate(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score)
210         train_scores = _aggregate_score_dicts(train_scores)
211     else:
--> 212         test_scores, fit_times, score_times = zip(*scores)
213     test_scores = _aggregate_score_dicts(test_scores)
214 
ValueError: not enough values to unpack (expected 3, got 0)

如果我再次执行:skf = StratifiedKFold(n_splits = 4).split(X,Y)如果没有返回错误,则生成器skf在使用后变为空。所以我会知道如何获得生成器的副本。

因为我需要在一个循环中尝试许多模型,但目前我必须为每次迭代刷新skf,这需要太多时间。

不要这样做:

skf = StratifiedKFold(n_splits = 4).split(X,Y)
cross_val_score(regrl, X, Y, cv = skf, ...)

其中skf是您所观察到的生成器,并且只执行一次。

你可以这样做:

from sklearn.model_selection import StratifiedKFold, cross_val_score
skf = StratifiedKFold(n_splits = 4)
cross_val_score(regrl, X, Y, cv = skf, ...)

这里skf是一个StratifiedKFold对象,而不是像您的代码那样的生成器。

cross_val_score(在scikit的较新版本中,从model_selection包中学习>0.18(可以在需要时使用提供的数据(X,y(在折叠迭代器上自动调用split()。所以你不必明确地执行它。

相关内容

  • 没有找到相关文章

最新更新