<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SVM的使用方法

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2024-01-25 09:23 ? 次閱讀

上一篇本著回歸傳統的觀點,在這個深度學習繁榮發展的時期,帶著大家認識了一位新朋友,英文名SVM,中文名為支持向量機,是一種基于傳統方案的機器學習方案,同樣的,支持根據輸入的數據進行訓練,以進行分類等任務。

那么怎么理解這個支持向量呢,簡單來說,這些支持向量就是我們從輸入數據中挑選的一些代表性數據。這些數據可以是一個或多個,當我們通過訓練獲取這些向量即得到了一個svm模型后,所有采集到的新數據,都要和這些代表數據進行對比以判斷歸屬。當然這里的支持向量根據分類的類別數,可以存在多組,以實現多分類。

為了更好的說明,SVM的工作原理,這里用一個python代碼給大家展示一下如何使用SVM進行一個單分類任務。之后還會給大家介紹一個小編和同事開發的實際應用SVM的異常檢測項目,讓大家實際看下SVM的應用效果。

那就先從python代碼開始,先開門瞧瞧SVM的世界,請看代碼:

(悄悄地說:請各位事先安裝numpy,matplotlib以及scikit-learn庫)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import load_iris


# Load the Iris dataset
iris = load_iris()
X = iris.data[:, :2]  # Select only the first two features for visualization


# Select a single class for one-class classification (Class 0)
X_train = X[iris.target == 0]


# Create and train the One-Class SVM model
model = svm.OneClassSVM(kernel='rbf', nu=0.05, gamma = 1)
model.fit(X_train)


# Generate test data
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.linspace(x_min, x_max, 500), np.linspace(y_min, y_max, 500))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)


# Plot the training data and decision boundary
plt.scatter(X_train[:, 0], X_train[:, 1], color='blue', label='Inliers')
plt.contourf(xx, yy, Z, levels=[-1, 0], colors='lightgray', alpha=0.5)
plt.contour(xx, yy, Z, levels=[0], linewidths=2, colors='darkred')


support_vector_indices = model.support_
support_vectors = X_train[support_vector_indices]


# pait the support vector
plt.scatter(support_vectors[:, 0], support_vectors[:, 1], color='red', label='Support Vectors')


plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('One-Class SVM - Iris Dataset')
plt.legend()
plt.show()

以上代碼,我們就使用svm. OneClassSVM構建了一個單分類SVM模型,并使用著名的鳶尾花數據集進行模型訓練;最終利用matplotlib庫進行結果繪制,結果通過model.predict獲取,并將最終訓練得到的支持向量用紅色點繪制出來,先來看看運行效果:

7b8daca6-bb1b-11ee-8b88-92fbcf53809c.png

中間的暗紅色區域就是模型所訓練出來的決策區域,可以簡單認為落在紅色區域里面的點就是屬于我們這一類的。這里我們在訓練SVM模型時候,選擇了兩個特征,分別是花萼的長度以及寬度,當然也可以多選擇幾組特征(只不過不好圖形化顯示了)。

相信大家也注意到了,svm.OneClassSVM函數中有兩個參數,nu和gamma,這兩個可是模型好壞的關鍵:

nu 控制訓練誤差和支持向量數之間的權衡。它表示訓練誤差的上限和支持向量數的下限。較小的nu 值允許更多的支持向量和更靈活的決策邊界,而較大的 nu 值限制支持向量數并導致更保守的決策邊界。

gamma 定義每個訓練樣本的影響力。它確定訓練樣本的影響范圍,并影響決策邊界的平滑程度。較小的 gamma 值使決策邊界更平滑,并導致每個訓練樣本的影響范圍更大。相反,較大的值使決策邊界更復雜,并導致每個訓練樣本的影響范圍更小。

接下來我們就實際測試下,調整gamma值從1到100:

7b9c4180-bb1b-11ee-8b88-92fbcf53809c.png

正如上面所述,gamma值變大使得決策區域變得復雜,并且似乎每一個訓練數據都變成了支持向量。

接下來我們看看調整nu的情況,nu從0.05->0.5:

7bb0a242-bb1b-11ee-8b88-92fbcf53809c.png

決策邊界正如上文所講,變得更加保守了。不過,在實際使用中,我們需要聯合調整nu和gamma參數,以獲取最佳的模型擬合效果,當然這就是經驗之談了。所謂:煉丹的過程,沒錯,即便我們回歸傳統,煉丹的過程也依舊還是存在的。

