gpt4 book ai didi

python - 如何在Python中向回归添加 "greater than 0 and sums to 1"约束?

转载 作者:行者123 更新时间:2023-12-01 23:35:48 25 4
gpt4 key购买 nike

我正在使用 statsmodels(对其他 python 选项开放)来运行一些线性回归。我的问题是我需要回归没有截距并将系数限制在 (0,1) 范围内并且总和为 1。

我尝试了这样的方法(至少为 1):

from statsmodels.formula.api import glm
import pandas as pd

df = pd.DataFrame({'revised_guess':[0.6], "self":[0.55], "alter_1":[0.45], "alter_2":[0.2],"alter_3":[0.8]})
mod = glm("revised_guess ~ self + alter_1 + alter_2 + alter_3 - 1", data=df)
res = mod.fit_constrained(["self + alter_1 + alter_2 + alter_3 = 1"],
start_params=[0.25,0.25,0.25,0.25])
res.summary()

但仍在努力执行“非负”系数约束。

最佳答案

您可以NNLS(非负最小二乘法),它是在 scipy.h 下定义的。它基于FORTRAN非负最小二乘求解器。你不能给它添加约束。因此,在输入方程中添加另一个方程,使得 x1+x2+x3=1

import numpy as np
from scipy.optimize import nnls
##Define the input vectors
A = np.array([[1., 2., 5.],
[5., 6., 4.],
[1., 1., 1. ]])

b = np.array([4., 7., 2.])

##Caluculate nnls
x, resdiual_norm = nnls(A,b)


##Find the difference
print(np.sum(A*x,1)-b)

现在对该矩阵执行 NNLS,它将返回 x 值和残差。

关于python - 如何在Python中向回归添加 "greater than 0 and sums to 1"约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54895887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com