线性回归训练报错:要求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
相关产品推荐
相关产品推荐

