import numpy as np from scipy.optimize import linprog # 生成数据 np.random.seed(2021) p = 3 n = 50 X = np.random.normal(size=(n, p)) e = np.random.chisquare(5, size=n) y = X.dot(np.array([1, 2, 3])) + e # 定义线性规划问题 c = np.ones(n) A_ub = np.vstack([np.hstack([X, -np.ones((n, 1))]), np.hstack([-X, -np.ones((n, 1))])]) b_ub = np.hstack([y, -y]) bounds = [(None, None)]*p + [(0, None)] res = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method='simplex') # 计算结果 b_median = res.x[:p] print('中位数回归系数为:', b_median)
时间: 2023-09-24 09:02:29 浏览: 44
这段代码实现了中位数回归,其思路是将线性回归问题转化为线性规划问题,并通过线性规划求解得到中位数回归系数。具体来说,该问题的目标函数为 $\sum_{i=1}^n w_i$, 其中 $w_i$ 是一些权重系数,代表第 $i$ 个样本对目标函数的贡献。同时,为了约束模型,需要加入一些约束条件,比如回归系数的范围等。在这里,我们将回归系数的范围限制在 $(\text{None}, \text{None})$ 和 $(0, \text{None})$ 之间,这个约束在 bounds 中给出。
通过求解该线性规划问题,我们得到的中位数回归系数为 b_median。
相关问题
将下面代码中的A_eq矩阵改为二维import numpy as np from scipy.optimize import linprog opt = linprog(c=[-1], A_eq=np.array([[0.7*0.99, 0.3*0.99*0.7, 0.6*0.4, 0.35], [-1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, -1]]), b_eq=[0.8*100, 0, 0, 0, -1], bounds=[(0, 1)]*3, method="simplex") print("平时作业、出勤率和期末考试所占的比例分别为:", opt.x)
以下是将A_eq矩阵改为二维的代码:
import numpy as np
from scipy.optimize import linprog
A_eq = np.array([[0.7*0.99, 0.3*0.99*0.7, 0.6*0.4],
[0, 0, 0.35],
[-1, 0, 0],
[0, -1, 0],
[0, 0, -1],
[0, 0, 1]])
opt = linprog(c=[-1],
A_eq=A_eq,
b_eq=[0.8*100, -1, 0, 0, 0, 1],
bounds=[(0, 1)]*3,
method="simplex")
print("平时作业、出勤率和期末考试所占的比例分别为:", opt.x)
from turtle import clear import clc as clc from numpy import zeros from scipy.optimize import linprog clc, clear c = [3, -1, -1]; a = [1, -2, 1, 4, -1, -2]; b = [11,-3]; aeq = [-2, 0,1];beq=1; [x, y] = linprog(-c,a,b,aeq,zeros(3,1)) y=-y这个代码哪里错了
这段代码中有两个错误。第一个错误是在调用zeros函数时,应该使用括号而不是方括号。第二个错误是在调用linprog函数时,应该将zeros(3,1)改为zeros((3,1))。
正确的代码应该是:
from turtle import clear
import clc as clc
from numpy import zeros
from scipy.optimize import linprog
clc, clear
c = [3, -1, -1]
a = [[1, -2, 1], [4, -1, -2]]
b = [11, -3]
aeq = [[-2, 0, 1]]
beq = [1]
res = linprog(c, A_ub=a, b_ub=b, A_eq=aeq, b_eq=beq)
y = -res.fun
注意,这里将a和b分别改为了二维列表和一维列表,并将zeros(3,1)改为了zeros((3,1))。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)