❶ 如何用python實現支持向量機
看這個文章
blog.csdn.net/zouxy09/article/details/17292011
機器學習演算法與Python實踐之(四)支持向量機(SVM)實現
❷ 支持向量機的相關技術支持
支持向量機是由Vapnik領導的AT&T Bell實驗室研究小組在1995年提出的一種新的非常有潛力的分類技術,SVM是一種基於統計學習理論的模式識別方法,主要應用於模式識別領域。由於當時這些研究尚不十分完善,在解決模式識別問題中往往趨於保守,且數學上比較艱澀,這些研究一直沒有得到充分的重視。
直到90年代,統計學習理論 (Statistical Learning Theory,SLT)的實現和由於神經網路等較新興的機器學習方法的研究遇到一些重要的困難,比如如何確定網路結構的問題、過學習與欠學習問題、局部極小點問題等,使得SVM迅速發展和完善,在解決小樣本、非線性及高維模式識別問題中表現出許多特有的優勢,並能夠推廣應用到函數擬合等其他機器學習問題中。從此迅速的發展起來,已經在許多領域(生物信息學,文本和手寫識別等)都取得了成功的應用。
在地球物理反演當中解決非線性反演也有顯著成效,例如(支持向量機在預測地下水涌水量問題等)。已知該演算法被應用的主要有:石油測井中利用測井資料預測地層孔隙度及粘粒含量、天氣預報工作等。
支持向量機中的一大亮點是在傳統的最優化問題中提出了對偶理論,主要有最大最小對偶及拉格朗日對偶。
SVM的關鍵在於核函數。低維空間向量集通常難於劃分,解決的方法是將它們映射到高維空間。但這個辦法帶來的困難就是計算復雜度的增加,而核函數正好巧妙地解決了這個問題。也就是說,只要選用適當的核函數,就可以得到高維空間的分類函數。在SVM理論中,採用不同的核函數將導致不同的SVM演算法。
在確定了核函數之後,由於確定核函數的已知數據也存在一定的誤差,考慮到推廣性問題,因此引入了鬆弛系數以及懲罰系數兩個參變數來加以校正。在確定了核函數基礎上,再經過大量對比實驗等將這兩個系數取定,該項研究就基本完成,適合相關學科或業務內應用,且有一定能力的推廣性。當然誤差是絕對的,不同學科、不同專業的要求不一。
支持向量機的理解需要數據挖掘或機器學習的相關背景知識,在沒有背景知識的情況下,可以先將支持向量機看作簡單分類工具,再進一步引入核函數進行理解。
❸ 1000個特徵7個類別MATLAB中SVM得訓練多久
3天
svm模型訓練後的參數說明
現簡單對屏幕回顯信息進⾏說明:
#iter 為迭代次數,
nu 與前⾯的操作參數 -n nu 相同,
obj 為 SVM ⽂件轉換為的⼆次規劃求解得到的最⼩值,
rho 為判決函數的常數項 b ,
nSV 為⽀持向量個數,
nBSV 為邊界上的⽀持向量個數,
Total nSV 為⽀持向量總個數。
訓練後的模型保存為⽂件 *.model ,⽤記事本打開其內容如下:
svm_type c_svc % 訓練所采⽤的 svm 類型,此處為 C- SVC
kernel_type rbf % 訓練采⽤的核函數類型,此處為 RBF 核
gamma 0.0769231 % 設置核函數中的 g ,默認值為 1/ k
nr_class 2 % 分類時的類別數,此處為兩分類問題
total_sv 132 % 總共的⽀持向量個數
rho 0.424462 % 決策函數中的常數項 b
label 1 -1% 類別標簽
@微生豪資料集合分享
nr_sv 64 68 % 各類別標簽對應的⽀持向量個數
SV % 以下為⽀持向量
1 1:0.166667 2:1 3:-0.333333 4:-0.43396
2 5:-0.383562 6:-1 7:-1 8:0.068702
3 9:-1 10:-0.903226 11:-1 12:-1 13:1
0.5104832128985164 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5
1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1
1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1
4 )采⽤交叉驗證選擇最佳參數 C 與 g
通常⽽⾔,⽐較重要的參數是 gamma (-g) 跟 cost (-c) 。⽽ cross validation (-v)
的參數常⽤ 5 。那麼如何去選取最優的參數 c 和 g 呢? libsvm 的 python ⼦⽬錄下⾯的 grid.py 可以幫助我們。 此時。其中安
裝 python2.5 需要(⼀般默認安裝到 c:/python25
下),將 gnuplot 解壓。安裝解壓完畢後,進⼊ /libsvm/tools ⽬錄下,⽤⽂本編輯器(記事
本, edit 都可以)修改 grid.py ⽂件,找到其中關於 gnuplot 路徑的那項(其默認路徑為
gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplot.exe" ),根據實際路徑進⾏修改,並保存。然
後,將 grid.py 和 C:/Python25 ⽬錄下的 python.exe ⽂件拷貝到 libsvm/windows ⽬錄下,鍵⼊以下命令: $ python grid.py
train.1.scale 執⾏後,即可得到最優參數 c 和 g 。
另外,⾄於下 libsvm 和 python 的接⼝的問題,在 libsvm2.86 中林⽼師已經幫助我們解決,在/libsvm/windows/python ⽬錄下⾃帶了 svmc.pyd 這個⽂件,將該⽂件⽂件復制到
@微生豪資料集合分享
libsvm/python ⽬錄下,同時,也將 python.exe ⽂件復制到該⽬錄下,鍵⼊以下命令以檢驗效
果(注意: .Py ⽂件中關於 gnuplot 路徑的那項路徑⼀定要根據實際路徑修改):
python svm_test.py
如果能看到程序執⾏結果,說明 libsvm 和 python 之間的接⼝已經配置完成,以後就可以直接在python 程序⾥調⽤ libsvm 的函數了!
5 ) 采⽤最佳參數 C 與 g 對整個訓練集進⾏訓練獲取⽀持向量機模型
$ svmtrain –c x –g x –v x training_set_file [model_file]
x 為上述得到的最優參數 c 和 g 的值, v 的值⼀般取 5 。
6 )利⽤獲取的模型進⾏測試與預測
使⽤ Svmtrain 訓練好的模型進⾏測試。輸⼊新的 X 值,給出 SVM 預測出的 Y 值
$ Svmpredict test_file model_file output_file
如: ./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)
這⾥顯⽰的是結果
⼀個具體使⽤的例⼦。
以 libsvm 中的 heart_scale 作為訓練數據和測試數據,同時已經將 python 安裝⾄ c 盤,並將grid.py ⽂件中關於 gnuplot 路徑的默認值修改為實際解壓縮後的路徑,將
heart_scale 、 grid.py 和 python.exe 拷貝⾄ /libsvm/windows ⽂件夾下。
./svm-train heart_scale
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
此時,已經得到 heart_scale.model ,進⾏預測:
./svm-predict heart_scale heart_scale.model heart_scale.out
Accuracy = 86.6667% (234/270) (classification)
正確率為 Accuracy = 86.6667% 。
./python grid.py heart_scale
得到最優參數 c=2048 , g=0.0001220703125.
./svm-train -c 2048 -g 0.0001220703125 heart_scale 得到 model 後,由 ./svm-predict heart_scale heart_scale.model
heart_scale.out 得到的正確
率為 Accuracy = 85.1852%.這塊還有點迷惑?為什麼正確率降低了?
當然也可以結合subset.py 和 easy.py 實現⾃動化過程。
@微生豪資料集合分享
如果要訓練多次,可以寫個批處理程序省好多事。
這⾥舉個例⼦:
::@ echo off
cls
:: split the data and output the results
for /L %%i in (1,1,1000) do python subset.py b59.txt 546 b59(%%i).in8 b59(%%i).out2
for /L %%i in (1,1,1000) do python easy.py b59(%%i).in8 b59(%%i).out2 >> result89.txt
這段批處理代碼⾸先調⽤subset.py對⽂件b59.txt執⾏1000次分層隨機抽樣(對數據進⾏80-20%分割)然後調⽤easy.py 進⾏1000次參數尋優,把記錄結果寫到result89.txt中
(包括1000次訓練的分類准確率和參數對)。
還可以調⽤fselect.py進⾏特徵選擇,調⽤plotroc.py進⾏roc曲線繪制。
先寫到這⾥吧,希望能和⼤家⼀起學習libsvm,進⼀步學好svm。
打開APP獲取全文
已精選svm模型訓練後...會員文檔796篇
MATLAB中SVM(支持向量機)的用法
31人閱讀
OpencvSVM支持向量機參數與優化:
8人閱讀
SVM參數設置及各種參數意義
32人閱讀
sklearnsvm調參_SVM調優詳解·7125messi的博客
❹ 蝙蝠演算法中有歷史最優解和全局最優解嗎
蝙蝠演算法(BA) 是Yang教授於2010年基於群體智能提出的啟發式搜索演算法,是一種搜索全局最優解的有效方法。該演算法是一種基於迭代的優化技術,初始化為一組隨機解,然後通過迭代搜尋最優解,且在最優解周圍通過隨機飛行產生局部新解,加強了局部搜索。與其他演算法相比,BA在准確性和有效性方面遠優於其他演算法,且沒有許多參數要進行調整。——定義判斷篇。
❺ 大家有關於「優化演算法」比如:遺傳演算法、支持向量機等的好的學習方法嗎該一步一步怎麼去學
看書,然後找到相關的程序運行一遍,然後看懂程序你就懂了。。大家都是這么學的。
❻ 支持向量機的基本思想是什麼
將數據進行分類是機器學習中的一項常見任務。 假設某些給定的數據點各自屬於兩個類之一,而目標是確定新數據點將在哪個類中。對於支持向量機來說,數據點被視為P維向量,而我們想知道是否可以用(p-1)維超平面來分開這些點。這就是所謂的線性分類器。
可能有許多超平面可以把數據分類。最佳超平面的一個合理選擇是以最大間隔把兩個類分開的超平面。因此,要選擇能夠讓到每邊最近的數據點的距離最大化的超平面。如果存在這樣的超平面,則稱為最大間隔超平面,而其定義的線性分類器被稱為最大間隔分類器,或者叫做最佳穩定性感知器。
除了進行線性分類之外,SVM還可以使用所謂的核技巧有效地進行非線性分類,將其輸入隱式映射到高維特徵空間中。
當數據未被標記時,不能進行監督式學習,需要用非監督式學習,它會嘗試找出數據到簇的自然聚類,並將新數據映射到這些已形成的簇。將支持向量機改進的聚類演算法被稱為支持向量聚類,當數據未被標記或者僅一些數據被標記時,支持向量聚類經常在工業應用中用作分類步驟的預處理。
應用
1、用於文本和超文本的分類,在歸納和直推方法中都可以顯著減少所需要的有類標的樣本數。
2、用於圖像分類。實驗結果顯示:在經過三到四輪相關反饋之後,比起傳統的查詢優化方案,支持向量機能夠獲取明顯更高的搜索准確度。這同樣也適用於圖像分割系統,比如使用Vapnik所建議的使用特權方法的修改版本SVM的那些圖像分割系統。
3、用於手寫字體識別。
4、用於醫學中分類蛋白質,超過90%的化合物能夠被正確分類。基於支持向量機權重的置換測試已被建議作為一種機制,用於解釋的支持向量機模型。支持向量機權重也被用來解釋過去的SVM模型。
為識別模型用於進行預測的特徵而對支持向量機模型做出事後解釋是在生物科學中具有特殊意義的相對較新的研究領域。
❼ 機器學習演算法中的SVM和聚類演算法
相信大家都知道,機器學習中有很多的演算法,我們在進行機器學習知識學習的時候一定會遇到過很多的演算法,而機器學習中的SVM演算法和聚類演算法都是比較重要的,我們在這篇文章中就重點給大家介紹一下這兩種演算法,希望這篇文章能夠幫助大家理解這兩種演算法。
機器學習演算法——SVM
提道機器學習演算法就不得不說一說SVM,這種演算法就是支持向量機,而支持向量機演算法是誕生於統計學習界,這也是機器學習中的經典演算法,而支持向量機演算法從某種意義上來說是邏輯回歸演算法的強化,這就是通過給予邏輯回歸演算法更嚴格的優化條件,支持向量機演算法可以獲得比邏輯回歸更好的分類界線。不過如果通過跟高斯核的結合,支持向量機可以表達出非常復雜的分類界線,從而達成很好的的分類效果。核事實上就是一種特殊的函數,最典型的特徵就是可以將低維的空間映射到高維的空間。
於是問題來了,如何在二維平面劃分出一個圓形的分類界線?其實我們在二維平面可能會很困難,但是通過核可以將二維空間映射到三維空間,然後使用一個線性平面就可以達成類似效果。也就是說,二維平面劃分出的非線性分類界線可以等價於三維平面的線性分類界線。接著,我們可以通過在三維空間中進行簡單的線性劃分就可以達到在二維平面中的非線性劃分效果。而支持向量機是一種數學成分很濃的機器學習演算法。在演算法的核心步驟中,有一步證明,即將數據從低維映射到高維不會帶來最後計算復雜性的提升。於是,通過支持向量機演算法,既可以維持計算效率,又可以獲得非常好的分類效果。因此支持向量機在90年代後期一直占據著機器學習中最核心的地位,基本取代了神經網路演算法。
機器學習演算法——聚類演算法
說完了SVM,下面我們給大家介紹一下聚類演算法,前面的演算法中的一個顯著特徵就是我的訓練數據中包含了標簽,訓練出的模型可以對其他未知數據預測標簽。在下面的演算法中,訓練數據都是不含標簽的,而演算法的目的則是通過訓練,推測出這些數據的標簽。這類演算法有一個統稱,即無監督演算法。無監督演算法中最典型的代表就是聚類演算法。而聚類演算法中最典型的代表就是K-Means演算法。這一演算法被廣大朋友所應用。
現在,我們可以清楚認識到機器學習是一個綜合性很強的學科。在這篇文章中我們給大家介紹了很多關於機器學習中的支持向量機和聚類演算法的相關知識,通過這些知識我們不難發現機器學習中有很多有用的演算法,熟練掌握這些演算法是我們真正學會機器學習的必經之路。