2

(最初の質問、何らかの形で良くない場合は編集します。投稿前に調査を行いました)

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})
4

1 に答える 1