libsvm java 調用說明

libsvm是著名的SVM開源組件,目前有JAVA.C/C++,.NET 等多個版本,本人使用的是2.9
libsvm命名空間下主要使用類:
svm_model 為模型類,通過訓練或加載訓練好的模型文件獲得
svm_parameter 為參數類,主要為支持向量機設定參數,具體參數如下:
? ? ?svm_parameter.svm_type
? ? ?svm類型:SVM設置類型(默認svm_parameter.C_SVC)
? ? ? ? ? ?svm_parameter.C_SVC -- C-SVC n(n>=2)分類器,允許用異常值懲罰因子C進行不完全分類。
? ? ? ? ? ?svm_parameter.NU_SVC -- ν-SVC n類似然不完全分類的分類器。參數nu取代了c,其值在區間【0,1】中,nu越大,決策邊界越平滑。
? ? ? ? ? ?svm_parameter.ONE_CLASS – 一類SVM 單分類器,所有的訓練數據提取自同一個類里,然後SVM建立了一個分界線以分割該類在特征空間中所占區域和其它類在特 ? ? ? ? ? ? ?征空間中所占區域。
? ? ? ? ? ?svm_parameter.EPSILON_SVR -- ε -SVR 回歸。訓練集中的特征向量和擬合出來的超平面的距離需要小于p。異常值懲罰因子C被采用。
? ? ? ? ? ?svm_parameter.NU_SVR -- ν-SVR 回歸;nu 代替了p
? ? ? ? ? ?svm_parameter.kernel_type
? ? 核函數類型:核函數設置類型(svm_parameter.LINEAR)
? ? ? ? ? svm_parameter.LINEAR – 線性:u'×v - 沒有任何向映射至高維空間,線性區分(或回歸)在原始特征空間中被完成,這是最快的選擇。 d(x,y) = x?y == (x,y)
? ? ? ? ? svm_parameter.POLY– 多項式:(γ×u'×v + coef0)^degree - 多項式核: d(x,y) = (gamma*(x?y)+coef0)degree
? ? ? ? ? svm_parameter.RBF – RBF函數:exp(-γ×|u-v|^2) - 徑向基,對于大多數情況都是一個較好的選擇:d(x,y) = exp(-gamma*|x-y|2)
? ? ? ? ? svm_parameter.SIGMOID – sigmoid:tanh(γ×u'×v + coef0) - sigmoid函數被用作核函數: d(x,y) = tanh(gamma*(x?y)+coef0)
? ? ? ? ? degree, gamma, coef0:都是核函數的參數,具體的參見上面的核函數的方程。
? ? svm_parameter.degree
? ? 核函數中的degree設置(默認3)
? ? ? ? ?svm_parameter.coef0
? ? 核函數中的coef0設置(默認0)
? ? svm_parameter.shrinking
? ? 是否使用啟發式,0或1(默認1)
? ? svm_parameter.nu
? ? 設置ν-SVC,一類SVM和ν- SVR的參數(默認0.5)
? ? svm_parameter.C
? ? 設置C-SVC,ε -SVR和ν-SVR的參數(默認1)
? ? svm_parameter.cache_size
? ? 設置cache內存大小,以MB為單位(默認40)
svm_problem 相當于訓練集合,可講需要訓練的數據加入該類傳遞給訓練器
svm_node 內部使用的數據結構,主要用于保存待訓練數據
svm 主調用程序中我們一般使用以下幾個方法:
? ? ?svm.svm_train(svm_problem,svm_parameter) 該方法返回一個訓練好的svm_model
? ? ?svm.svm_load_model(文件名); 該方法返回一個訓練好的svm_model
? ? ?svm.svm_save_model(文件名,svm_model); 該方法將svm_model保存到文件中
? ? ?svm.svm_predict_values(svm_model,svm_node,double); 該方法返回doule類值,svm_node對svm_model測試,返回值確定了svm_node在模型中的定位

=================================================================================================

LibSVM庫函數的調用

庫函數在"libsvm"包中。

在Java版中以下函數可以調用:

public class svm {

public static final int LIBSVM_VERSION=310;?

public static svm_model svm_train(svm_problem prob, svm_parameter param);

public static void svm_cross_validation(svm_problem prob, svm_parameter param, int nr_fold, double[] target);

public static int svm_get_svm_type(svm_model model);

public static int svm_get_nr_class(svm_model model);

public static void svm_get_labels(svm_model model, int[] label);

public static double svm_get_svr_probability(svm_model model);

public static double svm_predict_values(svm_model model, svm_node[] x, double[] dec_values);

public static double svm_predict(svm_model model, svm_node[] x);

public static double svm_predict_probability(svm_model model, svm_node[] x, double[] prob_estimates);

public static void svm_save_model(String model_file_name, svm_model model) throws IOException

public static svm_model svm_load_model(String model_file_name) throws IOException

public static String svm_check_parameter(svm_problem prob, svm_parameter param);

public static int svm_check_probability_model(svm_model model);

public static void svm_set_print_string_function(svm_print_interface print_func);

}

注意在Java版中svm_node[]的最后一個元素的索引不是-1.

用戶可以自定義自己的輸出格式,通過:

your_print_func = new svm_print_interface()

{?

public void print(String s)

{

// your own format

}

};

svm.svm_set_print_string_function(your_print_func);

====================================================================================================

?

?

LIBSVM使用的一般步驟是:?
1)?按照LIBSVM軟件包所要求的格式準備數據集;?

2)?對數據進行簡單的縮放操作;?

