python3.7解决最小二乘遇到ValueError:Expected 2D array, got 1D array instead: array=[5.].关于reshape和predict

 ̄綄美尐妖づ 提交于 2020-02-25 12:54:31

在用python的LinearRegression做最小二乘时遇到如下错误:

ValueError: Expected 2D array, got 1D array instead:
array=[5.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

翻译过来是:

ValueError:预期为2D数组,改为获取1D数组:
数组= [5.]。
如果数据具有单个功能,则使用array.reshape(-1,1)重整数据;如果包含单个样本,则使用array.reshape(1,-1)重整数据。

也就是需要使用reshape改变原始数组的形状。

下面拿一个简单例子来说明:

#原来的代码
import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression

#目的:建立x与y的最小二乘方程
x=np.array([2,5,8,8,13,15,17,19,21,24])
y=np.array([12,31,45,52,79,85,115,119,135,145])

plt.scatter(x,y) #查看散点图

regression=LinearRegression()
model=regression.fit(x,y) #最小二乘建模

上面的代码报错,于是根据错误提示,修改后代码如下:

#修改后的代码
import numpy as np
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression

#目的:建立x与y的最小二乘方程
x=np.array([2,5,8,8,13,15,17,19,21,24]).reshape(-1,1)
y=np.array([12,31,45,52,79,85,115,119,135,145])

plt.scatter(x,y) #查看散点图

regression=LinearRegression()
model=regression.fit(x,y) #最小二乘建模

也就是在创建x数组后加上 reshape(-1,1)  重整数组。

#原数组
x=np.array([2,5,8,8,13,15,17,19,21,24]);x
Out[12]: array([ 2,  5,  8,  8, 13, 15, 17, 19, 21, 24])


#修改后数组
x=np.array([2,5,8,8,13,15,17,19,21,24]).reshape(-1,1);x
Out[13]: 
array([[ 2],
       [ 5],
       [ 8],
       [ 8],
       [13],
       [15],
       [17],
       [19],
       [21],
       [24]])

可以发现修改后的数组形状改变。下面查看模型属性:

model.score(x,y) #查看R方,拟合优度(值越接近1拟合效果越好)
Out[14]: 0.9883801539342456

#   y = ax + b
model.intercept_ # 查看常数量 b
Out[15]: -1.196804037005876

model.coef_ # 查看x前系数 a
Out[16]: array([6.28763667])

最后我们预测 x=30时,y的值是多少

model.predict([[30]]) # 预测
Out[18]: array([187.43229605])

y=187.43229605,这里不能直接写 model.predict(30),因为从修改后的x数组中可以发现,需传入类似格式值才能进行预测。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!