sklearn多特征训练SVR报样本数不一致[192,48]错误如何解决
问题原因
报错的核心原因是你对多特征的训练输入做了错误的维度变换:
- 你的
X_train从48行训练集中取出了4个特征,原始维度是(48, 4),总元素数为48*4=192 - 调用
X_train.reshape(-1,1)后,所有元素被平铺成了形状为(192, 1)的数组,相当于强行生成了192个样本 - 但你的
y_train只有48个标注样本,二者样本数不一致直接触发报错
你之前单特征训练时reshape(-1,1)是正确操作,因为单特征取出后维度是(48,),需要转成sklearn要求的(样本数, 特征数)二维结构,但多特征场景下不需要这个操作。
修复方案
直接修改fit调用代码,删除多余的reshape操作即可:
# 修改前 svr_rbf.fit(X_train.reshape(-1,1),y_train.ravel()) # 修改后 svr_rbf.fit(X_train, y_train.ravel())
可选优化建议
当前你做的是时间序列预测,普通GridSearchCV默认使用的随机K折交叉验证会打乱时间顺序,存在未来数据泄露的问题,建议替换为时间序列专用的交叉验证方式:
from sklearn.model_selection import TimeSeriesSplit # 初始化GridSearchCV时指定cv参数 svr_rbf = GridSearchCV(SVR(epsilon = 0.01), parameter, cv = TimeSeriesSplit(n_splits=10), scoring=scorer)
内容的提问来源于stack exchange,提问作者Lafic Prayana
相关产品推荐
相关产品推荐

