CVXOPT QP求解:类型错误:“A”必须是“d”与1000列
我试图使用CVXOPT QP求解器来计算拉格朗日乘子的支持向量机CVXOPT QP求解:类型错误:“A”必须是“d”与1000列
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)
矩阵。究竟是什么导致了这个错误?
您的矩阵元素也必须是double类型的。所以只需使用A = A.astype(double)来施放它。
非常感谢! –
错误 - "TypeError: 'A' must be a 'd' matrix with 1000 columns:"
有两个条件,即:
- 如果类型代码是不等于 '
d
' - 如果
A.size[1] != c.size[0]
。
检查这些条件。
试着打印A.typecode,它是'd'吗? –
如果不是,在将其转换为矩阵之前,尝试使用A = A.astype(double)。 –
就是这样。类型是**'我'**。在矩阵(A,(1,m),'d')'中添加了tc变量,它就起作用了!如果你想添加它作为答案,我可以接受它! – Utumbu