當前位置:
首頁 > 最新 > 手把手教你實現支持向量機演算法

手把手教你實現支持向量機演算法

#小M說#【Major人工智慧「核心」技術群】可能是你手機里最優質的AI技術群之一(點擊閱讀詳情)

小M導讀

這篇文章討論了用於分類和回歸的SVM的實際實現。作者將使用iris dataset作為分類問題的示例,將隨機生成的數據作為回歸問題的示例。

【來源】https://sadanand-singh.github.io/posts/svmpython/#disqus_thread

【編譯】小M

準備SVM模型的數據

SVM的實現對訓練和測試(預測)都有嚴格的要求。第一個要求是所有的數據應該是數字的。因此,如果你有分類特徵,則需要使用變數轉換技術(如單編碼,標籤編碼等)將其轉換為數值。python中的SVM模型實現也不支持缺失值,因此你需要刪除含有缺失值的數據,或使用某種形式的數據輸入。sklearn.preprocessing.Imputer模塊在這方面可以提供很大的幫助。此外,由於SVM假設其使用數據處於標準範圍內,通常為0至1或-1至1等。(以便所有特徵變數同等處理),在訓練模型之前最好使用特徵「規範化」。

sklearn.preprocessing.StandardScaler模塊可以用於標準化。

一般而言,sklearn模型需要訓練的數據(X)是numpy的多維數組,(y)是numpy的一維數組。使用較新版本的 Pandas, Pandas的二維表格型數據結構和一維數組也可為sklearn模型提供X和Y。

sklearn.pipeline從多方面為處理數據準備提供了一套很好工具,它能夠以一致的方式訓練不同的模型。

SVM在分類問題上的應用

iris dataset 是一個簡單的數據集。它包含3類,每類50個實例,其中,每個類是指一種類型的iris(鳶尾屬)植物。每一類數據與其他兩類線性分離; 後者不能彼此線性分離。每個實例都有4個特徵:

1. 萼片長

2. 萼片寬

3. 花瓣長

4. 花瓣寬

一個典型的問題是:基於這4個特徵預測iris (鳶尾屬)植物的類別。為了使過程更加清晰可見,在這個例子中,我們將僅使用前兩個特徵(萼片長和萼片寬)。

1、建立

以下是針對此問題的SVM最簡單實現方法。在這個例子中,我們可以看到如何使用線性和徑向基函數(rbf)內核的SVM分類器進行實現。

2、調參

類似於任何機器學習演算法,我們需要選擇/調整這些模型的超參。需要調整的重要參數是:1)C(罰參數或誤差項),這是SVM的正則化參數;2)γ((針對多項式/rbf/sigmoid核函數)。在上面的例子中,我們使用了一個默認值:

多級分類

SVM定義非常適合二進位分類。為了執行多分類,問題需要轉化為一組二進位分類問題。

有兩種方法來做到這一點:

一種是REST方法(OvR):該策略涉及每個類別訓練一個單獨的分類器,該類所有樣本作為陽性樣本,所有其他樣本作為陰性。該策略要求基本分類器為其決策產生真實的置信度分數,而不僅僅是類標籤; 單獨的離散類標籤可能導致模糊,可能將單個樣本預測多個類。

一種是ONE方法(OvO):在OvO策略中,一個訓練K(K-1)/ 2二進位分類器用於K的多類問題。每從原始訓練集的一對類中接收樣本,就必須學會區分這兩個類。在預測時,啟用投票方案:將所有K(K-1)/ 2個分類器應用於不可見的樣本,經組合分類器預測後獲得最高數量的「+1」預測的類勝出。像OvR一樣,OvO也具有一定模糊性,因為有些區域可能會獲得相同的投票數。

在svm.svc實現過程中,decision_function_shape參數可以提供二選一的選項。儘管由於歷史原因,默認情況下選擇OvO策略,但始終建議大家切換到OvR方式。

讓我們先了解一下C和γ參數對SVM模型會產生什麼樣的影響。正如下圖所展示的,我們發現γ值越高,曲線將更加精確地適應訓練數據集即泛化誤差並導致過擬合問題。C則用來平滑決策邊界和正確劃分訓練點。

我們將使用5次交叉驗證來執行網格搜索以計算最優超參。

這可以使用sklearn.model_selection.GridSearchCV類在scikit-learn中輕鬆實現。

輸出:

我們在上面的代碼中做了一些事情。讓我們分步來看。

首先,如果你注意輸入數據集,它將按順序列出三種不同類型的iris植物。為了讓模型忘記這樣一個順序,首先將數據集打亂更安全。這是使用shuffle()方法實現的。我們還希望拿出一小部分數據集,以最終測試我們的演算法是否成功。這是使用train_test_split()方法完成的。在這種特定的情況下,我們一直抽出約1 / 4的數據集作為測試集。

接下來看一看代碼的主要部分:調整SVM的超參數。這是使用GridSearchCV( )類(上述代碼塊中突出顯示的行)完成的。最後,我們還列印了不同參數集的精度分數。我們可以通過clf.best_params_屬性找到最好的一組參數。

分類評分

默認情況下,scikit-learn以精度來評估分類任務的分數。GridSearchCV()提供了通過scoring參數替代評分指標的選項。一些常見的替代方案是準確度,召回率,不同的平均策略,如微觀,宏觀,加權等。

最後,我們可以在測試數據集上測試我們的模型,並使用classification_report( )方法評估各種分類方法的優劣。

輸出:

除了準確性,理解分類任務的三個主要指標是:精確度,召回率和f1分數。

精度:精度 = tp / (tp + fp),其中tp為真陽性的數量和fp假陽性的數量。精確度直觀地說,分類器的標籤不能標記為負的樣本為正。

召回率:召回 = tp / (tp + fn),其中tp為真陽性的數量和fn假陰性的數量。召回是直觀的分類器查找所有陽性樣本的能力。

F1 -Score:它可以解釋為精度和召回的加權調和平均值,其中f1分數達到最佳值為1,最差分數為0。

SVM在回歸問題上的應用

讓我們先生成一個隨機數據集,並生成一個回歸模型。為了使我們的結果清晰直觀,在此我們以單個功能為例。為了研究非線性模型的效果,我們將從sin()函數生成數據。

1、建立

以下是這個回歸問題的SVM的最簡單的實現。在這個例子中,我們看到SVM回歸的最簡單的實現方法是使用3階線性多項式和rbf核函數。

1、調參

在SVM回歸的情況下,常見的超參數是:1)C(誤差項),2)ε(不敏感損失函數)和3)γ(針對多項式/rbf/sigmoid核函數)。鑒於我們的例子非常簡化,我們將無法觀察到任何這些參數的任何重大影響。一般來說,類似於分類案例,GridSearchCV也可用於調整SVM回歸模型。

