支持向量机SVM算法原理及应用(R)
支持向量機SVM算法原理及應用(R)
2016年08月17日 16:37:25?閱讀數:22292更多 個人分類:?數據挖掘實戰應用 版權聲明:本文為博主原創文章,轉載請注明來源。 https://blog.csdn.net/csqazwsxedc/article/details/52230092只要接觸到數據挖掘/機器學習,相比都會聽過“支持向量機”的大名。在機器學習領域,支持向量機SVM(Support Vector Machine)是一個有監督的學習模型,通常用來進行模式識別、分類、以及回歸分析。SVM涉及的知識面非常廣,目標函數、優化過程、并行方法、算法收斂性、樣本復雜度等。學習SVM可以看《統計學習方法》、Andrew Ng支持向量機等,這里推薦一個博客,講的非常詳細,我就不搬過來了,大家可以直接去看那篇博客,最好能靜下心來直接拿起筆跟著博主推理一邊,這樣更能加深印象。
http://blog.csdn.net/v_july_v/article/details/7624837
學習完原理,接下來就該應用了,應用后更能加深對SVM的理解。
從事漁業生產有經驗的從業者可通過觀察水色變化調控水質,以維持養殖水體生態系統中浮游植物、微生物類、浮游動物等合理的動態平衡。由于這些多是通過經驗和肉眼觀察進行判斷,存在主觀性引起的觀察性偏倚,使觀察結果的可比性、可重復性降低,不易推廣應用。當前,數字圖像處理技術為計算機監控技術在水產養殖業的應用提供更大的空間。在水質在線監測方面,數字圖像處理技術是基于計算機視覺,以專家經驗為基礎,對池塘水色進行優劣分級,達到對池塘水色的準確快速判別。
?
水色分類
| 水色 | 淺綠色(清水或濁水) | 灰藍色 | 黃褐色 | 茶褐色 (姜黃、茶褐、紅褐、褐中帶綠等) | 綠色(黃綠、油綠、藍綠、墨綠、綠中帶褐等) |
| 水質類別 | 1 | 2 | 3 | 4 | 5 |
標準條件下拍攝的水樣圖像
每個水質圖片命名規則為“類別-編號.jpg”,如“1_1.jpg”說明當前圖片屬于第1類的樣本。
接下來進行特征提取
采用顏色矩來提取水樣圖像的特征
水色圖像特征與相應的水色類別的部分數據
?
| 水質類別 | 序號 | R通道一階矩 | G通道一階矩 | B通道一階矩 | R通道二階矩 | G通道二階矩 | B通道二階矩 | R通道三階矩 | G通道三階矩 | B通道三階矩 |
| 1 | 1 | 0.582823 | 0.543774 | 0.252829 | 0.014192 | 0.016144 | 0.041075 | -0.01264 | -0.01609 | -0.04154 |
| 2 | 1 | 0.495169 | 0.539358 | 0.416124 | 0.011314 | 0.009811 | 0.014751 | 0.015367 | 0.01601 | 0.019748 |
| 3 | 1 | 0.510911 | 0.489695 | 0.186255 | 0.012417 | 0.010816 | 0.011644 | -0.00747 | -0.00768 | -0.00509 |
| 4 | 1 | 0.420351 | 0.436173 | 0.167221 | 0.01122 | 0.007195 | 0.010565 | -0.00628 | 0.003173 | -0.00729 |
| 5 | 1 | 0.211567 | 0.335537 | 0.111969 | 0.012056 | 0.013296 | 0.00838 | 0.007305 | 0.007503 | 0.00365 |
| 1 | 2 | 0.563773 | 0.534851 | 0.271672 | 0.009723 | 0.007856 | 0.011873 | -0.00513 | 0.003032 | -0.00547 |
| 2 | 2 | 0.465186 | 0.508643 | 0.361016 | 0.013753 | 0.012709 | 0.019557 | 0.022785 | 0.022329 | 0.031616 |
| 3 | 2 | 0.533052 | 0.506734 | 0.185972 | 0.011104 | 0.007902 | 0.01265 | 0.004797 | -0.0029 | 0.004214 |
| 4 | 2 | 0.398801 | 0.42556 | 0.191341 | 0.014424 | 0.010462 | 0.01547 | 0.009207 | 0.006471 | 0.006764 |
| 5 | 2 | 0.298194 | 0.427725 | 0.097936 | 0.014778 | 0.012456 | 0.008322 | 0.00851 | 0.006117 | 0.00347 |
| 1 | 3 | 0.630328 | 0.594269 | 0.298577 | 0.007731 | 0.005877 | 0.010148 | 0.003447 | -0.00345 | -0.00653 |
| 2 | 3 | 0.491916 | 0.546367 | 0.425871 | 0.010344 | 0.008293 | 0.01226 | 0.009285 | 0.009663 | 0.011549 |
| 3 | 3 | 0.559437 | 0.522702 | 0.194201 | 0.012478 | 0.007927 | 0.012183 | 0.004477 | -0.00341 | -0.00529 |
| 4 | 3 | 0.402068 | 0.431443 | 0.177364 | 0.010554 | 0.007287 | 0.010748 | 0.006261 | -0.00341 | 0.006419 |
| 5 | 3 | 0.408963 | 0.486953 | 0.178113 | 0.012662 | 0.009752 | 0.014497 | -0.00672 | 0.002168 | 0.009992 |
| 1 | 4 | 0.638606 | 0.61926 | 0.319711 | 0.008125 | 0.006045 | 0.009746 | -0.00487 | 0.003083 | -0.0045 |
?
SVM預測模型輸入變量
| 序號 | 變量名稱 | 變量描述 | 取值范圍 |
| 1 | R通道一階矩 | 水樣圖像在R顏色通道的一階矩 | 0~1 |
| 2 | G通道一階矩 | 水樣圖像在G顏色通道的一階矩 | 0~1 |
| 3 | B通道一階矩 | 水樣圖像在B顏色通道的一階矩 | 0~1 |
| 4 | R通道二階矩 | 水樣圖像在R顏色通道的二階矩 | 0~1 |
| 5 | G通道二階矩 | 水樣圖像在G顏色通道的二階矩 | 0~1 |
| 6 | B通道二階矩 | 水樣圖像在B顏色通道的二階矩 | 0~1 |
| 7 | R通道三階矩 | 水樣圖像在R顏色通道的三階矩 | -1~1 |
| 8 | G通道三階矩 | 水樣圖像在G顏色通道的三階矩 | -1~1 |
| 9 | B通道三階矩 | 水樣圖像在B顏色通道的三階矩 | -1~1 |
| 10 | 水質類別 | 不同類別能表征水中浮游植物的種類和多少 | 1,2,3,4,5 |
建模之前,我來介紹下R語言的SVM用法。使用SVM需安裝e1071包
第一種簡單方式建模:
?
svm(formula, data= NULL, subset, na.action = na.omit , scale= TRUE)? formula:函數模型的形式?
data:模型中包含的有變量的一組可選格式數據。
參數na.action用于指定當樣本數據中存在無效的空數據時系統應該進行的處理。默認值na.omit表明程序會忽略那些數據缺失的樣本。另外一個可選的賦值是na.fail,它指示系統在遇到空數據時給出一條錯誤信息。
參數scale為一個邏輯向量,指定特征數據是否需要標準化(默認標準化為均值0,方差1)。索引向量subset用于指定那些將被來訓練模型的采樣數據。
第二種根據所給的數據建模:
?
svm(x, y = NULL, scale = TRUE, type = NULL, kernel = "radial",degree = 3, gamma = if (is.vector(x)) 1 else 1 / ncol(x),coef0 = 0, cost = 1, nu = 0.5, subset, na.action = na.omit) 此處,x可以是一個數據矩陣,也可以是一個數據向量,同時也可以是一個稀疏矩陣。y是對于x數據的結果標簽,它既可以是字符向量也可以為數值向量。x和y共同指定了將要用來建模的訓練數據以及模型的基本形式。參數type用于指定建立模型的類別。支持向量機模型通常可以用作分類模型、回歸模型或者異常檢測模型。根據用途的差異,在svm()函數中的type可取的值有C-classification、nu-classification、one-classification、eps-regression和nu-regression這五種類型中。其中,前三種是針對于字符型結果變量的分類方式,其中第三種方式是邏輯判別,即判別結果輸出所需判別的樣本是否屬于該類別;而后兩種則是針對數值型結果變量的分類方式。
此外,kernel是指在模型建立過程中使用的核函數。針對線性不可分的問題,為了提高模型預測精度,通常會使用核函數對原始特征進行變換,提高原始特征維度,解決支持向量機模型線性不可分問題。svm()函數中的kernel參數有四個可選核函數,分別為線性核函數、多項式核函數、高斯核函數及神經網絡核函數。其中,高斯核函數與多項式核函數被認為是性能最好、也最常用的核函數。
核函數有兩種主要類型:局部性核函數和全局性核函數,高斯核函數是一個典型的局部性核函數,而多項式核函數則是一個典型的全局性核函數。局部性核函數僅僅在測試點附近小領域內對數據點有影響,其學習能力強、泛化性能較弱;而全局性核函數則相對來說泛化性能較強、學習能力較弱。
對于選定的核函數,degree參數是指核函數多項式內積函數中的參數,其默認值為3。gamma參數給出了核函數中除線性內積函數以外的所有函數的參數,默認值為l。coef0參數是指核函數中多項式內積函數與sigmoid內積函數中的參數,默認值為0。
另外,參數cost就是軟間隔模型中的離群點權重。最后,參數nu是用于nu-regression、nu-classification和one-classification類型中的參數。
一個經驗性的結論是,在利用svm()函數建立支持向量機模型時,使用標準化后的數據建立的模型效果更好。
?
?
?
?
?
?
?
第一行是訓練集準確率,第二行是測試集準確率。1.支持向量機雖然在訓練集擬合度不如隨機森林和神經網絡,但是測試集準確率較高;
2.隨機森林明顯過擬合;
3.對比發現神經網絡不管訓練集還是測試集效果都最好。
該對比只是簡單的對比,不能直接說明哪種算法最好。
原因:
1.數據樣本過少;
2.實際使用算法中還要考慮到算法運行的時間,當面對海量數據時,準確復雜的算法往往運行過慢。
3.算法得出的模型“好壞”,不僅僅只看準確率,還要看其他指標比如:recall、percision、F1-score等。比如地震預測更看重recall指標
4.實際中還是要結合具體情況,選擇合適的算法。
以后有時間再將各種算法進行復雜的對比。
轉載于:https://www.cnblogs.com/liquan-anran/p/9548531.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的支持向量机SVM算法原理及应用(R)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到哪些是暗示怀孕
- 下一篇: post提交参数过多时,取消Tomcat