上一篇本著回歸傳統(tǒng)的觀點(diǎn),在這個(gè)深度學(xué)習(xí)繁榮發(fā)展的時(shí)期,帶著大家認(rèn)識(shí)了一位新朋友,英文名SVM,中文名為支持向量機(jī),是一種基于傳統(tǒng)方案的機(jī)器學(xué)習(xí)方案,同樣的,支持根據(jù)輸入的數(shù)據(jù)進(jìn)行訓(xùn)練,以進(jìn)行分類等任務(wù)。
那么怎么理解這個(gè)支持向量呢,簡(jiǎn)單來說,這些支持向量就是我們從輸入數(shù)據(jù)中挑選的一些代表性數(shù)據(jù)。這些數(shù)據(jù)可以是一個(gè)或多個(gè),當(dāng)我們通過訓(xùn)練獲取這些向量即得到了一個(gè)svm模型后,所有采集到的新數(shù)據(jù),都要和這些代表數(shù)據(jù)進(jìn)行對(duì)比以判斷歸屬。當(dāng)然這里的支持向量根據(jù)分類的類別數(shù),可以存在多組,以實(shí)現(xiàn)多分類。
為了更好的說明,SVM的工作原理,這里用一個(gè)python代碼給大家展示一下如何使用SVM進(jìn)行一個(gè)單分類任務(wù)。之后還會(huì)給大家介紹一個(gè)小編和同事開發(fā)的實(shí)際應(yīng)用SVM的異常檢測(cè)項(xiàng)目,讓大家實(shí)際看下SVM的應(yīng)用效果。
那就先從python代碼開始,先開門瞧瞧SVM的世界,請(qǐng)看代碼:
(悄悄地說:請(qǐng)各位事先安裝numpy,matplotlib以及scikit-learn庫(kù))
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構(gòu)建了一個(gè)單分類SVM模型,并使用著名的鳶尾花數(shù)據(jù)集進(jìn)行模型訓(xùn)練;最終利用matplotlib庫(kù)進(jìn)行結(jié)果繪制,結(jié)果通過model.predict獲取,并將最終訓(xùn)練得到的支持向量用紅色點(diǎn)繪制出來,先來看看運(yùn)行效果:
中間的暗紅色區(qū)域就是模型所訓(xùn)練出來的決策區(qū)域,可以簡(jiǎn)單認(rèn)為落在紅色區(qū)域里面的點(diǎn)就是屬于我們這一類的。這里我們?cè)谟?xùn)練SVM模型時(shí)候,選擇了兩個(gè)特征,分別是花萼的長(zhǎng)度以及寬度,當(dāng)然也可以多選擇幾組特征(只不過不好圖形化顯示了)。
相信大家也注意到了,svm.OneClassSVM函數(shù)中有兩個(gè)參數(shù),nu和gamma,這兩個(gè)可是模型好壞的關(guān)鍵:
nu 控制訓(xùn)練誤差和支持向量數(shù)之間的權(quán)衡。它表示訓(xùn)練誤差的上限和支持向量數(shù)的下限。較小的nu 值允許更多的支持向量和更靈活的決策邊界,而較大的 nu 值限制支持向量數(shù)并導(dǎo)致更保守的決策邊界。
gamma 定義每個(gè)訓(xùn)練樣本的影響力。它確定訓(xùn)練樣本的影響范圍,并影響決策邊界的平滑程度。較小的 gamma 值使決策邊界更平滑,并導(dǎo)致每個(gè)訓(xùn)練樣本的影響范圍更大。相反,較大的值使決策邊界更復(fù)雜,并導(dǎo)致每個(gè)訓(xùn)練樣本的影響范圍更小。
接下來我們就實(shí)際測(cè)試下,調(diào)整gamma值從1到100:
正如上面所述,gamma值變大使得決策區(qū)域變得復(fù)雜,并且似乎每一個(gè)訓(xùn)練數(shù)據(jù)都變成了支持向量。
接下來我們看看調(diào)整nu的情況,nu從0.05->0.5:
決策邊界正如上文所講,變得更加保守了。不過,在實(shí)際使用中,我們需要聯(lián)合調(diào)整nu和gamma參數(shù),以獲取最佳的模型擬合效果,當(dāng)然這就是經(jīng)驗(yàn)之談了。所謂:煉丹的過程,沒錯(cuò),即便我們回歸傳統(tǒng),煉丹的過程也依舊還是存在的。
好了,那本期小編就給大家先分享到這里,下期將為大家?guī)硪粋€(gè)實(shí)打?qū)嵉模瑢畏诸恠vm用作異常檢測(cè)的實(shí)際項(xiàng)目,敬請(qǐng)期待!!
審核編輯:湯梓紅
-
SVM
+關(guān)注
關(guān)注
0文章
154瀏覽量
33017 -
模型
+關(guān)注
關(guān)注
1文章
3504瀏覽量
50191 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8499瀏覽量
134311 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5557瀏覽量
122641
原文標(biāo)題:讓機(jī)器學(xué)習(xí)回歸傳統(tǒng)之SVM使用方法
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
逆變器的調(diào)制方法進(jìn)階篇—空間矢量調(diào)制SVM

一種基于凸殼算法的SVM集成方法
Matlab使用方法和程序設(shè)計(jì)

基于優(yōu)化SVM模型的網(wǎng)絡(luò)負(fù)面信息分類方法研究
采用SVM的網(wǎng)頁分類方法研究
淺析SVM多核學(xué)習(xí)方法

示波器的使用方法(三):示波器的使用方法詳解
基于SVM的電機(jī)異常檢測(cè)系統(tǒng)

評(píng)論