zhuyongqi9

关于 CVXOPT 求解二次规划问题报错

  •  
  •   zhuyongqi9 · Nov 26, 2020 · 2037 views
    This topic created in 2073 days ago, the information mentioned may be changed or developed.

    小弟用 SVM 高斯核,样本是西瓜书的西瓜数据集,一直报错,请问是什么问题

    import scipy.io as sico
    import numpy as np
    import cvxopt
    from numpy import linalg
    from sklearn import preprocessing
    
    dataFile='/Users/zhuyongqi/Desktop/机器学习 /数据集 /watermelon_3a.mat'
    data=sico.loadmat(dataFile)
    np.set_printoptions(suppress=True) 
    a = data['watermelon_3a']
    
    b=a[:,[0,1]]
    features=a[:,2]
    # 进行归一化处理
    X_scaled = preprocessing.scale(b)
    #高斯核
    def gaussian_kernel(x, y, sigma=1.0):
        return np.exp(-np.dot((x-y),(x-y).T) / (2 * (sigma ** 2)))
        
    n_samples, n_features = X_scaled.shape
    
    K = np.zeros((n_samples, n_samples))
    for i in range(n_samples):
        for j in range(n_samples):
            K[i,j] = gaussian_kernel(X_scaled[i], X_scaled[j])
    
    E = np.ones([n_samples,1])
    Y = np.zeros([n_samples,n_samples])
    y = np.ones([n_samples,1])
    
    for i in range (n_samples):
        y[i] = features[i]
    y = y.T
    
    for i in range (n_samples):
        Y[i][i] = features[i]
    
    q = E
    P = np.dot(Y,K,Y)
    H = np.zeros([n_samples,1])
    
    G = -1 * np.ones([n_samples,n_samples])
    
    P = cvxopt.matrix(P,(17,17))
    q = cvxopt.matrix(q,(17,1))
    G = cvxopt.matrix(G,(17,17))
    A = cvxopt.matrix(y,(1,17))
    h = cvxopt.matrix(H,(17,1))
    b = cvxopt.matrix(0.0)
    
    sol = cvxopt.solvers.qp(P,q,G,h,A,b) 
    
    
    

    报错情况:

    Traceback (most recent call last):
      File "/Users/zhuyongqi/python/Experment_05/test.py", line 52, in <module>
        sol = cvxopt.solvers.qp(P,q,G,h,A,b) 
      File "/usr/local/anaconda3/lib/python3.8/site-packages/cvxopt/coneprog.py", line 4487, in qp
        return coneqp(P, q, G, h, None, A,  b, initvals, kktsolver = kktsolver, options = options)
      File "/usr/local/anaconda3/lib/python3.8/site-packages/cvxopt/coneprog.py", line 2067, in coneqp
        raise ValueError("Rank(A) < p or Rank([P; A; G]) < n")
    ValueError: Rank(A) < p or Rank([P; A; G]) < n
    
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2886 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:49 · PVG 13:49 · LAX 22:49 · JFK 01:49
    ♥ Do have faith in what you're doing.