使用预训练线性回归模型进行预测时遭遇维度不匹配错误的求助
使用预训练线性回归模型进行预测时遭遇维度不匹配错误的求助
嗨,别担心,这个维度不匹配的问题是机器学习新手入门时特别常见的小坑,我来帮你快速解决~
首先,我们先搞清楚报错的原因:scikit-learn(我猜你用的是这个库的线性回归模型)的所有预测方法,都要求输入的特征数据是二维数组,格式为(样本数量, 特征数量)。你现在传入的是一个一维列表,模型会默认把它理解成「10个样本,每个样本1个特征」,但你的预训练模型是基于「每个样本10个特征」训练的,维度完全对不上,所以才会弹出那个reshape的提示。
再看你的代码,还有个小细节要注意:你说已经加载了预训练模型,那代码里的linear.fit(x, y)其实是多余的——这行代码会重新训练模型,直接覆盖你加载的预训练权重,记得要删掉哦!
接下来给你两种简单的修正方案:
方案一:用numpy的reshape转换维度
先把你的一维特征列表转成numpy数组,再用reshape(1, -1)来指定「1个样本,特征数量自动计算」(这里就是10个特征):
import numpy as np # 注意:你写的特征列表里只有9个元素,记得补成模型需要的10个哦 x = [2.0, 2.4, 1.5, 3.5, 3.5, 3.5, 3.5, 3.7, 3.7, 4.0] # 转换为二维数组 x_2d = np.array(x).reshape(1, -1) # 用预训练模型预测 predict_x = linear.predict(x_2d) print(f'Predict = {predict_x}')
方案二:直接用列表嵌套的方式构造二维输入
如果你不想用numpy,也可以直接把一维列表放进另一个列表里,手动构造二维结构:
# 同样要确保是10个特征 x = [[2.0, 2.4, 1.5, 3.5, 3.5, 3.5, 3.5, 3.7, 3.7, 4.0]] # 直接预测 predict_x = linear.predict(x) print(f'Predict = {predict_x}')
如果之后你需要预测多个样本,只需要把每个样本的特征列表作为子元素放进大列表里就行,比如3个样本的情况:
x_multiple = [ [2.0, 2.4, ...], # 第一个样本的10个特征 [1.8, 2.1, ...], # 第二个样本 [3.0, 3.2, ...] # 第三个样本 ] predictions = linear.predict(x_multiple)
这样就能得到对应数量的预测结果啦~
备注:内容来源于stack exchange,提问作者Mohammad Hosein Mohaghegh
相关产品推荐
相关产品推荐

