python - 通过 GridSearchCV 测试的仅一类折叠
问题描述
在作为 SVC 包装器的自定义估计器上使用 GridSearchCV 时,我收到错误消息:“ValueError: The number of classes have to be greater than one; got 1 class”
自定义估算器用于将网格搜索参数添加到估算器中,并且似乎工作正常。
使用调试器,我发现确实给我的估计器提供了一个只有一类的训练集,所以出现了两种可能性:
估计器应该处理仅一类集
GridSearchCV 不应该只给出一个类集
当我从 SVC.fit 调用中得到一个错误,并且 SVC 似乎不应该接收仅一类集合时,我认为这是第二个选项。但是,我查看了 GridSearchCV 实现,但没有找到任何地方可以检查是否存在仅一类折叠或为什么会失败...
我在交叉验证中使用了网格搜索来进行嵌套交叉验证:
gs = GridSearchCV(clf.gs_clf.get_gs_clf(), parameter_grid, cv=n_inner_splits, iid=False)
gs.fit(*clf.get_train_set(X, y, train_index))
解决方案
我发现了真正的问题,GridsearchCV 的文档为参数 cv 指定:
# For integer/None inputs, if the estimator is a classifier and ``y`` is
# either binary or multiclass, `StratifiedKFold` is used. In all
# other cases, `KFold` is used.
对于 StratifiedKFold,只有一类子集是不可能的。
所以解决方案是让我的自定义估算器继承自 sklearn.base.ClassifierMixin
推荐阅读
- amazon-web-services - 无法使用 aws cloudformation select 和 findinmap
- postgresql - 创建备份作业后没有任何反应
- javascript - 从 Google 表格到 HTML 的日期格式
- amazon-web-services - 从 boto3 脚本创建 AWS DMS 任务的问题
- python - 在使用 python 的正在运行的进程中导入我的 Python 模块
- javascript - 如果原点 X 为正且 Z 为负,我如何找到反应角的角?
- python - Python 相当于 R 中的 readr's questions 函数
- java - Spark 升级使用 Java 在 SPark3.1.1 中引发编译错误
- reactjs - 使用效果看不到状态
- c# - 如何在 NET 5 项目中使用标准 2.0 实体框架库?