利用CVXOPT模組實現SVM

2021-08-17 14:50:57 字數 1937 閱讀 8772

- 執行安裝 pip install numpy-***-***.whl

# cvxopt踩坑指南

# 優化中傳遞的matrix必須是cvxopt內的matrix

# matrix() 轉換對應的型別為numpy.array,numpy.matrix可能也行(沒有嘗試)

# python 3

import numpy as np

from cvxopt import solvers

from cvxopt import matrix as mx

import matplotlib

import matplotlib.pyplot as plt

defloaddataset

(filename):

datamat = ; labelmat =

fr = open(filename)

for line in fr.readlines():

linearr = line.strip().split('\t')

return datamat,labelmat

# 資料為《機器學習實戰》第六章的資料testset.txt

data,label = loaddataset('testset.txt')

datalen = len(data[0])

# 生成cvxopt裡面對應的引數矩陣/向量

p1 = np.zeros((1, datalen+1))

p2 = np.zeros((datalen,1))

p3 = np.eye(datalen)

ptmp = np.hstack((p2,p3))

p = np.vstack((p1,ptmp))

p = mx(p)

q = mx(np.zeros((datalen+1,1)))

m = len(label)

datat = np.array(data)

a =

for i in range(m):

tmp = [1]+data[i]

for j in range(datalen+1):

tmp[j] = -1*label[i]*tmp[j]

g = mx(np.array(a))

h = mx(np.zeros((m,1))-1)

# 求解凸二次規劃問題

sol = solvers.qp(p,q,g,h)

# 列印資訊

print(sol['status'])

print(sol['x'])

# 繪製資料散點圖

datanp = np.array(data)

labelnp = np.array(label)

data1 = datanp[labelnp==1]

data2 = datanp[labelnp==-1]

f1 = plt.figure(1)

plt.scatter(data1[:,0],data1[:,1], marker = 'x', color = 'm', label='1', s = 30)

plt.scatter(data2[:,0],data2[:,1], marker = 'o', color = 'r', label='-1', s = 15)

# 列印分割平面

b = sol['x'][0]

w1 = sol['x'][1]

w2 = sol['x'][2]

xmin = min(datanp[:,0])

xmax = max(datanp[:,0])

x2_1 = -1.0*(b+w1*xmin)/w2

x2_2 = -1.0*(b+w1*xmax)/w2

plt.plot([xmin,xmax],[x2_1,x2_2])

plt.show()

python匯入cvxopt模組踩坑

在anaconda prompt下執行pip刪除命令 pip uninstall numpy pip uninstall cvxopt 一些常用版本有博主在csdn中都分享過,我在csdn中放了3.9對應的numpy mkl的whl檔案,有需要自取 numpy 1.19.4 mkl cp39 cp3...

利用django自帶模組實現登出功能

django框架自帶註冊 登入和登出等常用的使用者模組的功能。在之前的部落格我們已經實現了註冊功能,這次主要介紹一下如何實現登出功能。from django.shortcuts import render,redirect from django.contrib.auth import logout...

python利用模組實現單例模式

單例是最常使用的模式,通過單例模式可以保證系統中乙個類只有乙個例項而且該例項易於被外界訪問,從而方便對例項個數的控制並節約系統資源。python實現單例模式一般可以對建立例項的方法 new 進行改造 class singleton object instance none def new cls,a...