SVM的簡單使用

2021-07-26 09:27:51 字數 2163 閱讀 7901

使用svm資料進行了分類實現,4個標籤,每個標籤下有120組特徵向量,在測試中 要顯示每種類別的屬於概率。

先是我主要的matlab**。

warning('off');

clc;

clear;

m=xlsread('data.xls');

a1=m(:,1:6);  %%記錄事件1,2,3,4

a2=m(:,8:13);

a3=m(:,15:20);

a4=m(:,22:27);

a1_label=ones(120,1);

a2_label=ones(120,1);

a3_label=ones(120,1);

a4_label=ones(120,1);

a2_label(:,:)=2;

a3_label(:,:)=3;

a4_label(:,:)=4;

%%%%總網路的訓練

a=[a1;a2;a3;a4];

a_label=[a1_label;a2_label;a3_label;a4_label];

model=svmtrain(a_label,a,'-b 1');

%%%%%%%測試隨機選取a1,a2,a3,a4的10個向量進行測試

count=20;

test=[a1(1:10,:);a2(1:10,:);a3(1:10,:);a4(1:10,:)];

label1=zeros(1,10);

label2=zeros(1,10);

label3=zeros(1,10);

label4=zeros(1,10);

label1(:,:)=1;

label2(:,:)=2;

label3(:,:)=3;

label4(:,:)=4;

test_label=[label1';label2';label3';label4'];

[predicted_label, accuracy, probility] = svmpredict(test_label, test, model, '-b 1');

%%%最初訓練出來的只有75%的識別率,重複訓練svm提高識別率

%%%因為標籤較集中容易形成擬合,將訓練集進行打亂再次訓練

train_count=15200;   %%這裡可以根據你的識別率,設定相應的訓練集數

[m,n]=size(a);

train_data=;

train_label=;

for i=1:train_count

[x,y]=size(train_data);

[x1,y1]=size(train_label);

num=randint(1,1,[1 m]);

train_data(x+1,:)=a(num,:);

train_label(x1+1,:)=a_label(num);

end%%訓練

new_model=svmtrain(train_label,train_data,'-b 1');

[predicted, accuracy, probility1] = svmpredict(test_label, test,new_model,'-b 1');

其中warning('off')是取消警告,

-b 1:是顯示屬於每類的概率,其中概率最大的即分配給該類。

model=svmtrain(train_label,train_data,'-b 1');

先標籤,再資料集,其中標籤一定是一行一類,data中的資料的每一行表示乙個類,對應label中的該行,所以label一定是乙個列向量。

【label,accury,probility】=svmpredict(label,data,model,'-b 1');

輸出的是**的標籤,正確率,以及屬於每類的概率,(實際上加個-b 1就可以了,不需要其他什麼額外的研究,但是要注意的是,這裡的概率是根據model模型中的label順序來的,如果你的訓練集是亂的,就需要根據生成的model模型中的標籤順序來看概率值,比如model模型中的標籤順序是,1,3,2,4,那麼就是按照這個順序來生成的概率值)

我在訓練svm的時候由於內建的函式正確率不是很高,只有75,後來隨機生成了1000的矩陣,來進行重複訓練,效果不是很好,只提高了2.5到5左右的百分點,當然不是很穩定,後期會試著研究下怎樣用svm訓練已有的模型~不定期更新~

svm的簡單理解

svm是一種訓練機器學習的演算法,可以用於解決分類和回歸問題,同時還使用了一種稱之為kernel trick的技術進行資料的轉換,然後再根據這些轉換資訊,在可能的輸出之中找到乙個最優的邊界。簡單來說,就是做一些非常複雜的資料轉換工作,然後根據預定義的標籤或者輸出進而計算出如何分離使用者的資料。簡單理...

SVM簡單分類的使用 sklearn機器學習

sklearn 庫中匯入 svm 模組 from sklearn import svm 定義三個點和標籤 x 2,0 1,1 2,3 y 0,0,1 定義分類器,clf 意為 classifier,是分類器的傳統命名 clf svm.svc kernel linear svc 就是 svm 的方程,...

SVM演算法 0 SVM演算法的簡單介紹

支援向量機 support vector machine,簡稱為svm 是分類與回歸分析中的一種監督學習演算法,也是一種二分類模型,其基本模型定義為特徵空間上間隔最大的線性分類器,且基於最大間隔分隔資料,可轉化為求解凸二次規劃的問題。為了描述支援向量機,此處從邏輯回歸開始分析,並一點一點地修改來得到...