You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sklearn中使用训练/验证/测试集时如何为RandomizedSearchCV传递cv参数

报错原因

你触发ValueError: too many values to unpack (expected 2)的核心原因是RandomizedSearchCV的cv参数传入格式不符合要求:
自定义训练验证拆分时,cv需要接收一个包含多组(训练集索引, 验证集索引)元组的可迭代对象。你直接传入[train_idx, val_idx]会被识别为2组拆分,每组拆分只有一个索引数组,无法拆分为训练、验证两个索引变量,因此抛出解包错误。

正确实现代码

修正cv参数格式即可解决报错,同时补充测试集评估步骤,符合训练、验证、测试三集的使用规范,完整可运行代码如下:

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform
from sklearn.metrics import accuracy_score

iris = load_iris()
X, y = iris.data, iris.target

# 自定义数据集拆分
train_idx = list(range(100))  # 训练集索引
val_idx = list(range(100, 125))  # 验证集索引,用于参数调优
test_idx = list(range(125, 150))  # 测试集索引,用于最终泛化能力评估

logistic = LogisticRegression(solver='saga', tol=1e-2, max_iter=200, random_state=0)
distributions = dict(C=uniform(loc=0, scale=4), penalty=['l2', 'l1'])

# 核心修正:将训练、验证索引打包为元组后放入列表,代表1折自定义交叉验证
clf = RandomizedSearchCV(logistic, distributions, random_state=0, 
                         cv=[(train_idx, val_idx)])
search = clf.fit(X, y)

# 输出调优得到的最优参数
print("最优参数:", search.best_params_)

# 用完全未参与调优的测试集评估最优模型的泛化能力
best_model = search.best_estimator_
test_acc = accuracy_score(y[test_idx], best_model.predict(X[test_idx]))
print("测试集准确率:", test_acc)
补充说明
  • 若需要使用多折交叉验证,只需在cv对应的列表中添加多组(训练索引, 验证索引)格式的元组即可
  • 整个调优过程不会接触测试集数据,避免数据泄露,保证最终测试集评估结果的可信度

内容的提问来源于stack exchange,提问作者Ratchainant Thammasudjarit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:42:01