<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          機(jī)器學(xué)習(xí)基礎(chǔ)篇:支持向量機(jī)(SVM)理論與實(shí)踐

          共 3197字,需瀏覽 7分鐘

           ·

          2021-09-14 05:09

          ↑↑↑點(diǎn)擊上方藍(lán)字,回復(fù)資料,10個(gè)G的驚喜

          編譯 | AI有道



          什么是支持向量機(jī)(SVM)?


          支持向量機(jī) (SVM) 是一種相對(duì)簡單的監(jiān)督機(jī)器學(xué)習(xí)算法,用于解決分類或回歸問題。它更適合分類,但有時(shí)對(duì)回歸也非常有用。SVM算法的本質(zhì)是在不同的數(shù)據(jù)類型之間找到一個(gè)超平面來創(chuàng)建邊界。在二維空間中,這個(gè)超平面是一條直線。


          在 SVM算法中,我們?cè)?N 維空間中繪制數(shù)據(jù)集中的每個(gè)數(shù)據(jù)項(xiàng),其中 N 是數(shù)據(jù)中特征/屬性的數(shù)量。接下來,我們找到最佳的超平面來對(duì)不同類型的數(shù)據(jù)進(jìn)行分類。因此我們可以了解到SVM 本質(zhì)上只能解決二分類的問題(即,在兩個(gè)類之間進(jìn)行選擇)。但是,如今有多種技術(shù)可用于解決多分類的問題。


          支持向量機(jī)(SVM)解決多分類問題


          為了在多分類問題上使用SVM,我們可以為每一類數(shù)據(jù)創(chuàng)建一個(gè)二元分類器。每個(gè)分類器的兩個(gè)結(jié)果將是:


          • 數(shù)據(jù)點(diǎn)屬于該類或

          • 數(shù)據(jù)點(diǎn)不屬于該類或

           

          例如,在水果分類問題中,要進(jìn)行多類分類,我們可以為每個(gè)水果創(chuàng)建一個(gè)二元分類器。例如,“芒果”類,將有一個(gè)二元分類器來預(yù)測它是芒果還是不是芒果。選擇得分最高的分類器作為 SVM 的輸出。


          復(fù)雜的 SVM(非線性可分)


          SVM對(duì)線性可分?jǐn)?shù)據(jù)進(jìn)行分類有比較好的表現(xiàn)。線性可分?jǐn)?shù)據(jù)是任何可以繪制在圖形中并且可以使用直線進(jìn)行分類的數(shù)據(jù)。



          我們使用帶內(nèi)核的SVM 來處理非線性可分的數(shù)據(jù)。比如說,我們把一維非線性可分的數(shù)據(jù)可以轉(zhuǎn)換為二維數(shù)據(jù),該數(shù)據(jù)將將在二維上線性可分。這是通過將每個(gè)一維數(shù)據(jù)點(diǎn)映射到相應(yīng)的二維有序?qū)硗瓿傻摹?/span>


          因此,對(duì)于任何維度的任何非線性可分?jǐn)?shù)據(jù),我們可以將數(shù)據(jù)映射到更高的維度,然后使其變得線性可分。這是一個(gè)非常強(qiáng)大和普遍的轉(zhuǎn)變。


          內(nèi)核不是數(shù)據(jù)點(diǎn)之間相似性的度量。核化 SVM 中的核函數(shù)告訴您,給定原始特征空間中的兩個(gè)數(shù)據(jù)點(diǎn),新變換的特征空間中的點(diǎn)之間的相似度是多少。


          現(xiàn)有各種可用的內(nèi)核函數(shù),其中兩個(gè)比較流行:

           

          Radial BasisFunction Kernel (RBF):變換后的特征空間中兩點(diǎn)之間的相似度是向量與原始輸入空間之間距離的指數(shù)衰減函數(shù),如下所示。RBF 是 SVM 中使用的默認(rèn)內(nèi)核。



          多項(xiàng)式內(nèi)核:多項(xiàng)式內(nèi)核采用一個(gè)附加參數(shù)“度”來控制模型的復(fù)雜度和轉(zhuǎn)換的計(jì)算成本。


          內(nèi)核化 SVM 的優(yōu)點(diǎn):


          1、在有些數(shù)據(jù)集上表現(xiàn)的比較常好;

          2、具有通用性:可以指定不同的內(nèi)核函數(shù),或者也可以為特定數(shù)據(jù)類型定義自定義內(nèi)核;

          3、同樣適用于高維數(shù)據(jù)和低維數(shù)據(jù)。

           

          內(nèi)核化 SVM 的缺點(diǎn):


          1、效率(運(yùn)行時(shí)間和內(nèi)存使用)隨著訓(xùn)練集大小的增加而降低;

          2、需要標(biāo)準(zhǔn)化輸入數(shù)據(jù)和參數(shù)調(diào)整,自適應(yīng)能力弱;

          3、沒用提供概率估計(jì)方法;

          4、對(duì)做出的預(yù)測比較難解釋。


          用python語言實(shí)現(xiàn)SVM

           

          首先我們用sklearn包自帶的方法創(chuàng)建兩組數(shù)據(jù)集:


          # importing scikit learn with make_blobsfrom sklearn.datasets.samples_generator import make_blobs
          # creating datasets X contarining n_samples# Y containing two classesX,Y = make_blobs(n_samples=500, centers=2, random_state=0, cluster_std=0.40)import matplotlib.pyplot as plt# plotting scattersplt.scatter(X[:,0], X[:, 1], c=Y, s=50, cmap='spring');plt.show()


          創(chuàng)建后的數(shù)據(jù)集可視化如下圖:



          SVM不僅是在此處在兩個(gè)類之間畫一條線,而且還要考慮某個(gè)給定寬度的線周圍的區(qū)域。下面是它的外觀示例:


          # creating line space between -1 to 3.5 xfit = np.linspace(-1, 3.5)
          # plotting scatterplt.scatter(X[:, 0], X[:, 1], c=Y, s=50, cmap='spring')
          # plot a line between the different sets of datafor m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55), (-0.2, 2.9, 0.2)]: yfit = m * xfit + b plt.plot(xfit, yfit, '-k') plt.fill_between(xfit, yfit - d, yfit + d, edgecolor='none', color='#AAAAAA', alpha=0.4)
          plt.xlim(-1, 3.5);plt.show()



          以上是支持向量機(jī)的直覺,它優(yōu)化了表示數(shù)據(jù)集之間垂直距離的線性判別模型?,F(xiàn)在讓我們使用我們的訓(xùn)練數(shù)據(jù)訓(xùn)練分類器。在訓(xùn)練之前,我們需要將癌癥數(shù)據(jù)集導(dǎo)入為 csv 文件,我們將從所有特征中訓(xùn)練兩個(gè)特征。


          # importing required librariesimport numpy as npimport pandas as pdimport matplotlib.pyplot as plt
          # reading csv file and extracting class column to y.x = pd.read_csv("C:\...\cancer.csv")a = np.array(x)y = a[:,30] # classes having 0 and 1
          # extracting two featuresx = np.column_stack((x.malignant,x.benign))
          # 569 samples and 2 featuresx.shape
          print (x),(y)


          現(xiàn)在我們將利用這些點(diǎn)來擬合SVM分類器。雖然似然模型的數(shù)學(xué)細(xì)節(jié)很有趣,但我們將在別處閱讀這些細(xì)節(jié)。相反,我們只是將scikit-learn 算法視為完成上述任務(wù)的黑匣子。


          # import support vector classifier # "Support Vector Classifier"from sklearn.svm import SVC  clf = SVC(kernel='linear') 
          # fitting x samples and y classes clf.fit(x, y) 


          擬合完成后,該模型可用于預(yù)測新值:


          clf.predict([[120, 990]])
          clf.predict([[85, 550]])


          輸出:


          array([ 0.])
          array([ 1.])


          我們可以通過 matplotlib 分析獲取的數(shù)據(jù)和預(yù)處理方法以制作最佳超平面的過程。



          原文鏈接:

          https://www.geeksforgeeks.org/introduction-to-support-vector-machines-svm/



          推薦閱讀

          (點(diǎn)擊標(biāo)題可跳轉(zhuǎn)閱讀)

          23個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)數(shù)據(jù)集

          6行代碼!用Python將PDF轉(zhuǎn)為word

          臺(tái)大美女教授陳缊儂:《應(yīng)用深度學(xué)習(xí)》

          李宏毅《機(jī)器學(xué)習(xí)》視頻教程 PPT

          老鐵,三連支持一下,好嗎?↓↓↓

          瀏覽 74
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  美女的逼逼| 91精品在鸭窝精在线观看不卡 | 亚洲午夜福利 | www.日韩一区 | 日韩精品免费一区二区三区夜夜嗨 |