前言:回归与拟合有着包含的关系,拟合是在已知y与x的函数关系的条件下求解系数;而回归是在不确定的情况下先写出近似函数,再采用拟合求解出函数系数,但需要反过来对回归模型的可信度进行检验,所以可以说是回归包含了拟合。
参考书籍:《python数学建模算法与应用》 司守奎 孙玺菁 (强烈推荐!)
具体代码书上有写我就没有再敲出来
1、线性回归模型
库:statsmodels.api
statsmodels提供了两种求解线性回归模型的方法,一种是公式法,一种是数组法。
详解用 statsmodels 进行回归分析_Python中文社区的博客-CSDN博客
(1)基于公式的模式
re=sm.formula.ols(formula=”parameter1~parameter2”,data).fit()
formula=”parameter1~parameter2” 的意思是让用户自定义函数模板,其中parameter1是因变量,parameter2是自变量。对于二次方,写成I(X**2)的形式
data是DataFrame或者字典格式的数据
(2)基于数组的模式
该方法只能用于线性回归,对多项式和非线性等回归不适用
数组模式需要给自变量观测值矩阵再添加一列全部元素为1得到的增广矩阵
X=sm.add_constant(x)
re=sm.OLS(y,X).fit()
两种方法查看结果均为re.summary(),除了其中的系数外还需要注意R-squared
、Prob(F-statistic)
。
步骤:
1、画出散点图,给出大致函数关系。(考虑是否需要去掉野值)
2、按照拟合的方法,求出系数
3、对函数的显著性进行检验(F值)
4、对拟合的结果进行检验(SSE,R^2)——残差分布图
置信区间设置:
pre=re.get_prediction(data)
df=pre.summary_frame(alpha=0.05)
dfv=df.values;low,upp=dfv[:,4:].T
r=(upp-low)/2;num=np.arange(1,len(x)+1)
plt.errorbar(num,re.sid,r,fmt=”o”);plt.show()
2、多项式回归(非线性回归)
只能使用公式法,解题步骤和线性回归一致
3、逐步回归
类似于主成分分析,将对因变量影响显著的变量选入模型,不显著的不再考虑,逐步回归的每一步都要进行F检验(t检验)。
逐步回归中的后退法:
步骤:(t检验和F检验等价)
1、将全部变量作为自变量求出一个回归方程
2、选出未通过t检验的自变量中t的绝对值最小的一个,剔除
3、剩余的自变量再求回归方程
4、重复步骤2、3直到所有变量都通过t检验