Python 用CVXPY求解SVM对偶形式时的DCPError
我试图通过解决它的对偶形式,使用cvxpy创建一个SVM 代码如下:Python 用CVXPY求解SVM对偶形式时的DCPError,python,svm,cvxpy,cvxopt,cvx,Python,Svm,Cvxpy,Cvxopt,Cvx,我试图通过解决它的对偶形式,使用cvxpy创建一个SVM 代码如下: import cvxpy as cp import numpy as np DIM = 2 NUM = 50 #COLORS = ['red', 'blue'] M1 = np.ones((DIM,)) M2 = 2 * np.ones((DIM,)) C1 = np.diag(0.3 * np.ones((DIM,))) C2 = np.diag(0.2 * np.ones((DIM,))) def generate_
import cvxpy as cp
import numpy as np
DIM = 2
NUM = 50
#COLORS = ['red', 'blue']
M1 = np.ones((DIM,))
M2 = 2 * np.ones((DIM,))
C1 = np.diag(0.3 * np.ones((DIM,)))
C2 = np.diag(0.2 * np.ones((DIM,)))
def generate_gaussian(m, c, num):
return np.random.multivariate_normal(m, c, num)
NUM = 50
x1 = generate_gaussian(M1, C1, NUM)
y1 = np.ones((x1.shape[0],))
x2 = generate_gaussian(M2, C2, NUM)
y2 = -np.ones((x2.shape[0],))
# join
x = np.concatenate((x1, x2), axis = 0)
y = np.concatenate((y1, y2), axis = 0)
print('x {} y {}'.format(x.shape, y.shape))
alphas = cp.Variable(2*NUM)
Cd = cp.Parameter()
Cd.value = 0.95
alphas_constraint_1 = [alphas[i] >=0 for i in range(2*NUM)]
alphas_constraint_2 = [alphas[i] <= Cd for i in range(2*NUM)]
alpha_y_constraint = [alphas@y.T == 0]
constraints = alphas_constraint_1 + alphas_constraint_2 + alpha_y_constraint
K = y[:,None]*x
K = np.dot(K,K.T)
objective_dual = cp.Minimize(-cp.sum(alphas)+cp.quad_form(alphas,K))
prob_dual = cp.Problem(objective_dual,constraints)
prob_dual.solve()
支持向量机的对偶形式怎么可能不是凸问题?
错误在哪里?我想不出来
我运行了这段代码:
expr1 = alphas.T@alphas
expr2 = cp.quad_form(alphas,K)
print(expr1.curvature, expr1.sign, expr1.is_dcp())
print(expr2.curvature, expr2.sign, expr2.is_dcp())
我得到的结果是相同的
UNKNOWN UNKNOWN False
我们无法帮助您,除非您提供完全复制您认为是错误的代码。特别是,您给出的代码片段没有运行。(什么是y?什么是x?@AkshayAgrawal我已经编辑了代码部分。我已经提供了完整的代码。
K
似乎是这里的问题。但无法找出问题产生的原因将问题线程发布到github此处:
UNKNOWN UNKNOWN False