欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python可視化支持向量機(jī)SVM

 更新時間:2024年11月03日 11:19:20   作者:python收藏家  
支持向量機(jī)是用于分類和回歸任務(wù)的強(qiáng)大監(jiān)督學(xué)習(xí)模型,本文我們將探索使用Python和流行的庫(如scikit-learn和Matplotlib)可視化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)文章

  • PyQt5 控件字體樣式等設(shè)置的實現(xiàn)

    PyQt5 控件字體樣式等設(shè)置的實現(xiàn)

    這篇文章主要介紹了PyQt5 控件字體樣式等設(shè)置的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • python程序封裝為win32服務(wù)的方法

    python程序封裝為win32服務(wù)的方法

    這篇文章主要為大家詳細(xì)介紹了python程序封裝為win32服務(wù)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Python爬取門戶論壇評論淺談Python未來發(fā)展方向

    Python爬取門戶論壇評論淺談Python未來發(fā)展方向

    這篇文章主要介紹了如何實現(xiàn)Python爬取門戶論壇評論,附含圖片示例代碼,講解了詳細(xì)的操作過程,有需要的的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09
  • 在?Python?中創(chuàng)建DataFrame的方法

    在?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的Flask框架中使用日期和時間的教程

    在Python的Flask框架中使用日期和時間的教程

    這篇文章主要介紹了在Python的Flask框架中使用日期和時間的教程,包括對各個時區(qū)之間轉(zhuǎn)換的一些處理,需要的朋友可以參考下
    2015-04-04
  • 詳解Python中高階函數(shù)(map,filter,reduce,sorted)的使用

    詳解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)代碼

    這篇文章主要介紹了利用Python制作動態(tài)排名圖的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • python搜索指定類型文件以及批量移動文件程序詳解

    python搜索指定類型文件以及批量移動文件程序詳解

    這篇文章主要給大家介紹了關(guān)于python搜索指定類型文件以及批量移動文件程序的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-03-03
  • KMP算法精解及其Python版的代碼示例

    KMP算法精解及其Python版的代碼示例

    KMP算法基本上被人們用作字符串的匹配操作,這里我們就來介紹KMP算法精解及其Python版的代碼示例,需要的朋友可以參考下
    2016-06-06
  • 極簡的Python入門指引

    極簡的Python入門指引

    這篇文章是一個極簡的Python入門指引、原文在網(wǎng)絡(luò)上人氣相當(dāng)高,將一些基本知識用實例代碼說明,需要的朋友可以參考下
    2015-04-04

最新評論