[英]scipy.optimize.minimize fails to converge for matrix input with constraints
(第一個問題,如果以某種方式不好,將進行編輯。在發布之前進行了研究)
我想預測 x*C=y(x 和 y 是數據集,C 是矩陣),約束條件是 C 的行總和為 1,並且其元素介於 0 和 1 之間。
因為受約束的是行,而不是列,所以我不能只使用線性回歸而必須記下誤差函數。 我在 Matlab 中成功地做到了這一點,所以我知道它不在數據或方法中,而可能在我的代碼中。
我的代碼(如下)給出了這兩個錯誤之一(我假設取決於隨機初始猜測):
More than 3*n iterations in LSQ subproblem (Exit mode 3)
Inequality constraints incompatible (Exit mode 4)
任何幫助將不勝感激。 我是 Python 新手,在這方面花了很多時間。
M1=data_2013.shape[1]
M2=data_2015.shape[1]
def error_function(C):
C=C.reshape(M1,M2)
return np.sum(np.sum((np.dot(data_2013,C)-data_2015)**2))
def between_zero_and_one(x):
x=x.reshape(x.size)
return x*(1-x)
def eq_constraint(x):
x=x.reshape(M1,M2)
return x.sum(axis=1) - 1
cons = [{'type': 'ineq', 'fun': between_zero_and_one},
{'type': 'eq', 'fun': eq_constraint}]
C0=np.random.rand(M1,M2)
result=minimize(error_function,C0, constraints=cons, options={'disp': True, 'maxiter': 10000})
Sascha 的回答對我有所幫助 - 問題與cvxpy
很好地融合在一起。
代碼:
M1=x_data.shape[1]
M2=y_data.shape[1]
C=cvx.Variable(x_data.shape[1],y_data.shape[1])
constraints=[0<=C, C<=1, cvx.sum_entries(C,axis=1)==1]
objective=cvx.Minimize(cvx.norm((x_data.values*C)-y_data.values))
prob=cvx.Problem(objective, constraints)
prob.solve()
C_mat=C.value
謝謝,薩沙!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.