CVXOPT QP Solver: TypeError: ‘A’ debe ser una matriz ‘d’ con 1000 columnas

Estoy tratando de usar el solucionador de CVXOPT qp para calcular los multiplicadores de Lagrange para una máquina de vectores de soporte

def svm(X, Y, c): m = len(X) P = matrix(np.dot(Y, YT) * np.dot(X, XT)) 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((YT), (1,m)) b = matrix([0]) print (A).shape A = matrix(A) sol = solvers.qp(P, q, G, h, A, b) print sol 

Aquí X es una matriz 1000 X 2 e Y tiene el mismo número de tags. El solucionador lanza el siguiente error: $ python svm.py (1, 1000) Traceback (most recent call last): File "svm.py", line 35, in 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

(1,1000) la forma de A y es una matriz (1,1000) después de remodelar desde un vector. ¿Qué es exactamente lo que está causando este error?

Sus elementos de matriz deben ser de tipo doble también. Entonces solo usamos A = A.astype (doble) para lanzarlo.

Tengo que intentar A=A.astype(double) para resolverlo, pero no es válido, ya que python no sabe qué es el doble o A no tiene un método como el de astype.

por lo tanto

¡mediante el uso de A = matrix(A, (1, m), 'd') podría resolver este problema!

El error – "TypeError: 'A' must be a 'd' matrix with 1000 columns:" tiene dos condiciones, a saber:

  1. si el código de tipo no es igual a ‘ d
  2. si el A.size[1] != c.size[0] .

Compruebe estas condiciones.