SVM 多分类分类边界可视化
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=180, centers=5, random_state=6)
#centers就是數(shù)據(jù)分布點(diǎn),我們現(xiàn)在解決的是二分類問題,\
#那么就需要兩個center,數(shù)據(jù)點(diǎn)都分別圍繞著center進(jìn)行分布
#random_state確定一個數(shù)字后,每次運(yùn)行都會出現(xiàn)相同的隨機(jī)數(shù)。
#plt.scatter(x[:,0],x[:,1],c=y,s=30,cmap=plt.cm.Paired)
#plt.scatter中的c代表color,cmap代表colormap,可選
#s是size, c=y是標(biāo)簽分類和plt.cm.Paired聯(lián)合使用
# 使用SVM分類器
clf = svm.SVC(C=1000,gamma=0.01).fit(X, y)
# 接下來進(jìn)行可視化, 要想進(jìn)行可視化, 我們核心就是要調(diào)用plt.contour函數(shù)畫圖, 但是它要求傳入三個矩陣, 而我們的x1和x2為向量, 預(yù)測的值也為向量, 所有我們需要將x1和x2轉(zhuǎn)換為矩陣
# 獲取邊界范圍, 為了產(chǎn)生數(shù)據(jù)
x1_min, x1_max = np.min(X[:, 0]) - 1, np.max(X[:, 0]) + 1
x2_min, x2_max = np.min(X[:, 1]) - 1, np.max(X[:, 1]) + 1
# 生成新的數(shù)據(jù), 并調(diào)用meshgrid網(wǎng)格搜索函數(shù)幫助我們生成矩陣
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.02), np.arange(x2_min, x2_max, 0.02))
# 有了新的數(shù)據(jù), 我們需要將這些數(shù)據(jù)輸入到分類器獲取到結(jié)果, 但是因?yàn)檩斎氲氖蔷仃? 我們需要給你將其轉(zhuǎn)換為符合條件的數(shù)據(jù)
Z = clf.predict(np.c_[xx1.ravel(), xx2.ravel()])
# 這個時候得到的是Z還是一個向量, 將這個向量轉(zhuǎn)為矩陣即可
Z = Z.reshape(xx1.shape)
# 分解的時候有背景顏色
plt.pcolormesh(xx1, xx2, Z, cmap=plt.cm.RdYlBu)
# 為什么需要輸入矩陣, 因?yàn)榈雀呔€函數(shù)其實(shí)是3D函數(shù), 3D坐標(biāo)是三個平面, 平面對應(yīng)矩陣
plt.contour(xx1, xx2, Z, cmap=plt.cm.Paired)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.show()
總結(jié)
以上是生活随笔為你收集整理的SVM 多分类分类边界可视化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交流电的有效值rms值_交流电路的功率三
- 下一篇: java中显示动态信息的方法_java里