Python 使用matplotlib绘制sklearn线性回归输出

Python 使用matplotlib绘制sklearn线性回归输出,python,pandas,numpy,matplotlib,Python,Pandas,Numpy,Matplotlib,导入文件后,当我使用numpy作为分隔x_值和y_值时: import pandas as pd from sklearn import linear_model from matplotlib import pyplot import numpy as np #read data dataframe = pd.read_csv('challenge_dataset.txt') dataframe.columns=['Brain','Body'] x_values=np.array(dat

导入文件后,当我使用numpy作为分隔x_值和y_值时:

import pandas as pd
from sklearn import linear_model
from  matplotlib import pyplot 
import numpy as np

#read data
dataframe = pd.read_csv('challenge_dataset.txt')
dataframe.columns=['Brain','Body']
x_values=np.array(dataframe['Brain'],dtype=np.float64).reshape(1,-1)
y_values=np.array(dataframe['Body'],dtype=np.float64).reshape(1,-1)

#train model on data
body_reg = linear_model.LinearRegression()
body_reg.fit(x_values, y_values)
prediction=body_reg.predict(x_values)

print(prediction)
#visualize results
pyplot.scatter(x_values, y_values)
pyplot.plot(x_values,prediction)
pyplot.show()
我得到的图如下图所示,它没有显示最佳拟合线,而且当我打印“预测”值时,它显示的值与“y_值”相同

相反,当我使用以下代码时。我得到了回归线

#read data
dataframe = pd.read_csv('challenge_dataset.txt')
dataframe.columns=['Brain','Body']
x_values=dataframe[['Brain']]
y_values=dataframe[['Body']]

为什么会这样

提前感谢。

期待它的论点

X
:形状的numpy数组或稀疏矩阵
[n_样本,n_特征]

y
:形状的numpy数组
[n个样本,n个目标]

这里有1个“特征”和1个“目标”,因此输入的预期形状将是
(n_samples,1)

而这正是我们的情况

x_values=dataframe[['Brain']]
y_values=dataframe[['Body']]
np.array(dataframe['Brain',dtype=np.float64).重塑(1,-1)
的形状是
(n_samples,)

从数据帧列中选择所需形状的另一个选项是将它们广播到具有新轴的2D阵列

x_values=dataframe['Brain'].values[:,np.newaxis]
y_values=dataframe['Body'].values[:,np.newaxis]
请注意,为了显示一条漂亮的线,您可能需要对x值进行排序

import pandas as pd
from sklearn import linear_model
from  matplotlib import pyplot 
import numpy as np

#read data
x = np.random.rand(25,2)
x[:,1] = 2*x[:,0]+np.random.rand(25)
dataframe = pd.DataFrame(x,columns=['Brain','Body'])


x_values=dataframe['Brain'].values[:,np.newaxis]
y_values=dataframe['Body'].values[:,np.newaxis]

body_reg = linear_model.LinearRegression()
body_reg.fit(x_values, y_values)
prediction=body_reg.predict(np.sort(x_values, axis=0))

pyplot.scatter(x_values, y_values)
pyplot.plot(np.sort(x_values, axis=0),prediction)
pyplot.show()

为什么要这样做
。重塑(1,-1)
x_values=np.array(dataframe['Brain',dtype=np.float64)。重塑(1,-1)
,因为我在一维中获取了列
Brain
的值。我知道这很奇怪,我本可以把它放在二维空间,但我只是在做实验。我的意思是如果你离开
,会发生什么。重塑(1,-1)
?它会抛出这个错误。ValueError:应为2D数组,而应为1D数组: