最近忙于毕设的事情,有很长一段时间没有写笔记了,近段时间学习上需要用到一些回归模型的知识,此条笔记用来记录学习笔记,声明:参考视频来源于李进华博士,大家可以去搜他的视频,讲解深入浅出,非常到位。



工具:Python3编译器(Jupyter Notebook)、对于统计模块包(如下图)



引言:最小二乘法:通过最小化误差的平方寻找数据的最佳函数匹配
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。优点:实现简单,计算简单。缺点:能拟合非线性数据。

import pandas as pd
import numpy as np
import statsmodels.api as sm #实现二元当中统计模型,如:最小二乘、极大似然法等的实现
import statsmodels.stats.api as sms #实现t检验、卡方检验等
import statsmodels.formula.api as smr
import scipy

因为暂时没有案例数据,因此需要自己生成随机数据进行相关分析:

np.random.seed(42)#设置随机数的种子
x1 = np.random.normal(0,0.4,100)#生成符合正态分布的随机数(均值,标准差,生成随机数的个数)
x2 = np.random.normal(0,0.6,100)
x3 = np.random.normal(0,0.2,100)
eps = np.random.normal(0,0.05,100)#生成噪声数据
X = np.c_[x1,x2,x3]#调用numpy的c_函数生成自变量的矩阵(按照列生成)
beta = [0.1,0.2,0.7]#设置模拟系数的值
Y = np.dot(X,beta) + eps#点乘运算 加上噪声数据
X_model = sm.add_constant(X)#给自变量矩阵加上一列值为1的列,便于估计多元线性回归模型的截距,便于参数估计的矩阵计算

数据准备好了,后续就可以开始“调包”了:

model = sm.OLS(Y,X_model)#普通最小二乘
results = model.fit()#通过拟合进行参数估计(估计出回归系数,从而计算一些统计量)
results.summary()

此处采取的是比较基本的普通最小二乘法对数据进行拟合,拟合的结果如下:

python实现多元回归 python多元回归分类变量_python


回归系数计算:

#代公式
beta_hat = np.dot(np.dot(np.linalg.inv(np.dot(X_model.T,X_model)),X_model.T),Y)#np.linalg.inv()矩阵求逆
print('回归系数:',np.round(beta_hat,4))#四舍五入取小数点后四位
print('回归方程:Y_hat=%0.4f+%0.4f*x1+%0.4f*x2+%0.4f*x3' %(beta_hat[0],beta_hat[1],beta_hat[2],beta_hat[3]))

运行结果:

python实现多元回归 python多元回归分类变量_python_02

后续不断补充…