Sklearn管道训练报错:输入变量样本数不一致[15,5]
问题解决:训练集与标签样本数不匹配报错
错误原因
你在调用pipe.fit()时传错了标签参数:用了测试集标签Y_test(5个样本),但训练特征X_train是15个样本(默认train_test_split按75%/25%拆分20条数据),两者样本数不一致,直接触发了报错。
修正步骤
- 修正训练标签参数:训练模型必须传入训练集对应的标签
Y_train,而非测试集标签Y_test - 统一变量大小写:代码里
X和x混用,建议保持命名一致性(比如统一用大写X指代特征集)
修正后的完整代码
from sklearn.model_selection import train_test_split from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC # 统一变量命名大小写 X = x y = y X_train, X_test, Y_train, Y_test = train_test_split(X, y, random_state=0) pipe = Pipeline([('scaler', StandardScaler()), ('svc', SVC(kernel='rbf', C=10))]) # 训练时传入训练集特征和对应标签 pipe.fit(X_train, Y_train) # 用测试集评估模型效果 test_score = pipe.score(X_test, Y_test) print(f"模型测试集得分:{test_score}")
额外说明
train_test_split默认按75%/25%比例拆分数据集,20条数据拆分后即15条训练样本、5条测试样本,这也是报错中[15, 5]的来源- Sklearn管道会自动在训练集上拟合标准化器,再用拟合后的规则转换训练集和测试集,无需手动单独处理,能避免数据泄露问题
内容的提问来源于stack exchange,提问作者Suhail
相关产品推荐
相关产品推荐

