Python Sklearn线性回归不可调用

Posted

技术标签:

【中文标题】Python Sklearn线性回归不可调用【英文标题】:Python Sklearn linear regression not callable 【发布时间】:2018-06-25 17:09:45 【问题描述】:

我正在使用 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'])

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

print(sklearn_mlr.coef_)

给我错误:

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

【问题讨论】:

我无法重现此内容。我怀疑在某处,您已经完成了linear_model.LinearRegression = linear_model.LinearRegression(),这重现此错误... 您了解() 的工作原理吗?为什么上面的代码有效? 【参考方案1】:

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

from sklearn.linear_model import LinearRegression

在我看来,它比你所做的要干净得多。然后你可以这样使用它:

lr = LinearRegression()

【讨论】:

【参考方案2】:

鉴于这个 sn-p:

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

【讨论】:

【参考方案3】:

lr 是您示例中的一个类。

你需要初始化它,然后从实例调用.fit(X,df['mpg'])

【讨论】:

以上是关于Python Sklearn线性回归不可调用的主要内容,如果未能解决你的问题,请参考以下文章

sklearn实现一元线性回归 Python机器学习系列

Python数模笔记-Sklearn线性回归

03_有监督学习--简单线性回归模型(调用 sklearn 库代码实现)

Python使用sklearn构建广义线性模型:泊松回归(Poisson regression)实战

机器学习之回归模型-调用sklearn库求解线性回归

Python使用sklearn构建广义线性模型:Tweedie回归(Tweedie regression)实战