使用Python可視化支持向量機(jī)SVM
支持向量機(jī)(SVM)是用于分類和回歸任務(wù)的強(qiáng)大監(jiān)督學(xué)習(xí)模型。它們受歡迎背后的一個關(guān)鍵因素是它們有效處理線性和非線性數(shù)據(jù)的能力。在本文中,我們將探索使用Python和流行的庫(如scikit-learn和Matplotlib)可視化SVM。
支持向量機(jī)(SVM)
支持向量機(jī)的工作原理是找到最佳的超平面,最好地分離特征空間中的類。選擇超平面以使邊緣最大化,邊緣是超平面與每個類的最近數(shù)據(jù)點之間的距離,稱為支持向量。這個超平面是通過求解一個優(yōu)化問題來確定的,該優(yōu)化問題的目標(biāo)是最小化分類誤差,同時最大化間隔。
SVM可以通過使用不同的核函數(shù)(如線性、多項式、徑向基函數(shù)(RBF)和sigmoid核)來用于線性和非線性分類任務(wù)。這些內(nèi)核允許支持向量機(jī)通過將原始特征空間映射到更高維的空間來處理非線性決策邊界,其中類變得可分離。
可視化線性SVM
讓我們首先使用Iris數(shù)據(jù)集可視化一個簡單的線性SVM。我們將使用Scikit-Learn生成數(shù)據(jù)并訓(xùn)練SVM模型。然后,我們將繪制決策邊界和支持向量,以了解模型如何分離類。
導(dǎo)入必要的庫并加載數(shù)據(jù)集
該數(shù)據(jù)集包含三種鳶尾花的萼片和花瓣尺寸的測量值。在這里,只有前兩個特征(萼片長度和寬度)被保留用于可視化目的。
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)格以覆蓋特征空間。這允許生成用于可視化目的的點。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ù)測 網(wǎng)格上所有點的類標(biāo)簽來實現(xiàn)的。然后使用填充輪廓圖(plt.contourf)可視化決策邊界,并將原始數(shù)據(jù)點覆蓋在圖上以供參考。
# 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以線性方式對數(shù)據(jù)點進(jìn)行分類。盡管準(zhǔn)確度不是很高,我們可以清楚地看到紅色部分有大量錯誤分類的數(shù)據(jù)點,但這就是非線性svm的用武之地。
可視化非線性SVM
SVM還可以通過使用核函數(shù)來處理非線性決策邊界。讓我們使用具有多項式內(nèi)核的相同Iris數(shù)據(jù)集來可視化非線性SVM。
理解γ參數(shù)對RBF核函數(shù)的影響
在可視化非線性支持向量機(jī)之前,讓我們來探討一下RBF核中γ參數(shù)的影響。
γ參數(shù)顯著影響RBF核在SVM中的行為。它本質(zhì)上決定了單個數(shù)據(jù)點對決策邊界的影響。
- 較低的γ值會導(dǎo)致每個數(shù)據(jù)點的影響更大,從而導(dǎo)致更平滑的決策邊界。
- 相反,較高的γ值會縮小數(shù)據(jù)點的影響,從而創(chuàng)建更復(fù)雜且可能過度擬合的決策邊界。
定義γ值
定義了一個名為gamma_values的列表,包含γ超參數(shù)的不同值,控制單個訓(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]
為每個γ值繪制決策邊界
將創(chuàng)建一個大小為20×10英寸的圖形,以容納每個γ值的子圖。代碼迭代gamma_values列表中的每個γ值。對于每個γ值,使用指定的γ值訓(xùn)練具有RBF核的SVM模型。
在循環(huán)內(nèi)部,創(chuàng)建一個meshgrid來覆蓋特征空間,允許生成用于可視化目的的點。網(wǎng)格定義為步長為0.02。
對于每個γ值,繪制具有RBF核的SVM的決策邊界。這是通過使用predict方法預(yù)測 網(wǎng)格上所有點的類標(biāo)簽來實現(xiàn)的。
然后使用填充輪廓圖(plt.contourf)可視化決策邊界。原始數(shù)據(jù)點覆蓋在圖上以供參考,顏色對應(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()
在上面的可視化中,γ值顯然對模型的準(zhǔn)確性和復(fù)雜性有很大影響。
我們選擇了6個不同的γ值,因此我們有6個不同的可視化,γ值越高,準(zhǔn)確度越高,這就是為什么在γ值為200的可視化中,我們的模型幾乎完美地分類了數(shù)據(jù)點。
但是當(dāng)我們選擇γ值為50的模型時,它與線性SVM的結(jié)果非常相似,準(zhǔn)確性也不是很高。
結(jié)論
總之,支持向量機(jī)(SVM)是線性和非線性分類任務(wù)的強(qiáng)大模型??梢暬С窒蛄繖C(jī),特別是使用不同的內(nèi)核和超參數(shù),可以提供對其行為和性能的有價值的見解。
到此這篇關(guān)于使用Python可視化支持向量機(jī)SVM的文章就介紹到這了,更多相關(guān)Python可視化支持向量機(jī)SVM內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬取門戶論壇評論淺談Python未來發(fā)展方向
這篇文章主要介紹了如何實現(xiàn)Python爬取門戶論壇評論,附含圖片示例代碼,講解了詳細(xì)的操作過程,有需要的的朋友可以借鑒參考下,希望可以有所幫助2021-09-09在?Python?中創(chuàng)建DataFrame的方法
這篇文章主要介紹了教你如何在?Python?中創(chuàng)建DataFrame,我們將學(xué)習(xí)以多種方式創(chuàng)建DataFrame,DataFrame是數(shù)據(jù)的二維集合,是一種數(shù)據(jù)結(jié)構(gòu),其中數(shù)據(jù)以表格形式存儲,更多相關(guān)資料需要的小伙伴可以參考一下2022-03-03詳解Python中高階函數(shù)(map,filter,reduce,sorted)的使用
高階函數(shù)就是能夠把函數(shù)當(dāng)成參數(shù)傳遞的函數(shù)就是高階函數(shù),換句話說如果一個函數(shù)的參數(shù)是函數(shù),那么這個函數(shù)就是一個高階函數(shù)。本文為大家詳細(xì)講解了Python中常用的四個高階函數(shù),感興趣的可以了解一下2022-04-04利用Python制作動態(tài)排名圖的實現(xiàn)代碼
這篇文章主要介紹了利用Python制作動態(tài)排名圖的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04