首页 > 解决方案 > 通过 GridSearchCV 测试的仅一类折叠

问题描述

在作为 SVC 包装器的自定义估计器上使用 GridSearchCV 时,我收到错误消息:“ValueError: The number of classes have to be greater than one; got 1 class”

自定义估算器用于将网格搜索参数添加到估算器中,并且似乎工作正常。

使用调试器,我发现确实给我的估计器提供了一个只有一类的训练集,所以出现了两种可能性:

当我从 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))

标签: pythonpython-3.xscikit-learnsvcgridsearchcv

解决方案


我发现了真正的问题,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


推荐阅读