statsmodels中的线性回归(OLS)
摘要:statsmodels是python专门关于统计学的第三方库,本文只涉及普通最小二乘策略下的线性回归内容。并与scikit-learn进行一点对比。
00 导入所需库
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
01 普通线性回归(OLS)
线性回归的数学模型(常数项 ,系数,噪声):
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())
这有点问题,没有常数项。如果要带上常数项,需要在特征集中插入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())
在同样数据的基础上,使用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的线性回归使用:
提取statsmodels的各类参数:
results = sm.OLS(y, X).fit()
pedict_=results.predict()
fitted_=results.fittedvalues
resid_=results.resid
params_=results.params
bse_=results.bse
预测值:
预测值同样可以用sklearn实现:
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为实际值减去预测值。
由此可知results.params为coef值,results.bse为std err值。