Python Sklearn linear regression not callable

I am implementing simple linear regression and multiple linear regression using pandas and sklearn

My code is as follows

import pandas as pd
import numpy as np
import scipy.stats
from sklearn import linear_model
from sklearn.metrics import r2_score
df = pd.read_csv("Auto.csv", na_values='?').dropna()

lr = linear_model.LinearRegression()
y = df['mpg']
x = df['displacement']
X = x.values.reshape(-1,1)
sklearn_model = lr.fit(X,y)

This works fine, but for multiple linear regression, for some reason it doesn't work WITH the () at the end of sklearn's linear regression, when I use it with the brackets I get the following error:

TypeError: 'LinearRegression' object is not callable

My multiple linear regression code is as follows:

lr = linear_model.LinearRegression

feature_1 = np.array(df[['displacement']])
feature_2 = np.array(df[['weight']])
feature_1 = feature_1.reshape(len(feature_1),1)
feature_2 = feature_2.reshape(len(feature_2),1)

X = np.hstack([feature_1,feature_2])

sklearn_mlr = lr(X,df['mpg'])

I want to know what I'm doing wrong. Additionally, I'm not able to print the various attributes in the linear regression method if I don't use the () at the end. e.g.

print(sklearn_mlr.coef_)

Gives me the error:

AttributeError: 'LinearRegression' object has no attribute 'coef_'

3 answers

  • answered 2018-01-16 22:20 David Dale

    lr is a class in your example.

    You need to initialize it, and then call .fit(X,df['mpg']) from the instance.

  • answered 2018-01-16 22:22 Grr

    Given this snippet:

    lr = linear_model.LinearRegression
    
    feature_1 = np.array(df[['displacement']])
    feature_2 = np.array(df[['weight']])
    feature_1 = feature_1.reshape(len(feature_1),1)
    feature_2 = feature_2.reshape(len(feature_2),1)
    
    X = np.hstack([feature_1,feature_2])
    
    sklearn_mlr = lr(X,df['mpg'])
    

    Your issue is that you have not initialized an instance of the LinearRegression class. You need to initialize it like you did in the first example. Then you can use the fit method like so:

    lr = linear_model.LinearRegression()
    
    feature_1 = np.array(df[['displacement']])
    feature_2 = np.array(df[['weight']])
    feature_1 = feature_1.reshape(len(feature_1),1)
    feature_2 = feature_2.reshape(len(feature_2),1)
    
    X = np.hstack([feature_1,feature_2])
    
    sklearn_mlr = lr.fit(X,df['mpg'])
    

    Once an instance has been fit it will have the attributes listed in the documentation (e.g. .coef_). As it was you were trying to access .coef of the LogisticRegression class itself.

  • answered 2018-01-16 22:54 Andreas Rau

    Why not import it as follows:

    from sklearn.linear_model import LinearRegression
    

    In my opinion it is much cleaner than what you did. You can then use it like that:

    lr = LinearRegression()