statsmodels中的線性回歸(OLS)

摘要:statsmodels是python專門關(guān)于統(tǒng)計(jì)學(xué)的第三方庫,本文只涉及普通最小二乘策略下的線性回歸內(nèi)容。并與scikit-learn進(jìn)行一點(diǎn)對(duì)比。

00 導(dǎo)入所需庫

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

01 普通線性回歸(OLS)

線性回歸的數(shù)學(xué)模型(常數(shù)項(xiàng) ,系數(shù),噪聲):

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這有點(diǎn)問題,沒有常數(shù)項(xiàng)。如果要帶上常數(shù)項(xiàng),需要在特征集中插入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

在同樣數(shù)據(jù)的基礎(chǔ)上,使用sklearn,結(jié)果一樣,但方法略有區(qū)別:

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

這有點(diǎn)問題,coef_多了一個(gè)0。其實(shí)這個(gè)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

總結(jié)sklearn和statsmodels的區(qū)別,可以發(fā)現(xiàn):

sklear的線性回歸使用:

statsmodels中的線性回歸(OLS)的圖6

statsmodels的線性回歸使用:

statsmodels中的線性回歸(OLS)的圖7

提取statsmodels的各類參數(shù):

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

預(yù)測(cè)值:

statsmodels中的線性回歸(OLS)的圖8

預(yù)測(cè)值同樣可以用sklearn實(shí)現(xiàn):

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為實(shí)際值減去預(yù)測(cè)值。

statsmodels中的線性回歸(OLS)的圖10由此可知results.params為coef值,results.bse為std err值。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺(tái)客服

TOP

2
1