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

使用带K折交叉验证的核岭回归时出现样本数不一致报错如何解决

报错根因
  • sklearn的train_test_split接口要求输入的特征集X和标签集y的样本行数必须完全一致,你的代码中将样本量为140的datasetTrain全量赋值给X,样本量为70的datasetTest全量赋值给y,二者样本数不匹配,直接触发该报错。
  • 你对X和y的定义逻辑不符合机器学习数据拆分的基本规则:X和y应当来自同一个数据集,分别对应特征列和待预测的目标列,不能用两个独立的、样本量不同的数据集分别作为X和y。
修复方法

1. 常规训练验证拆分逻辑

首先需要从训练集、测试集中分别拆分特征列和目标列,假设你的待预测目标列列名为label,可替换为你实际的列名:

import pandas as pd
from sklearn.model_selection import train_test_split

datasetTrain = pd.read_csv('D:/set_AB.csv')
datasetTest = pd.read_csv('D:/set_C.csv')

# 拆分训练集的特征与标签
X_train_all = datasetTrain.drop(columns=['label'])
y_train_all = datasetTrain['label']

# 从训练集中拆分出训练子集和验证子集
X_train, X_val, y_train, y_val = train_test_split(X_train_all, y_train_all, random_state=0)

# 测试集单独拆分,用于最终模型效果评估
X_test = datasetTest.drop(columns=['label'])
y_test = datasetTest['label']

2. K折交叉验证适配逻辑

如果你要实现K折交叉验证,不需要用train_test_split拆分训练集,直接调用KFold相关接口即可,示例如下:

from sklearn.model_selection import KFold
from sklearn.kernel_ridge import KernelRidge

# 初始化5折交叉验证
kf = KFold(n_splits=5, shuffle=True, random_state=0)
# 初始化核岭回归模型,可按需调整核函数、超参数
kr_model = KernelRidge(kernel='rbf', alpha=1.0)

# 交叉验证训练
for train_idx, val_idx in kf.split(X_train_all):
    X_tr, X_val = X_train_all.iloc[train_idx], X_train_all.iloc[val_idx]
    y_tr, y_val = y_train_all.iloc[train_idx], y_train_all.iloc[val_idx]
    kr_model.fit(X_tr, y_tr)
    # 输出当前折的验证集得分
    print(f"当前折验证R2得分:{kr_model.score(X_val, y_val):.4f}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:09:03