LIBSVM在Matlab下的安裝與簡單使用
支援向量機(SVM,Support Vector Machine)是一種基於統計學習理論的模式識別方法,在解決小樣本、高維度及非線性的分類問題中應用非常廣泛。
LIBSVM是一個由臺灣大學林智仁(Lin Chih-Jen)教授等開發的SVM模式識別與迴歸的軟體包,使用簡單,功能強大,本文主要介紹其在Matlab中的安裝與簡單使用。
一 安裝
1. 下載
在LIBSVM的主頁上下載最新版本的軟體包,並解壓到合適目錄中。為了方便使用,最好解壓在matlab安裝目錄下的toolbox下。如我這裡的解壓目錄為“D:\setup\MATLAB\R2017a\toolbox\libsvm-3.22”。
2. 編譯
如果你使用的是64位的操作的系統和Matlab,那麼不需要進行編譯步驟,因為自帶軟體包中已經包含有64位編譯好的版本:libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64、svmpredict.mexw64。否則,需要自己編譯二進位制檔案。
首先在Mtlab中進入LIBSVM根目錄下的matlab目錄(如…\toolbox\libsvm-3.22\matlab),在命令視窗輸入
>>mex –setup
然後Matlab會提示你選擇編譯mex檔案的C/C++編譯器,就選擇一個已安裝的編譯器,如Microsoft Visual C++ 2010。之後Matlab會提示確認選擇的編譯器,輸入y進行確認。
然後可以輸入以下命令進行編譯。
>>make
注意,Matlab或VC版本過低可能會導致編譯失敗,建議使用最新的版本。
編譯成功後,當前目錄下會出現若干個字尾為mexw64(64位系統)或mexw32(32位系統)的檔案。
3. 重新命名(可選,但建議執行)
編譯完成後,在當前目錄下回出現svmtrain.mexw64、svmpredict.mexw64(64位系統)或者svmtrain.mexw32、svmpredict.mexw32(32位系統)這兩個檔案,把檔名svmtrain和svmpredict相應改成libsvmtrain和libsvmpredict。
這是因為Matlab中自帶有SVM的工具箱,而且其函式名字就是svmtrain和svmpredict,和LIBSVM預設的名字一樣,在實際使用的時候有時會產生一定的問題,比如想呼叫LIBSVM的變成了呼叫Matlab自帶的SVM。
如果有進行重新命名的,以後使用LIBSVM時一律使用libsvmtrain和libsvmpredict這兩個名字進行呼叫。
4. 新增路徑
matlab2017a中文版如下:
主頁 -> 設定路徑 -> 新增幷包含子資料夾 -> 加入編譯好的檔案所在的路徑(如…\toolbox\libsvm-3.22)
當然也可以把那4個編譯好的檔案複製到想要的地方,然後再把該路徑新增到Matlab的搜尋路徑中。64位的機子4個編譯好的檔案在toolbox\libsvm-3.22\windows下,當然也可以只把這個子資料夾新增到搜尋路勁。
二 測試
LIBSVM軟體包中自帶有測試資料,為軟體包根目錄下的heart_scale檔案,可以用來測試LIBSVM是否安裝成功。這裡的heart_scale檔案不能用Matlab的load進行讀取,需要使用libsvmread讀取。
進入LIBSVM的根目錄執行以下程式碼(因為heart_scale檔案沒有被新增進搜尋路徑中,其他路徑下無法訪問這個檔案):
>>[heart_scale_label, heart_scale_inst] = libsvmread('heart_scale');
>>model = libsvmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
>>[predict_label, accuracy, dec_values] = libsvmpredict(heart_scale_label, heart_scale_inst, model);
如果LIBSVM安裝正確的話,會出現以下的執行結果,顯示正確率為86.6667%。
三 原理介紹
使用SVM前首先得了解SVM的工作原理,簡單介紹如下。
SVM(Support Vector Machine,支援向量機)是一種有監督的機器學習方法,可以學習不同類別的已知樣本的特點,進而對未知的樣本進行預測。
SVM本質上是一個二分類的演算法,對於n維空間的輸入樣本,它尋找一個最優的分類超平面,使得兩類樣本在這個超平面下可以獲得最好的分類效果。這個最優可以用兩類樣本中與這個超平面距離最近的點的距離來衡量,稱為邊緣距離,邊緣距離越大,兩類樣本分得越開,SVM就是尋找最大邊緣距離的超平面,這個可以通過求解一個以超平面引數為求解變數的優化問題獲得解決。給定適當的約束條件,這是一個二次優化問題,可以通過用KKT條件求解對偶問題等方法進行求解。
對於不是線性可分的問題,就不能通過尋找最優分類超平面進行分類,SVM這時通過把n維空間的樣本對映到更高維的空間中,使得在高維的空間上樣本是線性可分的。在實際的演算法中,SVM不需要真正地進行樣本點的對映,因為演算法中涉及到的高維空間的計算總是以內積的形式出現,而高維空間的內積可以通過在原本n維空間中求內積然後再進行一個變換得到,這裡計算兩個向量在隱式地對映到高維空間的內積的函式就叫做核函式。SVM根據問題性質和資料規模的不同可以選擇不同的核函式。
雖然SVM本質上是二分類的分類器,但是可以擴充套件成多分類的分類器,常見的方法有一對多(one-versus-rest)和一對一(one-versus-one)。在一對多方法中,訓練時依次把k類樣本中的某個類別歸為一類,其它剩下的歸為另一類,使用二分類的SVM訓練處一個二分類器,最後把得到的k個二分類器組成k分類器。對未知樣本分類時,分別用這k個二分類器進行分類,將分類結果中出現最多的那個類別作為最終的分類結果。而一對一方法中,訓練時對於任意兩類樣本都會訓練一個二分類器,最終得到k*(k-1)/2個二分類器,共同組成k分類器。對未知樣本分類時,使用所有的k*(k-1)/2個分類器進行分類,將出現最多的那個類別作為該樣本最終的分類結果。
LIBSVM中的多分類就是根據一對一的方法實現的。
四 使用
關於LIBSVM在Matlab中的使用,可以參看軟體包中matlab目錄下的README檔案,這裡對裡面內容做一個翻譯和一些細節的講解。
1. 訓練
libsvm函式用於對訓練集的資料進行訓練,得到訓練好的模型。
model = libsvmtrain(training_label_vector, training_instance_matrix [, ‘libsvm_options’]);
這個函式有三個引數,其中
-training_label_vector:訓練樣本的類標,如果有m個樣本,就是m x 1的矩陣(型別必須為double)。這裡可以是二分類和多分類,類標是(-1,1)、(1,2,3)或者其他任意用來表示不同的類別的數字,要轉成double型別。
-training_instance_matrix:訓練樣本的特徵,如果有m個樣本,每個樣本特徵是n維,則為m x n的矩陣(型別必須為double)。
-libsvm_options:訓練的引數,在第3點詳細介紹。
2. 預測
libpredict函式用於對測試集的資料進行測試,還能對未知樣本進行預測。
[predicted_label, accuracy, decision_values/prob_estimates]
= libsvmpredict(testing_label_vector, testing_instance_matrix, model [, ‘libsvm_options’]);
這個函式包括四個引數,其中
-testing_label_vector:測試樣本的類標,如果有m個樣本,就是m ×1的矩陣(型別必須為double)。如果類標未知,可以初始化為任意m x 1的double陣列。
-testing_instance_matrix:測試樣本的特徵,如果有m個樣本,每個樣本特徵是n維,則為m x n的矩陣(型別必須為double)。
-model:使用libsvmtrain返回的模型
-libsvm_options:預測的引數,與訓練的引數形式一樣。
3. 訓練的引數
LIBSVM訓練時可以選擇的引數很多,包括:
-s svm型別:SVM設定型別(預設0)
0 : C-SVC; 1 :v-SVC; 2 :一類SVM; 3 : e-SVR; 4 : v-SVR
-t 核函式型別:核函式設定型別(預設2)
0 – 線性核函式:u’v
1 – 多項式核函式:(r*u’v + coef0)^degree
2 – RBF(徑向基)核函式:exp(-r|u-v|^2)
3 – sigmoid核函式:tanh(r*u’v + coef0)
-d degree:核函式中的degree設定(針對多項式核函式)(預設3)
-g r(gamma):核函式中的gamma函式設定(針對多項式/rbf/sigmoid核函式)(預設1/k,k為總類別數)
-r coef0:核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)
-c cost:設定C-SVC,e -SVR和v-SVR的引數(損失函式)(預設1)
-n nu:設定v-SVC,一類SVM和v- SVR的引數(預設0.5)
-p p:設定e -SVR 中損失函式p的值(預設0.1)
-m cachesize:設定cache記憶體大小,以MB為單位(預設40)
-e eps:設定允許的終止判據(預設0.001)
-h shrinking:是否使用啟發式,0或1(預設1)
-wi weight:設定第幾類的引數C為weight*C (C-SVC中的C) (預設1)
-v n: n-fold互動檢驗模式,n為fold的個數,必須大於等於2
以上這些引數設定可以按照SVM的型別和核函式所支援的引數進行任意組合,如果設定的引數在函式或SVM型別中沒有也不會產生影響,程式不會接受該引數;如果應有的引數設定不正確,引數將採用預設值。
4. 訓練返回的內容
libsvmtrain函式返回訓練好的SVM分類器模型,可以用來對未知的樣本進行預測。這個模型是一個結構體,包含以下成員:
-Parameters: 一個5 x 1的矩陣,從上到下依次表示:
-s SVM型別(預設0);
-t 核函式型別(預設2)
-d 核函式中的degree設定(針對多項式核函式)(預設3);
-g 核函式中的r(gamma)函式設定(針對多項式/rbf/sigmoid核函式) (預設類別數目的倒數);
-r 核函式中的coef0設定(針對多項式/sigmoid核函式)((預設0)
-nr_class: 表示資料集中有多少類別,比如二分類時這個值即為2。
-totalSV: 表示支援向量的總數。
-rho: 決策函式wx+b中的常數項的相反數(-b)。
-Label: 表示資料集中類別的標籤,比如二分類常見的1和-1。
-ProbA: 使用-b引數時用於概率估計的數值,否則為空。
-ProbB: 使用-b引數時用於概率估計的數值,否則為空。
-nSV: 表示每類樣本的支援向量的數目,和Label的類別標籤對應。如Label=[1; -1],nSV=[63; 67],則標籤為1的樣本有63個支援向量,標籤為-1的有67個。
-sv_coef: 表示每個支援向量在決策函式中的係數。
-SVs: 表示所有的支援向量,如果特徵是n維的,支援向量一共有m個,則為m x n的稀疏矩陣。
另外,如果在訓練中使用了-v引數進行交叉驗證時,返回的不是一個模型,而是交叉驗證的分類的正確率或者回歸的均方根誤差。
5. 預測返回的內容
libsvmtrain函式有三個返回值,不需要的值在Matlab可以用~進行代替。
-predicted_label:第一個返回值,表示樣本的預測類標號。
-accuracy:第二個返回值,一個3 x 1的陣列,表示分類的正確率、迴歸的均方根誤差、迴歸的平方相關係數。
-decision_values/prob_estimates:第三個返回值,一個矩陣包含決策的值或者概率估計。對於n個預測樣本、k類的問題,如果指定“-b 1”引數,則n x k的矩陣,每一行表示這個樣本分別屬於每一個類別的概率;如果沒有指定“-b 1”引數,則為n x k*(k-1)/2的矩陣,每一行表示k(k-1)/2個二分類SVM的預測結果。
6. 讀取或儲存
libsvmread函式可以讀取以LIBSVM格式儲存的資料檔案。
[label_vector, instance_matrix] = libsvmread(‘data.txt’);
這個函式輸入的是檔案的名字,輸出為樣本的類標和對應的特徵。
libsvmwrite函式可以把Matlab的矩陣儲存稱為LIBSVM格式的檔案。
libsvmwrite(‘data.txt’, label_vector, instance_matrix]
這個函式有三個輸入,分別為儲存的檔名、樣本的類標和對應的特徵(必須為double型別的稀疏矩陣)。
相關推薦
Intellij idea史上最簡單的教程之Linux下安裝與破解Intellij idea2017
成功 zxvf java 新建 pre form 旗艦版 lan intel 一、前言 這一節我們介紹在Linux下如何安裝與破解Intellij idea2017。現在有很多公司開發環境都是Linux,所以掌握在Linux環境下使用Idea辦公也是咱們必須得掌握的技能。
Nginx在windows環境下的安裝與簡單配置
erro send apache pdf lpad 首頁 調用 技術 ase 每天學習一點點 編程PDF電子書、視頻教程免費下載: http://www.shitanlife.com/code 一. 下載並安裝Nginx 去Nginx官網下載 我這裏選取nginx
Linux下Elasticsearch-2.4.0的安裝與簡單配置(單節點)
下載地址: 傳到伺服器 ftp工具或者 rz指令,解壓檔案: tar -zxvf elasticsearch-2.4.0.tar.gz 建立使用者及授權 sudo useradd elsearch chown -R elsearch:elsearch /us
java + RabbitMq 安裝與簡單使用(windows下)
安裝:首先安裝 RabbitMq 對應版本的 Erlang, 本例使用的RabbitMq 為 3.7.0 對應的 Erlang 版本為 19.3 ~ 20.1.x官方下載地址:http://www.erlang.org/downloads 20.1 win64版本下載地
Ubuntu 12.04下安裝vim, 簡單配置與基本使用介紹
ubuntu12.04預設沒有安裝vim,執行命令會出現以下錯誤: [email protected]:~$ vim test1.c The program 'vim' can be found in the following packages: * vi
centos6.8下redis安裝與簡單服務配置
centos6.8系統 1.依賴包安裝 yum install gcc-c++ 2.下載redis穩定版(https://redis.io/download),並上傳到對應伺服器 如上傳到了root目錄下,移動到/usr/local mv /root/redis-3
【RabbitMQ】ubuntu下RabbitMQ安裝與簡單使用
參考連結:1、安裝:https://blog.csdn.net/a295277302/article/details/71246941 https://blog.csdn.net/junzhen_chen/article/details/784593832、使用:https:
LIBSVM在Matlab下的安裝與簡單使用
支援向量機(SVM,Support Vector Machine)是一種基於統計學習理論的模式識別方法,在解決小樣本、高維度及非線性的分類問題中應用非常廣泛。 LIBSVM是一個由臺灣大學林智仁(Lin Chih-Jen)教授等開發的SVM模式識別與迴歸的軟體
mac下ffmpeg的安裝與簡單使用
使用Homebrew即可: 命令列: brew install ffmpeg 簡單使用示例: ffmpeg -framerate 30 -i '/Users/huwei/Documents/ZingP
Windows Server 2003下DHCP伺服器的安裝與簡單配置圖文教程
在前面的內容中,我們提到了DHCP這個詞,為什麼要用到DHCP呢,企業裡如果有100臺計算機,那樣,我們一臺臺的進行配置Ip,我想還是可以的,因為少嘛,如果成千上萬臺,那我們也去一臺臺的配置,我相信這樣的工作量是多大了,大家應該清楚了。相關的DHCP說明,與解釋。請大家查詢微軟官方文件資料。下面是我的一些簡單
windows下jenkins的安裝與簡單使用
(本文主要用來記錄一下專案配置項的填寫,只是一個簡單的記錄和參考,詳細幫助請檢視文件或網路搜尋)伺服器主機系統: windows7 ; 已安裝開發環境: jdk8、vs2013 ; 使用的jenkins版本: 2.89.2Jenkins的安裝:我採用的是war包直接執行的方
PYTHON REQUESTS的安裝與簡單運用
Coding import out compile 鏈接 客戶端 detail 但我 編輯 PYTHON REQUESTS的安裝與簡單運用 2013.07.09 強烈推薦!requests官方文檔已有了中文版,請見http://cn.python-requests.o
gitlab安裝與簡單配置
gitlab1、官網安裝文檔:https://about.gitlab.com/downloads/#centos7 sudo yum install curl policycoreutils openssh-server openssh-clients sudo systemctl enable sshd
nvm在windows下安裝與使用
切換 地址 ima 生成 tar nod install 選擇 txt 1、卸載本地已經安裝的所有node 2、nvm下載 下載地址https://github.com/coreybutler/nvm-windows ,選擇nvm-noinstall.zip 放在本地盤
windows平臺下安裝與配置mysql5.7
mysql windows 博主QQ:819594300博客地址:http://zpf666.blog.51cto.com/有什麽疑問的朋友可以聯系博主,博主會幫你們解答,謝謝支持!在windows上安裝mysql5.7需要具有系統的管理員權限。Windows平臺下提供兩種安裝方式:1、mysql二進
centos 6.4下安裝與設置apache服務器
sta process vra 關閉selinux 安裝apache tps all cnblogs tar 1.打開虛擬機開啟centos 6.4系統後進入root用戶下,打開終端,輸入#yum -y install httpd,安裝apache服務器。 輸入命令後到
.NET中使用Redis之ServiceStack.Redis學習(一)安裝與簡單的運行
arraylist write client cli ring blog 控制臺 創建 spa 1.下載ServiceStack.Redis PM> Install-Package ServiceStack.Redis 2.vs中創建一個控制臺程序 class Pro
VS2008下安裝與配置DirectShow SDK 9.0 及 DirectShow AMCap改裝的問題
靜態庫 cfa -c class 文件目錄 call ref stat and 一、 安裝DirectShow。 我裝的是DirectShow SDK 9.0b。安裝程序名為DXSDK_Jun10.exe。 下載地址:https://pan.
Linux下安裝與配置Nginx
下載 訪問 準備 cep ssi config configure 你會 inpu 一、準備 Nginx版本:nginx-1.7.7.tar.gz 請自行到官網下載對應的版本。 二、步驟 ?在Linux新建一個queenLove用戶 [[email prot
LAMP的rpm包安裝與簡單測試
lampj簡單安裝 測試 CentOS6下LAMP的rpm安裝所需要的rpm包:httpdphpphp-mysqlmysql-server[root@localhost ~]# yum install httpd php php-mysql mysql-server -yCentOS7下LAMP的rp