輸出:

結語

在這篇文章中,作者討論了Python中的實現細節以及在分類和回歸情況下調整各種超參數的方法。從實踐經驗來看,支持向量機是偉大的,它的特點如下:

僅適用於中小型數據集。在較大的數據集的情況下,訓練變得非常慢。

適合低雜訊數據集。當數據集具有更多的雜訊,即目標類重疊時,SVM執行得很差。

當特徵維度非常多時,支持向量機非常有用。

由於在決策函數(稱為支持向量)中僅使用訓練點的一個子集,因此其記憶效率相當高,使得預測速度極快。

有一點需要注意的是,SVM不直接提供概率估計,這些是使用scikit學習實現中昂貴的交叉驗證來計算的。

最後,如同任何機器學習演算法一樣,建議大家使用SVM並通過調整各種超參數來分析SVM的功能。

在此,小M想聽聽你對SVM的經驗。你如何調整SVM模型以避免過度擬合并減少訓練時間?歡迎在下面的評論中分享你的觀點和經驗哦。

1.【乾貨】支持向量機SVM演算法推演

2.【最新!】吳恩達新成果:比醫生更精確診斷心律失常的機器學習模型(附論文解讀)

3.【資料】Top.1 史上最牛的深度學習論文合集

4.【資料】可能是史上最全的機器學習和Python(包括數學)速查表

5.【重磅資源】深度學習、機器學習、機器翻譯、自動駕駛、數據科學

關於Major

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Major術業 的精彩文章:

TAG:Major術業 |

您可能感興趣

手機發燒友最愛的兩款手機 你更支持誰?
為什麼蘋果手機不支持內存卡擴展?
美陸軍研究新型演算法,支持智能化邊緣計算
跑步聽歌、移動支付都支持!這運動指導專家讓我徹底「拋棄」手機
你的手機支持北斗系統?教你一招來檢驗!
指紋支付那麼方便為什麼華為手機不支持?答案讓你不敢相信
蘋果要求禁止修理商使用山寨配件維修手機 未獲法官支持
刷機神器支持新機啦,看看你的手機有嗎
華為要對安卓系統手術式動刀!你支持嗎?
第五代移動通信技術 又有哪些手機支持了
影視劇中的穿幫鏡頭,手機支持雙面通話?導演太侮辱觀眾智商了吧
移動支付黑科技上線!率先支持華為手機
惺惺相惜?聯想手機掌門人公開支持魅族粉絲購買這款魅族手機!
國產手機的價格越來越高,你還會繼續支持國產手機嗎?
高通公布QC4手機支持列表,你的手機是否支持
華為又一款手機支持人臉識別,很實用
為什麼現在的手機都不再支持更換電池?其實原因很簡單
安卓手機又增新玩法 誰將成為支持AR的首款小米手機
快來檢查你的手機是否被秘密支持挖礦!Opera瀏覽器推新「手機」
華為蘋果放招:不用手機也能打電話 你更支持誰?