(第一个问题,如果在某种程度上不好,将进行编辑。在发布之前进行了研究)
我想预测 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})