Мне нужно ограничить мою потерю, чтобы предсказание всегда было положительным. Так у меня есть:scipy минимизировать функцию ограничения неравенства
x = [1.0,0.64,0.36,0.3,0.2]
y = [1.0,0.5,0.4,-0.1,-0.2]
alpha = 0
def loss(w, x, y, alpha):
loss = 0.0
for y_i,x_i in zip(y,x):
loss += ((y_i - np.dot(w,x_i)) ** 2)
return loss + alpha * math.sqrt(np.dot(w,w))
res = minimize(loss_new_scipy, 0.0, args=(x, y, alpha))
Теперь я хочу, чтобы добавить ограничения, но я нашел в основном ограничения, что х находится между границами, а не np.dot(w,x)>= 0
Как бы такое ограничение выглядит?
EDIT: Я хочу использовать параметр ограничения в функции scipy.optimize.minimize, так что я думаю, что это должно выглядеть как-то так:
def con(w,x):
loss = 0.0
for i_x in x:
loss += (np.dot(w, i_x))
return loss
cons = ({'type': 'ineq', 'fun': con})
res = minimize(loss_new_scipy, 0.0, args=(x, y, alpha), constraints=cons)
также я снял второе ограничение для простоты
EDIT2: Я изменил свою проблему на следующее: ограничение w * x должно быть больше 1, а также изменить цели на все негативы. Я также изменил арг, поэтому он работает в настоящее время:
x = np.array([1.0,0.64,0.36,0.3,0.2])
y = [-1.0,-0.5,-0.4,-0.1,-0.2]
alpha = 0
def con(w,x,y,alpha):
print np.array(w*x)
return np.array((w*x)-1).sum()
cons = ({'type': 'ineq', 'fun': con,'args':(x,y,alpha)})
def loss_new_scipy(w, x, y, alpha):
loss = 0.0
for y_i,x_i in zip(y,x):
loss += ((y_i - np.dot(w,x_i)) ** 2)
return loss + alpha * math.sqrt(np.dot(w,w))
res = minimize(loss_new_scipy, np.array([1.0]), args=(x, y, alpha),constraints=cons)
print res
Но, к сожалению, результат для W 2.0, который на самом деле является положительным и выглядит как ограничение помогло, так как он находится далеко от установки функции для целей , но предсказания ш * й не все выше 1,0
EDIT3: я просто поняли, что сумма моих предсказаний - 1 равно 0, но я хочу, чтобы каждое предсказание должно быть больше 1,0 Так с ш = 2,0,
w*x = [ 2.00000001 1.28000001 0.72 0.6 0.4 ]
и
(w*x) - 1 = [ 1.00000001 0.28000001 -0.28 -0.4 -0.6 ]
, сумма которых равна 0,0, но я хочу, чтобы все предсказания w*x
быть больше, чем 1,0, так что все 5 значений в w*x
должно быть не менее 1,0