x=[1,3,5,6,7,8,9]
y=[4,5,6,9,3,4,6]
def linear_model_main(X_parameters,Y_parameters,predict_value):
# Create linear regression object
regr = linear_model.LinearRegression()
regr.fit(x, y)
predict_outcome = regr.predict(predict_value)
predictions = {}
predictions['intercept'] = regr.intercept
predictions['coefficient'] = regr.coef
predictions['predicted_value'] = predict_outcome
predicted_value = predict_outcome
#return predicted_value
return predictions
predictvalue = 7000
result = linear_model_main(x,y,predictvalue)
print ("Intercept value " , result['intercept'])
print ("coefficient" , result['coefficient'])
print ("Predicted value: ",result['predicted_value'])
I got this error when fit function is called: regr.fit(x, y)
ValueError: Expected 2D array, got 1D array instead: array=[1 3 5 6 7 8 9]. 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.
-
1You're making us guess where the error happens. Please update the question to include the full error traceback message.John Gordon– John Gordon2020年11月11日 04:21:56 +00:00Commented Nov 11, 2020 at 4:21
1 Answer 1
Here is your code corrected:
from sklearn import linear_model
import numpy as np
x=[1,3,5,6,7,8,9]
y=[4,5,6,9,3,4,6]
def linear_model_main(X_parameters,Y_parameters,predict_value):
# Create linear regression object
regr = linear_model.LinearRegression()
regr.fit(np.array(x).reshape(-1,1), np.array(y).reshape(-1,1))
predict_outcome = regr.predict(np.array(predict_value).reshape(-1,1))
predictions = {}
predictions['intercept'] = regr.intercept_
predictions['coefficient'] = regr.coef_
predictions['predicted_value'] = predict_outcome
predicted_value = predict_outcome
#return predicted_value
return predictions
predictvalue = 7000
result = linear_model_main(x,y,predictvalue)
print ("Intercept value " , result['intercept'])
print ("coefficient" , result['coefficient'])
print ("Predicted value: ",result['predicted_value'])
You had a couple of mistakes that I will explain below:
1- First of all, you need to convert the input to NumPy array and instead of having 1 by n array, you need n by 1 array. The error that you got is because of that (that is how scikit-learn models are designed).
2- Second, you missed the underscore at the end of the attribute names like 'intercept_'
3- The value for prediction should be an n by 1 array too.
After fixing these issues here is the result (the dots are the input and the dashed line is the linear model): enter image description here
EDIT: This is the code for the plot:
plt.scatter(x,y)
axes = plt.gca()
x_vals = np.array(axes.get_xlim())
y_vals = result['intercept'][0] + result['coefficient'][0] * x_vals
plt.plot(x_vals, y_vals, '--')
plt.show()
5 Comments
plt.scatter(x,y) and axes = plt.gca() x_vals = np.array(axes.get_xlim()) y_vals = result['intercept'][0] + result['coefficient'][0] * x_vals plt.plot(x_vals, y_vals, '--') plt.show() get_xlim() we get values on the x-axis and then put those values in the line formula to get some point to draw the line.Explore related questions
See similar questions with these tags.