0
votes
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.

1
You're making us guess where the error happens. Please update the question to include the full error traceback message. - John Gordon

1 Answers

0
votes

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()