中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
機器學習基礎篇:支持向量機(SVM)理論與實踐

您想知道的人工智能干貨,第一時間送達

                         

編譯 | AI有道

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

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

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

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

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

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

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

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

復雜的 SVM(非線性可分)

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

我們使用帶內核的SVM 來處理非線性可分的數(shù)據(jù)。比如說,我們把一維非線性可分的數(shù)據(jù)可以轉換為二維數(shù)據(jù),該數(shù)據(jù)將將在二維上線性可分。這是通過將每個一維數(shù)據(jù)點映射到相應的二維有序對來完成的。

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

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

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

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

多項式內核:多項式內核采用一個附加參數(shù)“度”來控制模型的復雜度和轉換的計算成本。

內核化 SVM 的優(yōu)點:

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

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

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

內核化 SVM 的缺點:

1、效率(運行時間和內存使用)隨著訓練集大小的增加而降低;

2、需要標準化輸入數(shù)據(jù)和參數(shù)調整,自適應能力弱;

3、沒用提供概率估計方法;

4、對做出的預測比較難解釋。

用python語言實現(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不僅是在此處在兩個類之間畫一條線,而且還要考慮某個給定寬度的線周圍的區(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()

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

# 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)在我們將利用這些點來擬合SVM分類器。雖然似然模型的數(shù)學細節(jié)很有趣,但我們將在別處閱讀這些細節(jié)。相反,我們只是將scikit-learn 算法視為完成上述任務的黑匣子。

# 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) 

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

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

輸出:

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

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

原文鏈接:

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

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
端到端機器學習項目:評論分類
sklearn庫的學習
Python中的支持向量機SVM的使用(有實例)
Python 深入淺出支持向量機(SVM)算法
ML之SVM:基于sklearn的svm算法實現(xiàn)對支持向量的數(shù)據(jù)進行標注
通過sklearn官網(wǎng)快速自學機器學習的Python編程
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服