如何解决为什么sklearn cross_validate会进行调整?
我了解为什么GridSearchCV之类的工具可以重新安装。它在一定范围内的超参数值上进行探索,并在对分数进行比较之后,使用整个数据集中发现的最佳参数对估计量进行重新拟合。
但是尽管这很有意义,但我的问题是关于cross_validate类,在该类中仅使用了一组超参数。我不确定的目的是查看模型在火车/测试拆分的不同折叠中的推广程度。为什么在这里使用改装?
我理解为什么n个数据会出现n个拟合。但是根据文档,如error_score
参数中所述,还进行了改装:
error_score:“提高”或数字值
,以在估算器拟合发生错误时分配给分数。如果设置为“ raise”,则会引发错误。如果给出数值,则引发FitFailedWarning。此参数不会影响重新安装步骤,这总是会引发错误。
因此,除了n个拟合之外,还有一个额外的拟合,我不明白为什么会这样。该类没有预测方法,因此即使以某种方式区分了模型并选择了“最佳”模型(尽管它们都具有完全相同的超参数),也没有必要进行重新拟合。
为了证明这一点,我创建了一个我知道的MLPRegressor模型,并与我的数据集结合使用时会出现爆炸梯度:
DL = MLPRegressor(
hidden_layer_sizes=(200,200,200),activation='relu',max_iter=16,solver='sgd',learning_rate='invscaling',power_t=0.9)
DL.fit(df_training[predictor_cols],df_training[target_col])
该模型拟合正确,没有错误(证明我的数据集中没有NaN或inf值),但给出了警告:
RuntimeWarning:matmul中遇到溢出
这证明了爆炸梯度,因此任何预测的输出都是NaN。
据我对cross_validate文档的理解,如果我通过了以下命令(使用error_score=1
):
DL = MLPRegressor(
hidden_layer_sizes=(200,power_t=0.9)
DL_CV = cross_validate(DL,df_training[predictor_cols],y=df_training[target_col],cv=None,n_jobs=1,pre_dispatch=5,return_train_score=False,return_estimator=True,error_score=1)
我应该收到“ FitFailedWarning”消息,但没有错误。但是,培训并未结束,而是引发了以下错误:
ValueError:输入包含NaN,无穷大或对于dtype('float64')而言太大的值。
因此,这使我得出结论,错误是由于改装造成的,但我不知道改装的目的是什么...
解决方法
cross_validate
不适合,因为您可以从源代码中进行验证。该文档不正确,大概是从GridSearchCV
的文档中复制过来的。您应该打开一个问题或提出拉取请求;如果您不愿意,我可以。
我不知道您最后一次错误的根源;也许在对成功拟合模型进行评分时而不是在拟合过程中会引起错误?如果原始拟合仅引发警告,则默认情况下不会在搜索中捕获该警告。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。