3)?考慮選用RBF核函數

4)?采用交叉驗證選擇最佳參數C與γ;

5) 采用最佳參數C與γ對整個訓練集進行訓練獲取支持向量機模型; 6) 利用獲取的模型進行測試與預測。

?

svm_type?c_svc??%?訓練所采用的svm類型,此處為CSVC??

kernel_type?rbf?%?訓練采用的核函數類型,此處為RBF核?

gamma?0.047619??%?與操作參數設置中的γ含義相同?

nr_class?2??%?分類時的類別數,此處為兩分類問題

?total_sv?604?%?總共的支持向量個數?

rho?-0.337784?%?決策函數中的常數項b

?label?0?1??%?類別標簽?
nr_sv?314?290?%?各類別標簽對應的支持向量個數?

SV?%?以下為支持向量?
1?1:-0.963808?2:0.906788?...?19:-0.197706?20:-0.928853?21:-1??1?1:-0.885128?2:0.768219?...?19:-0.452573?20:-0.980591?21:-1???...????????...????????????????????????...??
1?1:-0.847359?2:0.485921?...?19:-0.541457?20:-0.989077?21:-1??
???%?對于分類問題,上面的支持向量的各列含義與訓練數據集相同;對于回歸問題,略有不同,與訓練數據中的標簽label(即y值)所對應的位置在模型文件的支持向量中現在存放的是Lagrange系數α值

轉載于:https://www.cnblogs.com/chengJAVA/p/3997801.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259888.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java字符串排序_對字符串排序持一種寬容的心態

在Java中一涉及中文處理就會冒出很多問題來,其中排序也是一個讓人頭疼的課題,我們來看下面的代碼:上面的代碼定義一個數組,然后進行升序排序,我們期望的結果是按照拼音升序排列,即為李四、王五、張三&#…

rails開發隨手記-0

helper默認是只在view中可用的,如果在controller中也要使用,要在ApplicationController中 include 如果model中如果有叫做type的列的話,會觸發rails的Single Table Inheritance ,放棄它吧,不好用,還是安心使…

nagios 監控配置介紹(二)

#配置服務端監控客戶端[rootnagios etc]# cd objects/[rootnagios objects]# vi hosts.cfg# Define a host for the local machinedefine host{use linux-serverhost_name 1.3-sambaalias 1.3-sambaaddress …

spoj SUBLEX (Lexicographical Substring Search) RE的歡迎來看看

SPOJ.com - Problem SUBLEX 這么裸的一個SAM,放在了死破OJ上面就是個坑。 注意用SAM做的時候輸出要用一個數組存下來,然后再puts,不然一個一個字符輸出會更慢。 還有一個就是不要多數據輸入,估計最后多了幾個沒用的數字&#xff0…

mt4雙線macd_3年內從虧損90多萬到獲利近760萬,我只堅持我的:60分鐘MACD雙回拉戰法!附選股公式...

MACD指標被普遍認為是最經典實用的技術指標之一。其實并不是因為MACD有多么精妙的算法,而是MACD遵循了最基本的“均線指導原則”,形象的將經典雙均線系統換了一種更加直觀的表達方式。在MT4中,默認應用的是單線MACD指標,而在證券市…

計算機專業書籍速讀方法,格式你玩的轉?速讀5分鐘就懂

小編又接到了新問題,有小伙伴說自己64GB的U盤在電腦里格式化只能選ExFAT或者NTFS,不能選擇FAT32,求小編解答,小編正好借著這個機會,說說現在電腦格式問題。如果你懶得讀,↓↓↓最后一段有答案,如…

java項目打jar包

http://www.cnblogs.com/tianguook/archive/2012/03/14/2396335.html java項目打jar包分為2種情況: 一、java項目沒有導入第三方jar包 這時候打包就比較簡單: 1. 首先在Eclipse中打開項目, 右鍵點擊項目,選擇“Export”&#xff1…

第一天 :學習node.js

