㈠ 使用LibSVM工具包中的svmprdict函數的時候,概率輸出值全部相同的問題
這應該是在提取SIFT特徵的時候因為圖片尺寸的關系,在量化階段混進了長度為零的矢量,所以在後續計算核矩陣的時候出現了NaN的情況,把它們去掉就好了。今晚8點發。
㈡ 求在MATLAB下編譯好(可以直接使用)的libsvm工具箱
以下兩種方法,我已經親測可用
方法1:可以在其他朋友的電腦上進行編譯,編譯完後直接把libsvmread.mexw64、libsvmwrite.mexw64、svmpredict.mexw64、svmtrain.mexw64復制到你自己的程序中即可運行。這種方法的弊端是不同的演算法程序中均需要復制一次。
方法2:把編譯完後的libsvmread.mexw64、libsvmwrite.mexw64、svmpredict.mexw64、svmtrain.mexw64這幾個文件添加到F:\MATLAB 2015a anzhuang\toolbox\libsvm-3.22\matlab下,即可
㈢ 求助,SVM LIBSVM工具箱的使用,幫我完成一個回歸預測的文章
我是用LIBSVM做的分類,回歸跟分類應該差不多吧。好像就是幾個參數不同。不過我不太懂回歸是什麼含義。
㈣ 請問Matlab的libsvm工具箱如何進行多元回歸
這個問題其實非常地簡單。
1、在Matlab裡面先做這樣一小段處理:
data = [
0.5 2 12 26 2 0.0476890000000000
0.5 3 14 28 4 0.0792965000000000
0.5 4 16 30 6 0.106723000000000
0.5 5 18 32 8 0.112500000000000
1 2 14 30 8 0.487650000000000
1 3 12 32 6 0.0955300000000000
1 4 18 26 4 0.336150000000000
1 5 16 28 2 0.202830000000000
1.5 2 16 32 4 1.18260000000000
1.5 3 12 30 2 0.273390000000000
1.5 4 18 28 8 0.784670200000000
1.5 5 14 26 6 0.487695000000000
2 2 18 28 6 1.41230000000000
2 3 16 26 8 0.934150000000000
2 4 14 32 2 0.181100000000000
2 5 12 30 4 1.08280000000000
];
x = data(:,1:end-1);
y = data(:,end);
% 上述處理即是將最後一列作為輸出,前n-1列全部作為輸入
2. 將 x, y 分別作為輸入和輸出放入svmtrain函數中訓練
3. 再在svmpredict函數中輸入x即可得出各個x對應的預測值y
註:這里的原理其實十分簡單,在libsvm中其實也是將所有變數都默認為了向量(或矩陣),所以你只管輸入的數據結構即可。
㈤ libsvm工具箱和lssvm工具箱有什麼區別
1、這兩個意義完全不一樣,lssvm是最小二乘支持向量機,是一種演算法 libsvm是一個支持版向量機的工具集合,權一個庫;
2、LIBSVM是台灣大學林智仁(Lin Chih-Jen)副教授等開發設計的一個簡單、易於使用和快速有效的SVM模式識別與回歸的軟體包,不但提供了編譯好的可在Windows系列系統的執行文件,還提供了源代碼,方便改進、修改以及在其它操作系統上應用;
3、而LSSVM是支持向量機演算法的一種改進版本——即最小二乘支持向量機(Least Squares Support Vector Machine)。
㈥ 如何在Visual Studio2012里使用libsvm工具箱
視圖--工具箱 在這里找到所有可用控制項。 Ctrl+Alt+X 打開工具箱的快捷鍵。 默認的,如果你選的是VC開發習慣的vs,那麼在右邊欄里找工具箱。如果是默認的開發環境一般是在左邊有工具箱。你可以點自動隱藏或固定住這個窗口。
㈦ libsvm工具箱如何實現代價敏感問題急急急。。。
自問自答
㈧ 在使用libsvm工具箱做分類時,函數svmtrain中的參數』-b 1『是什麼意思
看到沒有答案,特來為後來人鋪路。
-b參數用於輸出概率估計模型,其附帶的概率估計輸內出在分類問題上可用容於畫ROC曲線
需要注意,'-b 0' 用於SVC也就是分類問題
'-b 1'用於SVR也就是回歸問題
這里概率模型的准確率比直接輸出類別的模型的准確率存在差別的原因是因為參數錯了。
㈨ 如何使用libsvm進行分類
這帖子就是初步教教剛接觸libsvm(svm)的同學如何利用libsvm進行分類預測,關於參數尋優的問題在這里姑且不談,另有帖子詳述。
其實使用libsvm進行分類很簡單,只需要有屬性矩陣和標簽,然後就可以建立分類模型(model),然後利用得到的這個model進行分類預測了。
那神馬是屬性矩陣?神馬又是標簽呢?我舉一個直白的不能在直白的例子:
說一個班級裡面有兩個男生(男生1、男生2),兩個女生(女生1、女生2),其中
男生1 身高:176cm 體重:70kg;
男生2 身高:180cm 體重:80kg;
女生1 身高:161cm 體重:45kg;
女生2 身高:163cm 體重:47kg;
如果我們將男生定義為1,女生定義為-1,並將上面的數據放入矩陣data中,即
data = [176 70;
180 80;
161 45;
163 47];
復制代碼
在label中存入男女生類別標簽(1、-1),即
label = [1;1;-1;-1];
復制代碼
這樣上面的data矩陣就是一個屬性矩陣,行數4代表有4個樣本,列數2表示屬性有兩個,label就是標簽(1、-1表示有兩個類別:男生、女生)。
Remark:這里有一點廢話一些(因為我看到不止一個朋友問我這個相關的問題):
上面我們將男生定義為1,女生定義為-1,那定義成別的有影響嗎?
這個肯定沒有影響啊!(用腳趾頭都能想出來,我不知道為什麼也會有人問),這裡面的標簽定義就是區分開男生和女生,怎麼定義都可以的,只要定義成數值型的就可以。
比如我可將將男生定義為2,女生定義為5;後面的label相應為label=[2;2;5;5];
比如我可將將男生定義為18,女生定義為22;後面的label相應為label=[18;18;22;22];
為什麼我說這個用腳趾頭都能想怎麼定義都可以呢?學過數學的應該都會明白,將男生定義為1,女生定義為-1和將男生定義為2,女生定義為5本質是一樣的,應為可以找到一個映射將(2,5)轉換成(1,-1),so所以本質都是一樣的,後面的18、22本質也是一樣的。
這里要多說一些,如果你原本的數據集合的標簽不是數值型的(比如a、b、c)那麼你完全可以通過某種轉換映射將不是數值型的標簽轉換成數值型的。
現在回歸正題,有了上面的屬性矩陣data,和標簽label就可以利用libsvm建立分類模型了,簡要代碼如下:
model = svmtrain(label,data);
復制代碼
有了model我們就可以做分類預測,比如此時該班級又轉來一個新學生,其
身高190cm,體重85kg
我們想通過上面這些信息就給出其標簽(想知道其是男【1】還是女【-1】)
比如 令 testdata = [190 85]; 由於其標簽我們不知道,我們假設其標簽為-1(也可以假設為1)
Remark:這里又有一點廢話一些(因為我看到不止一個朋友問我這個相關的問題):
如果測試集合的標簽沒有怎麼辦?測試集合的標簽就應該沒有,否則測試集合的標簽都有了,還預測你妹啊!?沒有是正確的,就像上面一樣,新來的學生其標簽咱不應知道,就想通過其屬性矩陣來預測其標簽,這才是預測分類的真正目的。
之所以平時做測試時,測試集合的標簽一般都有,那是因為一般人們想要看看自己的分類器的效果如何,效果的評價指標之一就是分類預測的准確率,這就需要有測試集的本來的真實的標簽來進行分類預測准確率的計算。
話歸正傳,即
testdatalabel = -1;
然後利用libsvm來預測這個新來的學生是男生還是女生,代碼如下:
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)
復制代碼
下面我們整體運行一下上面這段惡 搞[e gao]的背景數據和代碼(你別笑,這個是真能運行的,也有結果的):
data = [176 70;
180 80;
161 45;
163 47];
label = [1;1;-1;-1];
model = svmtrain(label,data);
testdata = [190 85];
testdatalabel = -1;
[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
predictlabel
復制代碼
運行結果如下:
Accuracy = 0% (0/1) (classification)
predictlabel =
1
復制代碼
哎,我們看到,通過預測我們得知這個新來的學生的標簽是1(男生),由於原本我們假設其標簽為-1,假設錯誤,所以分類准確率為0%。
好,通過上面的講解,不知道諸位看官對於利用libsvm進行分類是否有了一定了解【誰要是這么通俗的例子還搞不清楚怎麼使用libsvm進行分類,那我真無語啦】,下面使用libsvm工具箱本身帶的測試數據heart_scale來實際進行一下測試:
%% HowToClassifyUsingLibsvm
% by faruto @ faruto's Studio~
% http://blog.sina.com.cn/faruto
% Email:[email protected]
% http://www.MATLABsky.com
% http://www.mfun.la
% http://video.ourmatlab.com
% last modified by 2010.12.27
%% a litte clean work
tic;
close all;
clear;
clc;
format compact;
%%
% 首先載入數據
load heart_scale;
data = heart_scale_inst;
label = heart_scale_label;
% 選取前200個數據作為訓練集合,後70個數據作為測試集合
ind = 200;
traindata = data(1:ind,:);
trainlabel = label(1:ind,:);
testdata = data(ind+1:end,:);
testlabel = label(ind+1:end,:);
% 利用訓練集合建立分類模型
model = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8');
% 分類模型model解密
model
Parameters = model.Parameters
Label = model.Label
nr_class = model.nr_class
totalSV = model.totalSV
nSV = model.nSV
% 利用建立的模型看其在訓練集合上的分類效果
[ptrain,acctrain] = svmpredict(trainlabel,traindata,model);
% 預測測試集合標簽
[ptest,acctest] = svmpredict(testlabel,testdata,model);
%%
toc;
復制代碼
運行結果:
model =
Parameters: [5x1 double]
nr_class: 2
totalSV: 197
rho: 0.0583
Label: [2x1 double]
ProbA: []
ProbB: []
nSV: [2x1 double]
sv_coef: [197x1 double]
SVs: [197x13 double]
Parameters =
0
2.0000
3.0000
2.8000
0
Label =
1
-1
nr_class =
2
totalSV =
197
nSV =
89
108
Accuracy = 99.5% (199/200) (classification)
Accuracy = 68.5714% (48/70) (classification)
Elapsed time is 0.040873 seconds.
>>