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