最小二乘法(OLS)python 实践

该文介绍了如何使用Python的statsmodels库实现简单线性和高次非线性回归模型。首先展示了一个线性回归的例子,然后是一个包含x和x^2项的二次非线性回归模型。代码中包括数据生成、模型构建以及结果可视化。
摘要由CSDN通过智能技术生成

参考链接:

1,基本原理:https://zhuanlan.zhihu.com/p/149280941
2,python实现:https://zhuanlan.zhihu.com/p/22692029

实现结果

线性回归:

# --coding:utf-8--
# 简单线性回归demo
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

sample_num=100
x=np.linspace(0,10,sample_num)
X=sm.add_constant(x)

beta = np.array([1,100]) # beta0,beta1的真值分别为1,10
e = np.random.normal(size=sample_num) #0-1正太分布误差项
y=np.dot(X,beta) + e # 反应项

model = sm.OLS(y,X) #送入OLS库中进行建模
result = model.fit()#输出结果
print(result.params)
print(result.summary())

# 调用回归系数
y_fitted = result.fittedvalues
fig,ax = plt.subplots(figsize=(8,6))
ax.plot(x,y,'or',label='ori')
ax.plot(x,y_fitted,'-b',label='fitted')
ax.legend(loc='best')
plt.show()

请添加图片描述

非线性回归

# --coding:utf-8--
# 简单高次模型回归
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

# 拟合高次x,y关系,有一个条件是需要必须知道这个关系中所有次方的次数。
# 本次demo中假设 y=1+0.1x+10x^2,已知  x,x,x^2,求拟合1,0.1,10

sampleNum=100
x=np.linspace(0,10,sampleNum) #x依然取值0-10,100个

X=np.column_stack((x,x**2))
X=sm.add_constant(X) #构成三列[1,x,x^2] X
e=np.random.normal(size=sampleNum)
beta = np.array([2,0.3,20])
Y=np.dot(X,beta) + e #真实值Y

model=sm.OLS(Y,X)
results=model.fit()
print(results.params)
print(results.summary())

Y_fited=results.fittedvalues
fig,ax=plt.subplots(figsize=(8,6))
ax.plot(x,Y,'or',label='ori')
ax.plot(x,Y_fited,'-b',label='fitted')
ax.legend(loc='best')
plt.show()

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值