(最初の質問、何らかの形で良くない場合は編集します。投稿前に調査を行いました)
x*C=y (x と y はデータセット、C は行列) を予測したいのですが、C の行の合計が 1 になり、その要素が 0 と 1 の間にあるという制約があります。
制約されるのは列ではなく行であるため、単純に線形回帰を使用することはできず、エラー関数を書き留める必要があります。私はこれをMatlabで成功させたので、データやメソッドではなく、おそらく私のコードにあることがわかっています。
私のコード(以下)は、これら2つのエラーのいずれかを返します(ランダムな初期推測に応じて、私は推測します):
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})