matlab训练模型、导出模型及VC调用模型过程详解

MATLAB是美国MathWorks公司出品的商业数学软件,为算法开发、数据可视化、数据分析以及数值计算等提供了高级计算语言和交互式环境。随着人工智能的崛起,MATLAB也添加了自己的机器学习工具包,只需要很少的代码或命令就能完成模型训练和测试的过程,训练好的模型也能方便的导出,供VC等调用。本文主要介绍模型训练、导出和调用的整个过程。

 

软件版本:

VC2015,matlab2018a

 

1,数据准备。

随机生成一组训练数据,格式如下:

x,y,label

x,y为坐标,label为标签

我生成的数据总量为3000,格式如下:

前1500:x>0, y>0,   label=1      x,y落在坐标系的第一象限

后500  :x<0, y>0,   label=0      x,y落在坐标系的第二象限

后500  :x<0, y<0,   label=0      x,y落在坐标系的第三象限

后500  :x>0, y<0,   label=0      x,y落在坐标系的第四象限

数据存为csv格式,如下图所示:

matlab训练模型、导出模型及VC调用模型过程详解_第1张图片

2,模型训练

(1)打开matlab,将工作目录设置在cvs文件所在目录,点开APPS选项卡,点击Classification Learner

matlab训练模型、导出模型及VC调用模型过程详解_第2张图片

(2)点击菜单:New Session,选择From File

matlab训练模型、导出模型及VC调用模型过程详解_第3张图片

(3)选择我们生成的训练数据文件后,matlab显示出了文件内容,点击Insert Selection导入文件

matlab训练模型、导出模型及VC调用模型过程详解_第4张图片

(4)数据设置,前两列为训练数据,第三列为标签,点击Start Session

matlab训练模型、导出模型及VC调用模型过程详解_第5张图片

数据导入后,分类器显示数据点的分布情况,可以看到:标签为1的样本显示为红色,分布在第一象限;标签为0的样本显示为蓝色,分布在二三四象限。 

matlab训练模型、导出模型及VC调用模型过程详解_第6张图片

(5)开始训练,此时分类器默认选择的模型为Fine Tree,我们可以直接使用这个模型进行训练,也可以选择ALL,让所有的模型都进行训练,从而根据训练结果选择最好的模型,这里我们直接点击Train进行训练。训练完成后显示Fine Tree模型对于当前样本的识别率为100%(matlab将导入的样本分为两份,一份训练,一份测试,100%是对测试样本集测试后得出的结果)。 

matlab训练模型、导出模型及VC调用模型过程详解_第7张图片

3,模型导出及使用

选择训练好的Fine Tree模型,点击Export Model,选择Export compact model,导出训练好的模型

matlab训练模型、导出模型及VC调用模型过程详解_第8张图片

模型导出后,在matlab的变量列表里,出现了导出的模型:Trained model

matlab训练模型、导出模型及VC调用模型过程详解_第9张图片

双击Trained model,可以看到模型的内部结构

matlab训练模型、导出模型及VC调用模型过程详解_第10张图片

 

使用命令,将模型里的分类器导出为mat文件:

saveCompactModel(trainedModel.ClassificationTree, 'ClassificationTree')

matlab训练模型、导出模型及VC调用模型过程详解_第11张图片

命令执行成功后,工作目录出现ClassificationTree.mat文件

matlab训练模型、导出模型及VC调用模型过程详解_第12张图片

此mat文件无法被VC直接使用,可以在matlab里封装一个函数,函数里使用此分类器进行分类,然后将此函数导出C/C++代码或dll供VC使用。

function label = treemodel(input)    
	model = loadCompactModel('ClassificationTree.mat');    
	label = predict(model,input);
end

matlab训练模型、导出模型及VC调用模型过程详解_第13张图片

在matlab命令行里输入coder,打开代码转换工具,将封装的matlab函数导出为C/C++代码

matlab训练模型、导出模型及VC调用模型过程详解_第14张图片

点击...选择刚才封装好的.m文件, 点击下一步,进入输入参数定义界面

matlab训练模型、导出模型及VC调用模型过程详解_第15张图片

点击let me enter input or global types directly,定义输入参数:

matlab训练模型、导出模型及VC调用模型过程详解_第16张图片

 

输入类型为double类型的x,y坐标,所以选择double,类型为1*2(选择1xn,n的位置输入2)

matlab训练模型、导出模型及VC调用模型过程详解_第17张图片

 

matlab训练模型、导出模型及VC调用模型过程详解_第18张图片

选择下一步,点击Generate生成代码

matlab训练模型、导出模型及VC调用模型过程详解_第19张图片

 

matlab训练模型、导出模型及VC调用模型过程详解_第20张图片

生成成功后,matlab工作目录出现codegen文件夹,里边是生成的文件

 

matlab训练模型、导出模型及VC调用模型过程详解_第21张图片

将图中所有的.c和.h文件导入VC工程(.c文件去掉预编译头选项),然后打开examples文件夹,查看示例文件main.h和main.c,仿照其示例调用分类函数进行分类测试(注意:头文件包含使用extern "C"方式)

 

matlab训练模型、导出模型及VC调用模型过程详解_第22张图片

 

matlab训练模型、导出模型及VC调用模型过程详解_第23张图片

最后一步,输入任意数据进行测试

matlab训练模型、导出模型及VC调用模型过程详解_第24张图片

至此,所有流程全部完成。

 

 

 

 

 

 

 

你可能感兴趣的:(matlab)