为什么scikit-learn多元回归方法输入numpy数组时会触发报错?
报错原因
scikit-learn中所有模型的fit方法对输入特征矩阵X的格式有统一要求:X的形状必须为(样本数量, 特征数量),第一维对应样本数,第二维对应每个样本的特征数。
你当前构造的X形状是(2, 36),系统会判定为只有2个样本,每个样本含36个特征,但你的目标变量y有36个样本,样本数不匹配就触发了该报错。
修复方案
只需要调整特征矩阵X的构造方式,把两个一维特征数组按列拼接,得到形状为(36, 2)的输入矩阵即可,有两种常用实现方式:
方案1:使用np.column_stack按列拼接
import numpy as np from sklearn import linear_model x1 = [ 790, 1160, 929, 865, 1140, 929, 1109, 1365, 1112, 1150, 980, 990, 1112, 1252, 1326, 1330, 1365, 1280, 1119, 1328, 1584, 1428, 1365, 1415, 1415, 1465, 1490, 1725, 1523, 1705, 1605, 1746, 1235, 1390, 1405, 1395] x2 = [1000, 1200, 1000, 900, 1500, 1000, 1400, 1500, 1500, 1600, 1100, 1300, 1000, 1600, 1600, 1600, 1600, 2200, 1600, 2000, 1600, 2000, 2100, 1600, 2000, 1500, 2000, 2000, 1600, 2000, 2100, 2000, 1600, 1600, 1600, 2500] y = np.array([ 99, 95, 95, 90, 105, 105, 90, 92, 98, 99, 99, 101, 99, 94, 97, 97, 99, 104, 104, 105, 94, 99, 99, 99, 99, 102, 104, 114, 109, 114, 115, 117, 104, 108, 109, 120]) # 按列拼接两个特征数组 X = np.column_stack([x1, x2]) regr = linear_model.LinearRegression() regr.fit(X, y) # 测试预测 predictedCO2 = regr.predict([[3300, 1300]])
方案2:对原有构造的X做转置
你原来构造的X = np.array([x1, x2])是按行拼接,转置后就可以得到符合要求的形状:
X = np.array([x1, x2]).T
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

