一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

 taotao_2016 2020-05-21

支持向量機(jī)(SVM)

什么是支持向量機(jī)呢?支持向量機(jī)是監(jiān)督機(jī)器學(xué)習(xí)模型,可對(duì)數(shù)據(jù)進(jìn)行分類分析。實(shí)際上,支持向量機(jī)算法是尋找能將實(shí)例進(jìn)行分離的最佳超平面的過(guò)程。

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

如果數(shù)據(jù)像上面那樣是線性可分離的,那么我們用一個(gè)線性分類器就能將兩個(gè)類分開(kāi)。如果我們的數(shù)據(jù)是非線性可分的,我們應(yīng)該怎么做呢?就像這樣:

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

正如我們所看到的,即使來(lái)自不同類的數(shù)據(jù)點(diǎn)是可分離的,我們也不能簡(jiǎn)單地畫(huà)一條直線來(lái)進(jìn)行分類。

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

那么我們?nèi)绾问褂弥С窒蛄繖C(jī)來(lái)擬合非線性機(jī)器學(xué)習(xí)數(shù)據(jù)集呢?

使用SVM進(jìn)行實(shí)驗(yàn)

創(chuàng)建機(jī)器學(xué)習(xí)數(shù)據(jù)集

首先創(chuàng)建非線性機(jī)器學(xué)習(xí)數(shù)據(jù)集。Python代碼如下:

# Import packages to visualize the classiferfrom matplotlib.colors import ListedColormapimport matplotlib.pyplot as pltimport warnings# Import packages to do the classifyingimport numpy as npfrom sklearn.svm import SVC# Create Datasetnp.random.seed(0)X_xor = np.random.randn(200, 2)y_xor = np.logical_xor(X_xor[:, 0] > 0, X_xor[:, 1] > 0)y_xor = np.where(y_xor, 1, -1)fig = plt.figure(figsize=(10,10))plt.scatter(X_xor[y_xor == 1, 0], X_xor[y_xor == 1, 1], c='b', marker='x', label='1')plt.scatter(X_xor[y_xor == -1, 0], X_xor[y_xor == -1, 1], c='r', marker='s', label='-1')plt.xlim([-3, 3])plt.ylim([-3, 3])plt.legend(loc='best')plt.tight_layout()plt.show()

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

嘗試使用線性支持向量機(jī)

我們首先嘗試使用線性支持向量機(jī),Python實(shí)現(xiàn)如下:

# Import packages to do the classifyingfrom mlxtend.plotting import plot_decision_regionsimport numpy as npfrom sklearn.svm import SVC# Create a SVC classifier using a linear kernelsvm = SVC(kernel='linear', C=1000, random_state=0)# Train the classifiersvm.fit(X_xor, y_xor)# Visualize the decision boundariesfig = plt.figure(figsize=(10,10))plot_decision_regions(X_xor, y_xor, clf=svm)plt.legend(loc='upper left')plt.tight_layout()plt.show()

C是與錯(cuò)誤分類相關(guān)的成本。C值越高,算法對(duì)數(shù)據(jù)集的正確分離就越嚴(yán)格。對(duì)于線性分類器,我們使用kernel='linear'。

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

如我們所見(jiàn),即使我們將成本設(shè)置得很高,但這條線也無(wú)法很好地分離紅點(diǎn)和藍(lán)點(diǎn)。

徑向基函數(shù)核

到目前為止,我們使用的線性分類器為:

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

正如我們所看到的,g(x)是一個(gè)線性函數(shù)。當(dāng)g(x) >為0時(shí),預(yù)測(cè)值為1。當(dāng)g(x) <0時(shí),預(yù)測(cè)值為-1。但是由于我們不能使用線性函數(shù)處理像上面這樣的非線性數(shù)據(jù),我們需要將線性函數(shù)轉(zhuǎn)換成另一個(gè)函數(shù)。

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

這個(gè)分類器似乎是我們非線性數(shù)據(jù)的理想選擇。讓我們來(lái)看看Python的代碼:

# Create a SVC classifier using an RBF kernelsvm = SVC(kernel='rbf', random_state=0, gamma=1/100, C=1)# Train the classifiersvm.fit(X_xor, y_xor)# Visualize the decision boundariesfig = plt.figure(figsize=(10,10))plot_decision_regions(X_xor, y_xor, clf=svm)plt.legend(loc='upper left')plt.tight_layout()plt.show()

gamma是1 / sigma。請(qǐng)記住,sigma是調(diào)節(jié)函數(shù)。因此,gamma值越小,sigma值就越大,分類器對(duì)各個(gè)點(diǎn)之間的距離就越不敏感。

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

