首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中的多元线性回归

Python中的多元线性回归
EN

Stack Overflow用户
提问于 2012-07-14 06:14:41
回答 15查看 211.6K关注 0票数 143

我似乎找不到任何可以进行多重回归的python库。我发现的唯一的东西只做简单的回归。我需要将因变量(y)与几个自变量(x1、x2、x3等)进行回归。

例如,使用以下数据:

代码语言:javascript
复制
print 'y        x1      x2       x3       x4      x5     x6       x7'
for t in texts:
    print "{:>7.1f}{:>10.2f}{:>9.2f}{:>9.2f}{:>10.2f}{:>7.2f}{:>7.2f}{:>9.2f}" /
   .format(t.y,t.x1,t.x2,t.x3,t.x4,t.x5,t.x6,t.x7)

(以上输出:)

代码语言:javascript
复制
      y        x1       x2       x3        x4     x5     x6       x7
   -6.0     -4.95    -5.87    -0.76     14.73   4.02   0.20     0.45
   -5.0     -4.55    -4.52    -0.71     13.74   4.47   0.16     0.50
  -10.0    -10.96   -11.64    -0.98     15.49   4.18   0.19     0.53
   -5.0     -1.08    -3.36     0.75     24.72   4.96   0.16     0.60
   -8.0     -6.52    -7.45    -0.86     16.59   4.29   0.10     0.48
   -3.0     -0.81    -2.36    -0.50     22.44   4.81   0.15     0.53
   -6.0     -7.01    -7.33    -0.33     13.93   4.32   0.21     0.50
   -8.0     -4.46    -7.65    -0.94     11.40   4.43   0.16     0.49
   -8.0    -11.54   -10.03    -1.03     18.18   4.28   0.21     0.55

我如何在python中回归这些,以获得线性回归公式:

Y= a1x1 + a2x2 + a3x3 + a4x4 + a5x5 + a6x6 + +a7x7 + c

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2012-07-14 06:41:50

sklearn.linear_model.LinearRegression将做到这一点:

代码语言:javascript
复制
from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit([[getattr(t, 'x%d' % i) for i in range(1, 8)] for t in texts],
        [t.y for t in texts])

然后,clf.coef_将具有回归系数。

sklearn.linear_model也有类似的接口来对回归进行各种正则化。

票数 110
EN

Stack Overflow用户

发布于 2013-02-20 10:53:40

这是我创建的一个小工作。我用R检查过了,它工作正常。

代码语言:javascript
复制
import numpy as np
import statsmodels.api as sm

y = [1,2,3,4,3,4,5,4,5,5,4,5,4,5,4,5,6,5,4,5,4,3,4]

x = [
     [4,2,3,4,5,4,5,6,7,4,8,9,8,8,6,6,5,5,5,5,5,5,5],
     [4,1,2,3,4,5,6,7,5,8,7,8,7,8,7,8,7,7,7,7,7,6,5],
     [4,1,2,5,6,7,8,9,7,8,7,8,7,7,7,7,7,7,6,6,4,4,4]
     ]

def reg_m(y, x):
    ones = np.ones(len(x[0]))
    X = sm.add_constant(np.column_stack((x[0], ones)))
    for ele in x[1:]:
        X = sm.add_constant(np.column_stack((ele, X)))
    results = sm.OLS(y, X).fit()
    return results

结果:

代码语言:javascript
复制
print reg_m(y, x).summary()

输出:

代码语言:javascript
复制
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.535
Model:                            OLS   Adj. R-squared:                  0.461
Method:                 Least Squares   F-statistic:                     7.281
Date:                Tue, 19 Feb 2013   Prob (F-statistic):            0.00191
Time:                        21:51:28   Log-Likelihood:                -26.025
No. Observations:                  23   AIC:                             60.05
Df Residuals:                      19   BIC:                             64.59
Df Model:                           3                                         
==============================================================================
                 coef    std err          t      P>|t|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1             0.2424      0.139      1.739      0.098        -0.049     0.534
x2             0.2360      0.149      1.587      0.129        -0.075     0.547
x3            -0.0618      0.145     -0.427      0.674        -0.365     0.241
const          1.5704      0.633      2.481      0.023         0.245     2.895

==============================================================================
Omnibus:                        6.904   Durbin-Watson:                   1.905
Prob(Omnibus):                  0.032   Jarque-Bera (JB):                4.708
Skew:                          -0.849   Prob(JB):                       0.0950
Kurtosis:                       4.426   Cond. No.                         38.6

pandas提供了一种运行OLS的便捷方法,如以下答案所示:

Run an OLS regression with Pandas Data Frame

票数 64
EN

Stack Overflow用户

发布于 2015-10-28 10:02:22

只是为了澄清,你给出的例子是多元线性回归,而不是多元线性回归引用。Difference

简单线性回归(

)是指单个标量预测变量x和单个标量响应变量y的最简单情况。扩展到多个和/或向量值预测变量(用大写X表示)称为多元线性回归,也称为多变量线性回归。几乎所有现实世界的回归模型都涉及多个预测器,线性回归的基本描述通常是用多元回归模型来表述的。但是,请注意,在这些情况下,响应变量y仍然是标量。另一个术语多元线性回归指的是y是向量的情况,即与一般线性回归相同。多元线性回归和多元线性回归之间的区别应该得到重视,因为它在文献中造成了许多混淆和误解。

简而言之:

  • 多元线性回归:响应y是一个向量线性回归:响应y是一个向量。

(另一个source。)

票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11479064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档