为什么sklearn cross_validate会进行调整?

如何解决为什么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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?