statsmodels中的线性回归(OLS)

摘要:statsmodels是python专门关于统计学的第三方库,本文只涉及普通最小二乘策略下的线性回归内容。并与scikit-learn进行一点对比。

00 导入所需库

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

01 普通线性回归(OLS)

线性回归的数学模型(常数项 ,系数,噪声):

statsmodels中的线性回归(OLS)的图1

statsmodels中的线性回归(OLS)的图2

nobs = 100
X = np.random.random((nobs, 2))
beta = [1, 5]
e = np.random.random(nobs)
y = np.dot(X, beta) +e 
results = sm.OLS(y, X).fit()
print(results.summary())

statsmodels中的线性回归(OLS)的图3这有点问题,没有常数项。如果要带上常数项,需要在特征集中插入1;

nobs = 100
X = np.random.random((nobs, 2))
X = sm.add_constant(X)
beta = [3, 1, 5]
e = np.random.random(nobs)
y = np.dot(X, beta)+e
results = sm.OLS(y, X).fit()
print(results.summary())

statsmodels中的线性回归(OLS)的图4

statsmodels中的线性回归(OLS)的图5

在同样数据的基础上,使用sklearn,结果一样,但方法略有区别:

from sklearn import linear_model
regre=linear_model.LinearRegression()
regre.fit(X,y)
regre.coef_
Out[81]: array([0.        , 1.10186004, 5.08228562])

regre.intercept_
Out[82]: 3.384896176645016

这有点问题,coef_多了一个0。其实这个0是可以消除的:

from sklearn import linear_model
regre=linear_model.LinearRegression()
regre.fit(X[:,1:],y)
regre.coef_
Out[84]: array([1.10186004, 5.08228562])

regre.intercept_
Out[85]: 3.3848961766450145

总结sklearn和statsmodels的区别,可以发现:

sklear的线性回归使用:

statsmodels中的线性回归(OLS)的图6

statsmodels的线性回归使用:

statsmodels中的线性回归(OLS)的图7

提取statsmodels的各类参数:

results = sm.OLS(y, X).fit()
pedict_=results.predict()
fitted_=results.fittedvalues
resid_=results.resid
params_=results.params
bse_=results.bse

预测值:

statsmodels中的线性回归(OLS)的图8

预测值同样可以用sklearn实现:

from sklearn import linear_model
regre=linear_model.LinearRegression()
regre.fit(X[:,1:],y)
test_y=regre.predict(X[:,1:])

statsmodels中的线性回归(OLS)的图9

residual=y-pedict_
residual==resid_
Out[93]:
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True])

由此可知results.resid为实际值减去预测值。

statsmodels中的线性回归(OLS)的图10由此可知results.params为coef值,results.bse为std err值。

(1条)
默认 最新
👍
评论 点赞
点赞 2 评论 1 收藏
关注