如何在scikit-learn中获取类似于R的回归总结?

76

作为R用户,我也希望能够熟练使用scikit。

创建一个线性回归模型没问题,但似乎找不到一个合理的方式来得到标准的回归输出摘要。

代码示例:

# Linear Regression
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LinearRegression

# Load the diabetes datasets
dataset = datasets.load_diabetes()

# Fit a linear regression model to the data
model = LinearRegression()
model.fit(dataset.data, dataset.target)
print(model)

# Make predictions
expected = dataset.target
predicted = model.predict(dataset.data)

# Summarize the fit of the model
mse = np.mean((predicted-expected)**2)
print model.intercept_, model.coef_, mse, 
print(model.score(dataset.data, dataset.target))

问题:

  • 看起来像 interceptcoef 已经嵌入到模型中,我只需输入print(倒数第二行)即可查看它们。
  • 那么所有其他标准的回归输出,如R ^ 2,调整后的 R ^ 2,p 值等等呢?如果我正确读取了示例,则似乎您需要为每个输出编写一个函数/公式,然后打印它。
  • 所以,线性回归模型没有标准摘要输出吗?
  • 此外,在我的系数输出数组中,没有变量名称与每个系数关联?我只得到数字数组。 有没有一种方法可以打印这些系数,使其附带所属变量的输出?

我的输出结果:

LinearRegression(copy_X=True, fit_intercept=True, normalize=False)
152.133484163 [ -10.01219782 -239.81908937  519.83978679  324.39042769 -792.18416163
  476.74583782  101.04457032  177.06417623  751.27932109   67.62538639] 2859.69039877
0.517749425413

说明:一开始使用了线性回归、岭回归和套索回归。我已经浏览了这些例子。以下是基本OLS的内容。


许多标准的评估指标都可以在sklearn.metrics中找到。 - Fred Foo
6个回答

57

在sklearn中不存在R类型回归摘要报告。主要原因是sklearn用于预测建模/机器学习,评估标准基于之前未见过的数据的性能(例如对于回归预测的r ^2)。

存在一个分类汇总函数 called sklearn.metrics.classification_report 可以计算一些分类模型的(预测)得分类型。

如果需要更经典的统计方法,请查看 statsmodels


14
感谢您指出 statsmodels。然而,缺乏摘要功能的主要原因很奇怪。良好的模型构建需要对模型本身进行一定程度的内省,以至少回答“这是否合理?”的问题。 - Paul Raff

53

我使用:

import sklearn.metrics as metrics
def regression_results(y_true, y_pred):

    # Regression metrics
    explained_variance=metrics.explained_variance_score(y_true, y_pred)
    mean_absolute_error=metrics.mean_absolute_error(y_true, y_pred) 
    mse=metrics.mean_squared_error(y_true, y_pred) 
    mean_squared_log_error=metrics.mean_squared_log_error(y_true, y_pred)
    median_absolute_error=metrics.median_absolute_error(y_true, y_pred)
    r2=metrics.r2_score(y_true, y_pred)

    print('explained_variance: ', round(explained_variance,4))    
    print('mean_squared_log_error: ', round(mean_squared_log_error,4))
    print('r2: ', round(r2,4))
    print('MAE: ', round(mean_absolute_error,4))
    print('MSE: ', round(mse,4))
    print('RMSE: ', round(np.sqrt(mse),4))

只是提醒一下,median_absolute_error没有被打印出来。除此之外,感谢这个好用的函数,我在使用这段代码时注意到了缺失的打印信息。 - Rich

29

statsmodels 包提供了一个相当不错的摘要

from statsmodels.api import OLS
OLS(dataset.target,dataset.data).fit().summary()

12

输入图片描述你可以使用statsmodels来实现

import statsmodels.api as sm
X = sm.add_constant(X.ravel())
results = sm.OLS(y,x).fit()
results.summary()  

results.summary() 将结果组织成三个表格


2

您可以使用以下选项来生成摘要表:

import statsmodels.api as sm

#log_clf = LogisticRegression()

log_clf =sm.Logit(y_train,X_train)

classifier = log_clf.fit()

y_pred = classifier.predict(X_test)

print(classifier.summary2())

-13

在预测后使用model.summary()

# Linear Regression
import numpy as np
from sklearn import datasets
from sklearn.linear_model import LinearRegression

# load the diabetes datasets
dataset = datasets.load_diabetes()

# fit a linear regression model to the data
model = LinearRegression()
model.fit(dataset.data, dataset.target)
print(model)

# make predictions
expected = dataset.target
predicted = model.predict(dataset.data)

# >>>>>>>Print out the statistics<<<<<<<<<<<<<
model.summary()

# summarize the fit of the model
mse = np.mean((predicted-expected)**2)
print model.intercept_, model.coef_, mse, 
print(model.score(dataset.data, dataset.target))

18
在当前版本的Sklearn 0.19.1中,线性回归对象没有这个summary方法/属性。在文档中也找不到它,当我在我的环境中运行它时,会出现错误'LinearRegression' object has no attribute 'summary' - Austin T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接