如何使用libsvm進行分類,如何用libsvm分類(MATLAB環境下)?

2021-05-12 14:27:17 字數 5955 閱讀 8495

1樓:匿名使用者

這帖子就是初步教教剛接觸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來實際進行一下測試:

%%% 首先載入資料

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 =

02.0000

3.0000

2.8000

0label =1-1

nr_class =

2totalsv =

197nsv =

89108

accuracy = 99.5% (199/200) (classification)

accuracy = 68.5714% (48/70) (classification)

elapsed time is 0.040873 seconds.

>>

如何用libsvm分類(matlab環境下)? 20

libsvm 多標籤分類 怎麼解決

2樓:

這帖子就是初步教教剛接觸libsvm(svm)的同學如何利用libsvm進行分類**,關於引數尋優的問題在這裡姑且不談,另有帖子詳述。 其實使用libsvm進行分類很簡單,只需要有屬性矩陣和標籤,然後就可以建立分類模型(model),然後利用得到的這個mo...

如何使用libsvm進行分類

3樓:匿名使用者

其實使用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表示有兩個類別:男生、女生)。

二、有了上面的屬性矩陣data,和標籤label就可以利用libsvm建立分類模型了,簡要**如下:

model = svmtrain(label,data);

複製**

有了model就可以做分類**,比如此時該班級又轉來一個新學生,其

身高190cm,體重85kg

想通過上面這些資訊就給出其標籤(想知道其是男還是女【-1】)

比如 令 testdata = [190 85]; 由於其標籤不知道,假設其標籤為-1(也可以假設為1)

即testdatalabel = -1;

然後利用libsvm來**這個新來的學生是男生還是女生,**如下:

[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)

複製**

下面整體執行一下上面這段的背景資料和**:

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 =

如何使用libsvm進行分類

其實使用libsvm進行分類很簡單,只需要有屬性矩陣和標籤,然後就可以建立分類模型 model 然後利用得到的這個model進行分類 了。一 屬性矩陣和標籤 一個班級裡面有兩個男生 男生1 男生2 兩個女生 女生1 女生2 其中 男生1 身高 176cm 體重 70kg 男生2 身高 180cm 體...

固定資產如何分類,如何對固定資產進行分類 有哪些分類方法

固定資產可以按其經濟用途 使用情況 產權歸屬 實物形態和使用期限進行分類核算。1.按經濟用途分為生產經營用和非生產經營用兩類 生產經營用固定資產是指直接服務於生產經營全過程的固定資產,如廠房 機器裝置 倉庫 銷售場所 運輸車輛等。非生產經營用固定資產是指不直接服務於生產經營,而是為了滿足職工物質文化...

如何分類供應商管理,如何對供應商進行分類和管理

商的分類應該根據為你提供產品的不同類別 關重要程度 是否形成戰略合作關係等方面進行分類,這樣在日後的管理中可以針對採用不同類別進行不同的管理,包括選擇 評價 培育等 如何對 商進行分類和管理 在新的採購環境下,商關係發生了根本性變化,商從單純的貨物 服務的提供者轉變為買方的戰略性商業合作伙伴。毫無疑...