使用交叉验证 (CV)sklearn非常简单直接。但是cv=5在线性 CV 模型中设置时的默认实现,例如ElasticNetCV或LassoCV是KFoldCV。出于各种原因,我想使用StratifiedKFold. 从文档来看,似乎任何CV 方法都可以用cv=.
传递cv=KFold(5)按预期工作,但cv=StratifiedKFold(5)会引发错误:
ValueError: 支持的目标类型是: ('binary', 'multiclass')。取而代之的是“连续”。
我知道我可以cross_val_score在拟合后使用,但我想StratifiedKFold作为 CV 直接传递给线性模型。
我的最低工作示例是:
from sklearn.linear_model import ElasticNetCV
from sklearn.model_selection import KFold, StratifiedKFold
import numpy as np
x = np.arange(100, dtype=np.float64).reshape(-1, 1)
y = np.arange(100) + np.random.rand(100)
# KFold default implementation:
model_default = ElasticNetCV(cv=5)
model_default.fit(x, y) # works fine
# KFold given as cv explicitly:
model_kfexp = ElasticNetCV(cv=KFold(5))
model_kfexp.fit(x, y) # also works fine
# StratifiedKFold given as cv explicitly:
model_skf = ElasticNetCV(cv=StratifiedKFold(5))
model_skf.fit(x, y) # THIS RAISES THE ERROR
知道如何StratifiedKFold直接设置为 CV 吗?
婷婷同学_
相关分类