CVXOPT QP Solver: TypeError: 'A' must be a 'd' matrix with 1000 columns
CVXOPT QP Solver: TypeError: 'A' must be a 'd' matrix with 1000 columns
我正在尝试使用 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)
矩阵。到底是什么导致了这个错误?
您的矩阵元素也必须是浮点类型。因此,通过使用 A = A.astype('float')
强制转换它来消除错误。
错误 - "TypeError: 'A' must be a 'd' matrix with 1000 columns:"
有两个条件,即:
- 如果类型代码不等于“
d
”
- 如果
A.size[1] != c.size[0]
。
检查这些条件。
我已经尝试 A=A.astype(double)
来解决它,但它是无效的,因为 python 不知道什么是 double 或 A 没有方法 astype。
因此
通过使用
A = matrix(A, (1, m), 'd')
真的可以解决这个问题!
要将 CVXOPT 矩阵项转换为浮点数:
A = A * 1.0
我正在尝试使用 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)
矩阵。到底是什么导致了这个错误?
您的矩阵元素也必须是浮点类型。因此,通过使用 A = A.astype('float')
强制转换它来消除错误。
错误 - "TypeError: 'A' must be a 'd' matrix with 1000 columns:"
有两个条件,即:
- 如果类型代码不等于“
d
” - 如果
A.size[1] != c.size[0]
。
检查这些条件。
我已经尝试 A=A.astype(double)
来解决它,但它是无效的,因为 python 不知道什么是 double 或 A 没有方法 astype。
因此
通过使用
A = matrix(A, (1, m), 'd')
真的可以解决这个问题!
要将 CVXOPT 矩阵项转换为浮点数:
A = A * 1.0