关于scikit-learn线性回归拟合时维度不匹配报错的原因与解决方法咨询
scikit-learn线性回归拟合时维度不匹配报错的原因与解决方法
我来帮你把这个问题讲明白,先搞懂报错的根源,再看具体的修复方案~
为什么scikit-learn期望X是2D数组?
其实这是scikit-learn API的统一设计原则导致的:它的所有监督学习模型都假设输入的特征矩阵X是**(样本数量, 特征数量)**的2D格式。
举个例子:如果你要预测房价,可能会用面积、房龄、房间数这3个特征,那X的形状应该是(n个房子, 3个特征)的2D数组。哪怕你只有1个特征(比如只用面积预测房价),模型也希望你保持这个统一的格式——也就是(n个样本, 1个特征)的2D数组,这样接口逻辑不用为单特征、多特征做区分,能避免很多潜在的混乱。
你的原始X是np.array([1,2,3,4,5]),它的形状是(5,)的1D数组,模型会误判这是“1个样本,5个特征”,和你的真实需求(5个样本,1个特征)完全不匹配,所以就抛出了维度错误。
正确的修复方法
有三种简单的方式可以解决这个问题,选你习惯的就行:
方法1:创建数组时直接定义为2D格式
在初始化X的时候,就把每个样本放在单独的列表里,这样numpy会自动生成(5,1)的2D数组:
X = np.array([[1], [2], [3], [4], [5]])
方法2:用reshape(-1, 1)修改形状
reshape(-1,1)里的-1是让numpy自动计算这个维度的长度(这里就是5),1代表我们要1列。代码如下:
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
方法3:用np.expand_dims扩展维度
这个方法和reshape效果一样,通过指定axis=1来在列的方向上增加一个维度:
X = np.expand_dims(np.array([1, 2, 3, 4, 5]), axis=1)
修复后的完整代码示例
import numpy as np from sklearn.linear_model import LinearRegression # 任选一种方法处理X的形状 X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1) y = np.array([2, 4, 6, 8, 10]) model = LinearRegression() model.fit(X, y) # 现在可以正常拟合啦 # 验证一下X的形状,应该输出(5, 1) print(X.shape)
内容来源于stack exchange
相关产品推荐
相关产品推荐

