You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性回归训练报错:要求2D数组却传入1D?求原因及解决方法

线性回归fit方法报错:1D Series 不符合2D数组要求

先看你提供的代码:

my_train_list = {"area": [1000,2000,3000,4000,5000], "price":[1000000,2000000,3000000,4000000,5000000]}

my_df = pd.DataFrame(my_train_list)

my_x = my_df['area']
my_y = my_df.price

my_lin_pre = linear_model.LinearRegression()
my_lin_pre.fit([my_x], my_y)

报错原因

scikit-learn的LinearRegression.fit()方法对输入的特征数据X有严格要求:必须是2D数组结构(形状为(样本数量, 特征数量))。哪怕只有1个特征,也得保持这种2D格式。

你这里的my_x是Pandas Series,属于1D结构(形状为(5,)),就算用[my_x]包装,得到的是包含Series的列表,本质还是不符合方法要求的输入格式,所以会触发“需要传入2D数组”的报错。

解决方法

以下是几种靠谱的解决方式:

  • 方法1:用双括号取列,直接得到2D DataFrame
    取列时用双括号[['area']],返回的是单列DataFrame(天然是2D结构),直接满足fit方法要求:

    my_x = my_df[['area']]
    my_lin_pre.fit(my_x, my_y)
    
  • 方法2:把Series转成2D数组
    用Pandas的to_frame()方法把Series转为单列DataFrame,或者用values.reshape(-1,1)转成numpy的2D数组:

    # 方式A:转成DataFrame
    my_x = my_df['area'].to_frame()
    # 方式B:转成numpy 2D数组
    my_x = my_df['area'].values.reshape(-1, 1)
    
  • 方法3:用numpy手动转换形状
    先把Series转成numpy数组,再用reshape调整为2D:

    import numpy as np
    my_x = np.array(my_df['area']).reshape(-1, 1)
    

内容的提问来源于stack exchange,提问作者Aadil Rafiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:06:27