Python上的原始表单/双重表单SVM实现

时间:2018-08-13 11:55:12

标签: python matlab svm quadprog

我将找到软边距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解决原始和对偶问题?

0 个答案:

没有答案