1. 程式人生 > >MATLAB自帶的svm工具箱怎麼儲存訓練好的模型

MATLAB自帶的svm工具箱怎麼儲存訓練好的模型

搜尋了好多文章,matlab自帶的svm工具儲存訓練好的模型,讀取離線模型的資料少之又少,libsvm倒是有一點,但是之前的程式碼會用自帶工具箱做的,又懶得換。那就自己搞吧!

首先上訓練函式的程式碼:

flow_svmstruct = svmtrain(flow_traindata,flow_group,'Kernel_Function','RBF')   % training

 訓練好的模型儲存在flow_svmstruct結構體中,結構體裡面的內容如下:

flow_svmstruct = 

          SupportVectors: [8x1 double]
                   Alpha: [8x1 double]
                    Bias: 0.3798
          KernelFunction: @rbf_kernel
      KernelFunctionArgs: {}
              GroupNames: [64x1 double]
    SupportVectorIndices: [8x1 double]
               ScaleData: [1x1 struct]
           FigureHandles: []

所以,我們要做的工作是:先將這個結構體儲存下來,然後分類的時候再讀取出來。

1.如何儲存?

如何儲存結構體呢?經過一番調研,可以用save命令把結構體儲存成矩陣(.mat)的形式,具體程式碼如下:

save('C:\Users\Administrator\Desktop\matlabdemo\model\flow_model','flow_svmstruct'); 

執行完這一行程式碼,model資料夾下多了一個檔案:

說明儲存成功了。

2.如何讀取?

首先想到的是load命令將.mat的資料讀取出來

flow_model_mat = load('C:\Users\Administrator\Desktop\matlabdemo\model\flow_model');

但是,我們最終想要的結果是將flow_svmstruct這個結構體提取出來,經過除錯發現,flow_model_mat這個矩陣大小是1行1列,內容是flow_svmstruct,所以經過以下操作就可以完美地提取出來儲存的資料了

flow_svmstruct = flow_model_mat.flow_svmstruct;

小結:

  %訓練並儲存資料
flow_svmstruct = svmtrain(flow_traindata,flow_group,'Kernel_Function','RBF');   % training
save('C:\Users\Administrator\Desktop\matlabdemo\model\flow_model','flow_svmstruct'); 


%讀取儲存的模型資料並分類
flow_model_mat = load('C:\Users\Administrator\Desktop\matlabdemo\model\flow_model');
flow_svmstruct = flow_model_mat.flow_svmstruct;
G1= svmclassify(flow_svmstruct,flow_testdata);