好了,那本期小編就給大家先分享到這里,下期將為大家帶來一個實打實的,將單分類svm用作異常檢測的實際項目,敬請期待??!

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SVM
    SVM
    +關注

    關注

    0

    文章

    154

    瀏覽量

    32219
  • 模型
    +關注

    關注

    1

    文章

    2775

    瀏覽量

    47874
  • 機器學習
    +關注

    關注

    66

    文章

    8173

    瀏覽量

    130888
  • 深度學習
    +關注

    關注

    73

    文章

    5256

    瀏覽量

    120049

原文標題:讓機器學習回歸傳統之SVM使用方法

文章出處:【微信號:NXP_SMART_HARDWARE,微信公眾號:恩智浦MCU加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    逆變器的調制方法進階篇—空間矢量調制SVM

    這篇文章將介紹一種新的調制方法,空間矢量調制 (Space Vector Modulation),簡稱 SVM。
    的頭像 發表于 11-09 14:14 ?849次閱讀
    逆變器的調制<b class='flag-5'>方法</b>進階篇—空間矢量調制<b class='flag-5'>SVM</b>

    基于SVM的改進RBF網絡板形模式識別方法

    為了提高帶鋼生產中板形模式識別精度,提出了基于支持向量機(svM)的改進徑向基(RBF)網絡板形模式識別方法,由SVM回歸確定RBF網絡優化的初始參數,解決了傳統方法存在的學習時
    發表于 03-15 23:58 ?16次下載

    一種基于凸殼算法的SVM集成方法

    為提高支持向量機(SVM)集成的訓練速度,提出一種基于凸殼算法的SVM 集成方法,得到訓練集各類數據的殼向量,將其作為基分類器的訓練集,并采用Bagging 策略集成各個SVM。在訓
    發表于 04-16 11:43 ?10次下載

    示波器的使用方法

    示波器的使用方法 1 示波器使用        本節介紹示波器的使用方法。示波器種類、型號很多,功能也不同。
    發表于 01-14 13:06 ?1.8w次閱讀

    示波器的使用方法

    數字萬用表使用方法和示波器的使用方法詳解。
    發表于 03-14 10:38 ?32次下載

    Altium Designer 9使用方法

    Altium Designer 9使用方法
    發表于 12-20 23:00 ?0次下載

    基于優化SVM模型的網絡負面信息分類方法研究

    基于優化SVM模型的網絡負面信息分類方法研究_鄭金芳
    發表于 01-07 18:56 ?0次下載

    基于SVM的梅雨量預測方法朱天一

    基于SVM的梅雨量預測方法_朱天一
    發表于 03-17 09:28 ?0次下載

    基于行為識別和SVM的短信過濾方法研究_趙英剛

    基于行為識別和SVM的短信過濾方法研究_趙英剛
    發表于 03-16 14:37 ?0次下載

    基于LLE和SVM的手部動作識別方法_伍吉瑤

    基于LLE和SVM的手部動作識別方法_伍吉瑤
    發表于 03-19 19:08 ?1次下載

    xilinx 原語使用方法

    xilinx 原語使用方法
    發表于 10-17 08:57 ?11次下載
    xilinx 原語<b class='flag-5'>使用方法</b>

    ORCAD PSPICE 使用方法

    ORCAD PSPICE 使用方法
    發表于 10-18 14:52 ?39次下載
    ORCAD PSPICE <b class='flag-5'>使用方法</b>

    淺析SVM多核學習方法

    SVM是機器學習有監督學習的一種方法,常用于解決分類問題,其基本原理是:在特征空間里尋找一個超平面,以最小的錯分率把正負樣本分開。因為SVM既能達到工業界的要求,機器學習研究者又能知道其背后的原理,所以
    的頭像 發表于 05-04 18:16 ?1595次閱讀
    淺析<b class='flag-5'>SVM</b>多核學習<b class='flag-5'>方法</b>

    示波器的使用方法(三):示波器的使用方法詳解

    示波器的使用方法并非很難,重點在于正確使用示波器的使用方法。往期文章中,小編對模擬示波器的使用方法和數字示波器的使用方法均有所介紹。為增進大家對示波器的
    的頭像 發表于 12-24 20:37 ?2585次閱讀

    基于SVM的電機異常檢測系統

    之前為大家帶來了兩篇關于SVM的介紹與基于python的使用方法。相信大家都已經上手體驗,嘗鮮了鳶尾花數據集了吧。
    的頭像 發表于 04-18 10:34 ?329次閱讀
    基于<b class='flag-5'>SVM</b>的電機異常檢測系統
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>