0
scipy.linprogを使用してL1回帰を解くことを試みていますが、 | AX-B |scipy.linprogを使用してL1回帰を解くget ValueError:入力配列を形状(20,1)から形状(20)にブロードキャストできませんでした。
import numpy as np
from sklearn import datasets
from scipy.optimize import linprog
def generate_dataset(n, d):
A, b, coef = datasets.make_regression(n_samples=n,
n_features=d,
n_informative=d,
noise=10,
coef=True,
random_state=0)
return A, b, coef
def solver(A, b):
n = len(A)
m = len(A[0])
c = np.vstack((np.zeros((m, 1)), np.ones((n, 1))))
A_ = np.vstack((np.hstack((A, -np.eye(n))), np.hstack((-A, -np.eye(n)))))
b_ = np.vstack((b, -b))
res = linprog(c, A_ub=A_, b_ub=b_)
return res
A, b, coef = generate_dataset(10, 10)
res = solver(A, b)
print(res)
print(coef)
generate_dataset機能がランダムに10の機能を備えた10個のサンプルのデータセットを生成し、その後、私は分を解決しよう。これは、線形計画法を用いて絶対偏差回帰を最小にするという単純な問題である。しかし、エラーが発生します。 エラーはValueError: could not broadcast input array from shape (20,1) into shape (20)
です。 私はいくつかの行列の次元に何か間違っている必要がありますが、私はそれを把握することはできないと思う。
を? 'linprog'呼び出しでは?その関数への3つの入力のうちの「形状」は何ですか? – hpaulj
なぜ 'c'は(m + n、1)配列として構成されていますか?なぜ(m + n、)ではないのですか? – hpaulj
他のオプティマイザに切り替えることを検討してください。 linprogは多くの喜びをもたらさないでしょう(あなたの訂正された例は倍増した次元では失敗します)。 GLPK、CBC、cvxpyやパルプのような優れたモデリングツールのようなLPソルバーははるかに優れています。あなたのデータがそれほど大きくない場合は、CobylaまたはSLSQPでscipy.optimize.minimizeを使用することもできます。 – sascha