13

CVXOPT qp ソルバーを使用して、サポート ベクター マシンのラグランジュ乗数を計算しようとしています。

def svm(X, Y, c):
      m = len(X)
      P = matrix(np.dot(Y, Y.T) * np.dot(X, X.T))
      q = matrix(np.ones(m) * -1)
      g1 = np.asarray(np.diag(np.ones(m) * -1))
      g2 = np.asarray(np.diag(np.ones(m)))
      G = matrix(np.append(g1, g2, axis=0))
      h = matrix(np.append(np.zeros(m), (np.ones(m) * c), axis =0))
      A = np.reshape((Y.T), (1,m))
      b = matrix([0])

      print (A).shape

      A = matrix(A)

      sol = solvers.qp(P, q, G, h, A, b)
      print sol

Xこれは1000 X 2行列でY、同じ数のラベルがあります。ソルバーは次のエラーをスローします。 $ python svm.py (1, 1000) Traceback (most recent call last): File "svm.py", line 35, in <module> svm(X, Y, 50) File "svm.py", line 29, in svm sol = solvers.qp(P, q, G, h, A, b) File "/usr/local/lib/python2.7/site-packages/cvxopt/coneprog.py", line 4468, in qp return coneqp(P, q, G, h, None, A, b, initvals, options = options) File "/usr/local/lib/python2.7/site-packages/cvxopt/coneprog.py", line 1914, in coneqp %q.size[0]) TypeError: 'A' must be a 'd' matrix with 1000 columns

A の形状を印刷しました。これ(1,1000)は、ベクトルから再形成した後の行列です。このエラーの正確な原因は何ですか?

4

3 に答える 3

15

行列要素も浮動小数点型でなければなりません。したがって、エラーはA = A.astype('float')キャストするために使用して削除されます。

于 2016-04-08T23:41:02.467 に答える