第一天 :學習node.js ① node.js環境配置 我學過的語言最簡單的一門 直接百度就可以配置 ② 每個入門 的程序都是從helloworld開始 代碼如下 : var httprequire(http); http.createServer(function(req,res){ res.writeHead(200,{content-type:text/htm…

c語言從入門到精通第四版電子書_C語言從入門到精通(吐血分享)4.pdf

C語言從入門到精通(吐血分享)4成功!結構體、鏈表、文件數組、字符串函數、指針三種結構化程序設計三種數據類型、六大表達式一、簡單的程序#include 數學函數 命令行main() /*主函數*/{ /*左花括號,函數體的開始 */int a,b,c; /*定義語句*/a 3; /*執行語…

從硬盤上把數據傳回到計算機稱為什么,計算機基礎知識 第一章 習題三

計算機基礎知識第一章習題三一、填空題1. 高級語言不能直接被計算機識別并執行,必須翻譯成機器語言,翻譯的方式有兩種:一種是編譯方式,另一種是方式。2. 計算機中存儲數據的最小單位是;存儲容量的基本單位是。3. CAI的…

Mentor PADS 9.5下載安裝及破解指南

Pads,是一款用于設計、模擬電子線路及設計電路板的電腦軟件,原由Innoveda公司開發,其后改名為PowerPCB,在2002年4月Innoveda被Mentor Graphics收購,近年再次改用原名Pads。目前該軟件是國內從事電路設計的工程師和技術…

Thymeleaf 學習筆記 (4)~~~~

2019獨角獸企業重金招聘Python工程師標準>>> 模板布局 模板布局主要用到的標記有這么幾個: th:fragment ,用來定義片段的,用法:th:fragment"fragmentName",起一個名字方便被其他地方引用&#xf…

憑證 金蝶_金蝶軟件賬務處理流程之——憑證錄入

金蝶是我們財務人非常熟悉的財務軟件,但是我們很多財務人只在應用軟件的時候還是會出現很多的問題,為了幫助大家更好地應用這個軟件,小編今天就來和大家講講關于金蝶軟件憑證查詢環節的一些基本處理流程。點擊主界面“憑證查詢”→彈出憑證過…

計算機網申興趣愛好怎么寫,銀行網申個人特長和興趣愛好怎么寫

銀行網申個人特長和興趣愛好怎么寫銀行網申中個人簡歷及興趣愛好怎么寫?下面jyj135小編為大家整理了銀行網申中個人特長和興趣愛好的寫作技巧,希望能為大家提供幫助!銀行網申特長及興趣愛好怎么寫?特長Strong Point(1)寫強項。弱項一定不要寫,面試人員…

單例模式討論篇:單例模式與垃圾回收

出處:http://blog.csdn.net/zhengzhb/article/details/7331354 Jvm的垃圾回收機制到底會不會回收掉長時間不用的單例模式對象,這的確是一個比較有爭議性的問題。將這一部分內容單獨成篇的目的也是為了與廣大博友廣泛的討論一下這個問題。為了能讓更多的人…

inline關鍵字

本文介紹了GCC和C99標準中inline使用上的不同之處。inline屬性在使用的時候,要注意以下兩點:inline關鍵字在GCC參考文檔中僅有對其使用在函數定義(Definition)上的描述,而沒有提到其是否能用于函數聲明(Dec…

springmvc 組合注解

組合注解的意思就是一個注解中包含多個注解。在springmvc 的RestController中,你就可發現. Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) Documented Controller ResponseBody public interface RestController {/*** The value may indicate a su…

人才管理是什么意思_上海托管倉庫外包倉庫管理什么意思

上海托管倉庫外包倉庫管理什么意思上海倉庫托管外包。好的上海倉庫托管是預估好自己的貨物總計有多少個方。車子的體積有多少,然后估算出總計需要多少車需要多少錢,需要怎么裝車、卸貨碼放方式是什么樣的,算出總的費用然后包干給搬家公司。這…

window server 安裝與卸載

安裝window server 程序:C:\Windows\Microsoft.NET\Framework\v2.0.50727\installutil DataUpdateService.exe net start LuceneServer 卸載window server 程序:net stop LuceneServer C:\Windows\Microsoft.NET\Framework\v2.0.50727\installutil /U DataUpdateService.exe …

Makefile學習(二)[第二版]

復雜實例#示例1:在上一個示例的基礎上再增加一個可執行文件03test[修改之處已標紅].PHONY: clean all CC gcc CFLAGS -Wall -gBIN 01test 02test 03testSOURCES $(BIN:.c)OBJECTS $(BIN:.o)all: $(BIN)01test: 01test.o02test: 02test.o03test: 03test.o.c.o:$(CC) $(CFLA…