讓我們把伽瑪放大看看會(huì)發(fā)生什么

# Create a SVC classifier using an RBF kernelsvm = SVC(kernel='rbf', random_state=0, gamma=1, C=1)# Train the classifiersvm.fit(X_xor, y_xor)# Visualize the decision boundariesfig = plt.figure(figsize=(10,10))plot_decision_regions(X_xor, y_xor, clf=svm)plt.legend(loc='upper left')plt.tight_layout()plt.show()

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

好像將伽瑪值提高100倍可以提高分類器對(duì)訓(xùn)練集的準(zhǔn)確性。把伽馬值再乘以10會(huì)怎么樣呢?

# Create a SVC classifier using an RBF kernelsvm = SVC(kernel='rbf', random_state=0, gamma=10, C=1)# Train the classifiersvm.fit(X_xor, y_xor)# Visualize the decision boundariesfig = plt.figure(figsize=(10,10))plot_decision_regions(X_xor, y_xor, clf=svm)plt.legend(loc='upper left')plt.tight_layout()plt.show()

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

這是否意味著如果我們將伽瑪提高到10000,它將更加準(zhǔn)確呢?事實(shí)上,如果伽瑪值太大,則分類器最終會(huì)對(duì)差異不敏感。

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

讓我們?cè)黾覥。C是與整個(gè)機(jī)器學(xué)習(xí)數(shù)據(jù)集的錯(cuò)誤分類相關(guān)的成本。換句話說(shuō),增加C將增加對(duì)整個(gè)數(shù)據(jù)集的敏感性,而不僅僅是單個(gè)數(shù)據(jù)點(diǎn)。

from ipywidgets import interact, interactive, fixed, interact_manualimport ipywidgets as widgetswarnings.filterwarnings('ignore')@interact(x=[1, 10, 1000, 10000, 100000])def svc(x=1):  # Create a SVC classifier using an RBF kernel  svm = SVC(kernel='rbf', random_state=0, gamma=.01, C=x)  # Train the classifier  svm.fit(X_xor, y_xor)  # Visualize the decision boundaries  fig = plt.figure(figsize=(10,10))  plot_decision_regions(X_xor, y_xor, clf=svm)  plt.legend(loc='upper left')  plt.tight_layout()  plt.show()

如何使用支持向量機(jī)學(xué)習(xí)非線性數(shù)據(jù)集

我們已經(jīng)找到了參數(shù),因此我們的SVM分類器可以成功地將兩組點(diǎn)分開(kāi)。

最后

我希望本文能讓您對(duì)SVM分類器是什么以及如何使用它來(lái)學(xué)習(xí)非線機(jī)器學(xué)習(xí)性數(shù)據(jù)集有一個(gè)直觀的認(rèn)識(shí)。如果數(shù)據(jù)是高維的,您則無(wú)法通過(guò)可視化來(lái)判斷分類器的性能。好的做法是根據(jù)訓(xùn)練集進(jìn)行訓(xùn)練,并在測(cè)試集上使用混淆矩陣或f1-分?jǐn)?shù)等指標(biāo)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    91后入中出内射在线| 亚洲人午夜精品射精日韩| 国产专区亚洲专区久久| 亚洲淫片一区二区三区| 国产一区二区三区成人精品| 国产又猛又大又长又粗| 精品高清美女精品国产区| 午夜激情视频一区二区| 欧美一区二区在线日韩| 大香蕉网国产在线观看av| 日韩精品综合免费视频| 日韩精品第一区二区三区| 亚洲精品国男人在线视频| 中国美女偷拍福利视频| 老司机这里只有精品视频| 正在播放玩弄漂亮少妇高潮 | 欧美熟妇一区二区在线| 美日韩一区二区精品系列| 国产午夜精品久久福利| 国内胖女人做爰视频有没有| 中文字幕有码视频熟女| 中文字幕精品一区二区年下载| 久久这里只有精品中文字幕| 免费观看一区二区三区黄片| 亚洲精品中文字幕一二三| 高清在线精品一区二区| 日韩精品一区二区一牛| 国产又粗又深又猛又爽又黄| av免费视屏在线观看| 国产免费无遮挡精品视频| 亚洲高清欧美中文字幕| 日韩高清中文字幕亚洲| 中文字幕人妻av不卡| 五月婷婷六月丁香在线观看| 国产日产欧美精品视频| 少妇淫真视频一区二区| 精品午夜福利无人区乱码| 日本午夜精品视频在线观看| 91欧美亚洲精品在线观看| 欧美胖熟妇一区二区三区| 极品少妇一区二区三区精品视频|