Simple linear regression with constraint(带约束的简单线性回归)
本文介绍了带约束的简单线性回归的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经开发了一个算法来遍历15个变量,并为每个变量生成一个简单的OLS。然后,算法再循环11次,以产生相同的15个OLS回归,但X变量的滞后每次增加一个。我选择r^2最高的自变量,并对3、4或5个变量使用最佳滞后
即
Y_t+1 - Y_t = B ( X_t+k - X_t) + e
我的数据集如下所示:
Regression = pd.DataFrame(np.random.randint(low=0, high=10, size=(100, 6)),
columns=['Y', 'X1', 'X2', 'X3', 'X4','X5'])
我到目前为止拟合的OLS回归使用以下代码:
Y = Regression['Y']
X = Regression[['X1','X2','X3']]
Model = sm.OLS(Y,X).fit()
predictions = Model.predict(X)
Model.summary()
问题是,使用OLS,您可以获得负系数(我确实是这样做的)。如果能通过以下内容帮助约束此模型,我将不胜感激:
sum(B_i) = 1
B_i >= 0
推荐答案
该功能运行良好
from scipy.optimize import minimize
# Define the Model
model = lambda b, X: b[0] * X[:,0] + b[1] * X[:,1] + b[2] * X[:,2]
# The objective Function to minimize (least-squares regression)
obj = lambda b, Y, X: np.sum(np.abs(Y-model(b, X))**2)
# Bounds: b[0], b[1], b[2] >= 0
bnds = [(0, None), (0, None), (0, None)]
# Constraint: b[0] + b[1] + b[2] - 1 = 0
cons = [{"type": "eq", "fun": lambda b: b[0]+b[1]+b[2] - 1}]
# Initial guess for b[1], b[2], b[3]:
xinit = np.array([0, 0, 1])
res = minimize(obj, args=(Y, X), x0=xinit, bounds=bnds, constraints=cons)
print(f"b1={res.x[0]}, b2={res.x[1]}, b3={res.x[2]}")
#Save the coefficients for further analysis on goodness of fit
beta1 = res.x[0]
beta2 = res.x[1]
beta3 = res.x[2]
这篇关于带约束的简单线性回归的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:带约束的简单线性回归
基础教程推荐
猜你喜欢
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
