Python Sklearn线性回归不可调用

时间:2018-01-16 22:07:51

标签: python numpy scikit-learn regression sklearn-pandas

我正在使用pandas和sklearn

实现简单的线性回归和多元线性回归

我的代码如下

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)

这样可以正常工作,但是对于多元线性回归,由于某些原因它在sklearn的线性回归结束时不能使用(),当我用括号使用它时会出现以下错误:

TypeError: 'LinearRegression' object is not callable

我的多元线性回归代码如下:

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'])

我想知道我做错了什么。另外,如果我最后不使用(),我无法在线性回归方法中打印各种属性。 e.g。

print(sklearn_mlr.coef_)

给我错误:

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

3 个答案:

答案 0 :(得分:1)

鉴于此片段:

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'])

您的问题是您尚未初始化LinearRegression类的实例。您需要像在第一个示例中那样初始化它。然后您可以使用fit方法,如下所示:

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'])

一旦实例适合,它将具有文档中列出的属性(例如.coef_)。因为它是你试图访问LogisticRegression类本身的.coef

答案 1 :(得分:0)

lr是您示例中的一个类。

您需要对其进行初始化,然后从实例中调用.fit(X,df['mpg'])

答案 2 :(得分:0)

为什么不按如下方式导入:

from sklearn.linear_model import LinearRegression

在我看来,它比你做得更干净。然后你就可以这样使用它:

lr = LinearRegression()