搜索了好多文章,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);