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ù),噪聲):


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())
這有點(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())


在同樣數(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的線性回歸使用:

提取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è)值:

預(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:])

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è)值。
由此可知results.params為coef值,results.bse為std err值。
工程師必備
- 項(xiàng)目客服
- 培訓(xùn)客服
- 平臺(tái)客服
TOP




















