我将找到软边距SVM的原始形式和对偶形式的解决方案,我需要在Python中解决Quadprog 这是训练数据集
Class 1: [1,6], [1,10], [4,11]
Class 2: [5,2], [7,6], [10,4]
我在Matlab中有一个示例,但我尝试转换为Python代码,但没有用。
Matlab方程:
Minimize L_d (α)=0.5α^t Hα + f^t α
Constraint: Aα ≤ a and Bα = b
我计算了H,f,A,a,B和b
H = [[ 37. 61. 70. -17. -43. -34.]
[ 61. 101. 114. -25. -67. -50.]
[ 70. 114. 137. -42. -94. -84.]
[-17. -25. -42. 29. 47. 58.]
[-43. -67. -94. 47. 85. 94.]
[-34. -50. -84. 58. 94. 116.]]
f= [[-1.]
[-1.]
[-1.]
[-1.]
[-1.]
[-1.]]
A = [[-1. -0. -0. -0. -0. -0.]
[-0. -1. -0. -0. -0. -0.]
[-0. -0. -1. -0. -0. -0.]
[-0. -0. -0. -1. -0. -0.]
[-0. -0. -0. -0. -1. -0.]
[-0. -0. -0. -0. -0. -1.]]
a = b = [[0.]
[0.]
[0.]
[0.]
[0.]
[0.]]
B= [[ 1. 1. 1. -1. -1. -1.]
[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]]
我应用了Matlab
quadprog α=quadprog(H,f,A,a,B,b) and got the result
然后我尝试从Quadprog库中应用python函数
solve_qp(G, a, C=None, b=None, meq, factorized)
在Quadprog库中
Minimize 1/2 x^T G x - a^T x
Subject to C.T x >= b
我假设G〜H(在matlab中),f〜-a,b〜-1.b(在matlab中),那么C值是多少?是C〜-A(在MATLAB中) 那就是双重形式? 以及如何解析原始形式?
这是我的python代码
x = matrix('1.0 6.0;1.0 10.0;4.0 11.0;5.0 2.0;7.0 6.0;10.0 4.0')
z = matrix('1.0;1.0;1.0;-1.0;-1.0;-1.0')
a1 = matmul(x, x.T)
b1 = matmul(z, z.T)
H = multiply(a1, b1)
a = zeros(6).reshape(6,) # a=zeros --> hard margin??
b = zeros(6).reshape(6,)
f = ones((6,))
A= eye(6,)
print ("QP Solution ", quadprog.solve_qp(H, a, A, b))
此代码显示以下错误:
ValueError: matrix G is not positive definite
矩阵G来自何处?
我刚刚开始研究SVM,Matlab和Python,这对我来说很棘手。 谁能一步一步解释在Python中为软边距SVM解决原始和对偶问题?