使用Python可視化支持向量機(jī)SVM
支持向量機(jī)(SVM)是用于分類和回歸任務(wù)的強(qiáng)大監(jiān)督學(xué)習(xí)模型。它們受歡迎背后的一個(gè)關(guān)鍵因素是它們有效處理線性和非線性數(shù)據(jù)的能力。在本文中,我們將探索使用Python和流行的庫(kù)(如scikit-learn和Matplotlib)可視化SVM。
支持向量機(jī)(SVM)
支持向量機(jī)的工作原理是找到最佳的超平面,最好地分離特征空間中的類。選擇超平面以使邊緣最大化,邊緣是超平面與每個(gè)類的最近數(shù)據(jù)點(diǎn)之間的距離,稱為支持向量。這個(gè)超平面是通過求解一個(gè)優(yōu)化問題來確定的,該優(yōu)化問題的目標(biāo)是最小化分類誤差,同時(shí)最大化間隔。
SVM可以通過使用不同的核函數(shù)(如線性、多項(xiàng)式、徑向基函數(shù)(RBF)和sigmoid核)來用于線性和非線性分類任務(wù)。這些內(nèi)核允許支持向量機(jī)通過將原始特征空間映射到更高維的空間來處理非線性決策邊界,其中類變得可分離。
可視化線性SVM
讓我們首先使用Iris數(shù)據(jù)集可視化一個(gè)簡(jiǎn)單的線性SVM。我們將使用Scikit-Learn生成數(shù)據(jù)并訓(xùn)練SVM模型。然后,我們將繪制決策邊界和支持向量,以了解模型如何分離類。
導(dǎo)入必要的庫(kù)并加載數(shù)據(jù)集
該數(shù)據(jù)集包含三種鳶尾花的萼片和花瓣尺寸的測(cè)量值。在這里,只有前兩個(gè)特征(萼片長(zhǎng)度和寬度)被保留用于可視化目的。
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.svm import SVC iris = datasets.load_iris() X = iris.data[:, :2] # Only first two features for visualization y = iris.target
基于線性核的SVM訓(xùn)練
在Iris數(shù)據(jù)集上訓(xùn)練具有線性核的SVM模型。線性核適用于線性可分?jǐn)?shù)據(jù),旨在找到分離不同類別的最佳超平面。
# Train SVM with linear kernel clf_linear = SVC(kernel='linear') clf_linear.fit(X, y)
創(chuàng)建決策邊界
創(chuàng)建網(wǎng)格以覆蓋特征空間。這允許生成用于可視化目的的點(diǎn)。SVM模型的決策邊界將繪制在此網(wǎng)格上。
# Create a mesh to plot decision boundaries
h = 0.02 # step size in the mesh
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))線性支持向量機(jī)決策邊界的繪制
繪制了具有線性核的SVM的決策邊界。這是通過使用predict方法預(yù)測(cè) 網(wǎng)格上所有點(diǎn)的類標(biāo)簽來實(shí)現(xiàn)的。然后使用填充輪廓圖(plt.contourf)可視化決策邊界,并將原始數(shù)據(jù)點(diǎn)覆蓋在圖上以供參考。
# Plot decision boundary of Linear SVM
Z_linear = clf_linear.predict(np.c_[xx.ravel(), yy.ravel()])
Z_linear = Z_linear.reshape(xx.shape)
plt.contourf(xx, yy, Z_linear, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.title('Linear SVM')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.show()
在上面的可視化中,線性SVM以線性方式對(duì)數(shù)據(jù)點(diǎn)進(jìn)行分類。盡管準(zhǔn)確度不是很高,我們可以清楚地看到紅色部分有大量錯(cuò)誤分類的數(shù)據(jù)點(diǎn),但這就是非線性svm的用武之地。
可視化非線性SVM
SVM還可以通過使用核函數(shù)來處理非線性決策邊界。讓我們使用具有多項(xiàng)式內(nèi)核的相同Iris數(shù)據(jù)集來可視化非線性SVM。
理解γ參數(shù)對(duì)RBF核函數(shù)的影響
在可視化非線性支持向量機(jī)之前,讓我們來探討一下RBF核中γ參數(shù)的影響。
γ參數(shù)顯著影響RBF核在SVM中的行為。它本質(zhì)上決定了單個(gè)數(shù)據(jù)點(diǎn)對(duì)決策邊界的影響。
- 較低的γ值會(huì)導(dǎo)致每個(gè)數(shù)據(jù)點(diǎn)的影響更大,從而導(dǎo)致更平滑的決策邊界。
- 相反,較高的γ值會(huì)縮小數(shù)據(jù)點(diǎn)的影響,從而創(chuàng)建更復(fù)雜且可能過度擬合的決策邊界。
定義γ值
定義了一個(gè)名為gamma_values的列表,包含γ超參數(shù)的不同值,控制單個(gè)訓(xùn)練示例的影響。
import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.svm import SVC iris = datasets.load_iris() X = iris.data[:, :2] # Only first two features for visualization y = iris.target gamma_values = [0.1, 1, 10, 50, 100, 200]
為每個(gè)γ值繪制決策邊界
將創(chuàng)建一個(gè)大小為20×10英寸的圖形,以容納每個(gè)γ值的子圖。代碼迭代gamma_values列表中的每個(gè)γ值。對(duì)于每個(gè)γ值,使用指定的γ值訓(xùn)練具有RBF核的SVM模型。
在循環(huán)內(nèi)部,創(chuàng)建一個(gè)meshgrid來覆蓋特征空間,允許生成用于可視化目的的點(diǎn)。網(wǎng)格定義為步長(zhǎng)為0.02。
對(duì)于每個(gè)γ值,繪制具有RBF核的SVM的決策邊界。這是通過使用predict方法預(yù)測(cè) 網(wǎng)格上所有點(diǎn)的類標(biāo)簽來實(shí)現(xiàn)的。
然后使用填充輪廓圖(plt.contourf)可視化決策邊界。原始數(shù)據(jù)點(diǎn)覆蓋在圖上以供參考,顏色對(duì)應(yīng)于其各自的類別標(biāo)簽。
# Plot decision boundaries for each gamma value
plt.figure(figsize=(20, 10))
for i, gamma in enumerate(gamma_values, 1):
# Train SVM with RBF kernel
clf_rbf = SVC(kernel='rbf', gamma=gamma)
clf_rbf.fit(X, y)
# Create a mesh to plot decision boundaries
h = 0.02 # step size in the mesh
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
# Plot decision boundary
plt.subplot(2, 3, i)
Z_rbf = clf_rbf.predict(np.c_[xx.ravel(), yy.ravel()])
Z_rbf = Z_rbf.reshape(xx.shape)
plt.contourf(xx, yy, Z_rbf, cmap=plt.cm.Paired, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.title(f'RBF SVM (Gamma={gamma})')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.tight_layout()
plt.show()
在上面的可視化中,γ值顯然對(duì)模型的準(zhǔn)確性和復(fù)雜性有很大影響。
我們選擇了6個(gè)不同的γ值,因此我們有6個(gè)不同的可視化,γ值越高,準(zhǔn)確度越高,這就是為什么在γ值為200的可視化中,我們的模型幾乎完美地分類了數(shù)據(jù)點(diǎn)。
但是當(dāng)我們選擇γ值為50的模型時(shí),它與線性SVM的結(jié)果非常相似,準(zhǔn)確性也不是很高。
結(jié)論
總之,支持向量機(jī)(SVM)是線性和非線性分類任務(wù)的強(qiáng)大模型。可視化支持向量機(jī),特別是使用不同的內(nèi)核和超參數(shù),可以提供對(duì)其行為和性能的有價(jià)值的見解。
到此這篇關(guān)于使用Python可視化支持向量機(jī)SVM的文章就介紹到這了,更多相關(guān)Python可視化支持向量機(jī)SVM內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch中圖像的數(shù)據(jù)格式實(shí)例
今天小編就為大家分享一篇pytorch中圖像的數(shù)據(jù)格式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python實(shí)現(xiàn)文件名批量替換和內(nèi)容替換
這篇文章主要介紹了python實(shí)現(xiàn)文件名批量替換和內(nèi)容替換,第一個(gè)例子可以指定文件類型,需要的朋友可以參考下2014-03-03
Python OS系統(tǒng)解決路徑中空格原因?qū)е挛募虿婚_的問題
這篇文章主要介紹了Python OS系統(tǒng)解決路徑中空格原因?qū)е挛募虿婚_的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
pytorch 彩色圖像轉(zhuǎn)灰度圖像實(shí)例
今天小編就為大家分享一篇pytorch 彩色圖像轉(zhuǎn)灰度圖像實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python編程使用selenium模擬登陸淘寶實(shí)例代碼
這篇文章主要介紹了python編程使用selenium模擬登陸淘寶實(shí)例代碼,涉及selenium的簡(jiǎn)介及Windows下的安裝,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析
這篇文章主要介紹了python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析,需要的朋友可以參考下2014-07-07
Python+SeaTable實(shí)現(xiàn)生成條形碼圖片并寫入表格
不管是錄入信息時(shí)需要用掃碼器掃碼錄入,還是有別的生成條形碼的需要,這在?SeaTable?表格中用?Python?腳本就可以輕松實(shí)現(xiàn),本文就來為大家詳細(xì)講解一下2022-07-07

