python - 如何将最小绝对回归实现为线性优化问题
问题描述
我是这方面的初学者,所以我打算从这个公式中实现最小绝对回归作为线性优化问题:
更新代码 到目前为止这是我的代码,但我确定它不好,因为我收到下一个错误:
错误:为索引为 1 的约束 neg_Constraint 生成表达式时规则失败:AttributeError:“NoneType”对象没有属性“getname”
#Settings my variables
nsample = 100
nvariables = 2
beta=np.random.randint(-5,5,size=([nvariables+1,1]));
x0 = np.ones([nsample,1])
x1 = np.random.uniform(0,5,([nsample,nvariables]))
X = np.concatenate([x0,x1], axis = 1)
error = np.random.normal(0,1, (nsample,1))
Y = np.dot(X, beta) + error
#Defining my model
from pyomo.environ import *
opt = SolverFactory("glpk")
from pyomo.environ import SolverFactory
def la_reg_opt(n,m,x,y):
model = AbstractModel()
model.n = n
model.m = m
model.I = RangeSet(1, model.n)
model.J = RangeSet(1, model.m)
model.y = y
model.x = x
model.b = Var(model.J, domain = NonNegativeReals)
model.t = Var(model.I, domain = NonNegativeReals) #Tercera restriccion
def obj_funct(model):
return summation(model.t)
model.OBJ = Objective(rule = obj_funct)
def lower_bound(model,i):
return model.y[i] - sum(model.x[i,j]*model.b[j] for j in model.J) >= -model.t[i]
model.neg_Constraint = Constraint (model.I, rule = lower_bound)
def upper_bound(model,i):
return model.y[i] - sum(model.x[i,j]*model.b[j] for j in model.J) >= model.t[i]
model.pos_Constraint = Constraint (model.I, rule = upper_bound)
instance = model.create_instance()
instance.dual = Suffix(direction=Suffix.IMPORT)
results = opt.solve(instance)
return results
#calling my model
res=la_reg_opt(nsample, nvariables, X, Y)
print (res)
我究竟做错了什么?
比你好多了。
解决方案
推荐阅读
- javascript - 远程表单请求后 Chrome 滚动到页面顶部
- c# - 为什么我的 Raycasting 在 Unity3d 中不起作用?
- java - 从 json 响应转换为对象时,ObjectMapper 获得了额外的空间
- python - Tensorflow 1.x 的 feature_columns 项必须是 _FeatureColumn。给定类型是列表
- python - 如何直接在 python 代码中“使用 -m 运行”而不是像“python -m ...”这样的命令?
- flutter - Flutter Web 的 Shared_Preferences?
- wordpress - 如何从innerBlocks中排除父块?
- c - sscanf_s 没有存储正确的模式
- java - 如何使用 JDK 11 java.net.http.HttpClient 上传文件?
- python-3.x - 权限错误,无法在 jupyter 上导入 PIL.image