许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  优雅地使用Matlab进行机器学习

优雅地使用Matlab进行机器学习

阅读数 65
点赞 0
article_banner

一提到机器学习,大家都会想到Python 。确实,Python提供了大量机器学习库,如sklearn pytorch tensorflow 等,很多C++库 也提供Python接口,如dlib ,使用起来确实方便。

Matlab虽然不如Python开放,但也提供了大量机器学习算法,常见的比如PCA SVM 决策树 、集成学习等,应付日常需求绰绰有余。更重要的是,Matlab提供算法转C功能,就是训练的模型可以转为C代码、动态链接库dll,提供给软件使用。下图为Matlab2019b 能转C的算法,以后还会越来越多。这一点貌似Python比较难做到,Python转C不可能的,需要借助C++库复现算法,如使用dlib。

此外,Matlab还提供了专门的App界面,无需编写代码就能做机器学习,完美!

下面以分类器为例做个简要介绍。

1、加载数据

Matlab自带fisher数据

>> fishertable = readtable('fisheriris.csv');

2、打开分类器App

>>classificationLearner

3、导入数据

新建会话>>从工作区

按默认配置开始会话

  • 默认选择fishertable变量,因为工作区只有这个变量;
  • 默认选择最后一列Species为响应;
  • 默认使用交叉验证。

4、训练树模型

各菜单页含义:

  1. 特征:选择参与训练的特征或者使用PCA降维,默认使用全部特征,不降维
  2. 选项:设定误分类代价,就是类别准确率优先级,哪些一定要分对,哪些误差大点能接收
  3. 模型类型:选择训练模型及模型参数配置
  4. 训练:使用并行同时训练多模型
  5. 绘图:分类器效果评价,散点图、混淆矩阵、ROC曲线等
  6. 导出:导出训练结果、训练代码或模型文件

简单起见,直接使用默认的树模型做训练(默认会打开并行池,同意即可),结果如下:准确率96%,还不错

5、模型一把梭

可训练的分类器很多,选择全部来个一把梭:

开始训练,可以看到有4个worker同时在训练

最后,准确率最高的是线性判别模型 ,准确率98%

6、导出函数

如果想看Matlab的训练代码,点击导出>>生成函数,得到训练代码:以后有类似应用,直接运行这个函数即可,不用再打开App界面

function [trainedClassifier, validationAccuracy] = trainClassifier(trainingData)
% [trainedClassifier, validationAccuracy] = trainClassifier(trainingData)
% 返回经过训练的分类器及其准确度。以下代码重新创建在 Classification Learner App 中训
% 练的分类模型。您可以使用该生成的代码基于新数据自动训练同一模型,或通过它了解如何以程序化方
% 式训练模型。
%
%  输入:
%      trainingData: 一个所含预测变量和响应列与导入 App 中的相同的表。
%
%  输出:
%      trainedClassifier: 一个包含训练的分类器的结构体。该结构体中具有各种关于所训练分
%       类器的信息的字段。
%
%      trainedClassifier.predictFcn: 一个对新数据进行预测的函数。
%
%      validationAccuracy: 一个包含准确度百分比的双精度值。在 App 中,"历史记录" 列
%       表显示每个模型的此总体准确度分数。
%
% 使用该代码基于新数据来训练模型。要重新训练分类器,请使用原始数据或新数据作为输入参数
% trainingData 从命令行调用该函数。
%
% 例如,要重新训练基于原始数据集 T 训练的分类器,请输入:
%   [trainedClassifier, validationAccuracy] = trainClassifier(T)
%
% 要使用返回的 "trainedClassifier" 对新数据 T2 进行预测,请使用
%   yfit = trainedClassifier.predictFcn(T2)
%
% T2 必须是一个表,其中至少包含与训练期间使用的预测变量列相同的预测变量列。有关详细信息,请
% 输入:
%   trainedClassifier.HowToPredict

% 提取预测变量和响应
% 以下代码将数据处理为合适的形状以训练模型。
%
inputTable = trainingData;
predictorNames = {'SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'};
predictors = inputTable(:, predictorNames);
response = inputTable.Species;
isCategoricalPredictor = [false, false, false, false];

% 训练分类器
% 以下代码指定所有分类器选项并训练分类器。
classificationDiscriminant = fitcdiscr(...
    predictors, ...
    response, ...
    'DiscrimType', 'linear', ...
    'Gamma', 0, ...
    'FillCoeffs', 'off', ...
    'ClassNames', {'setosa'; 'versicolor'; 'virginica'});

% 使用预测函数创建结果结构体
predictorExtractionFcn = @(t) t(:, predictorNames);
discriminantPredictFcn = @(x) predict(classificationDiscriminant, x);
trainedClassifier.predictFcn = @(x) discriminantPredictFcn(predictorExtractionFcn(x));

% 向结果结构体中添加字段
trainedClassifier.RequiredVariables = {'PetalLength', 'PetalWidth', 'SepalLength', 'SepalWidth'};
trainedClassifier.ClassificationDiscriminant = classificationDiscriminant;
trainedClassifier.About = '此结构体是从 Classification Learner R2019b 导出的训练模型。';
trainedClassifier.HowToPredict = sprintf('要对新表 T 进行预测,请使用: \n yfit = c.predictFcn(T) \n将 ''c'' 替换为作为此结构体的变量的名称,例如 ''trainedModel''。\n \n表 T 必须包含由以下内容返回的变量: \n c.RequiredVariables \n变量格式(例如矩阵/向量、数据类型)必须与原始训练数据匹配。\n忽略其他变量。\n \n有关详细信息,请参阅 <a href="matlab:helpview(fullfile(docroot, ''stats'', ''stats.map''), ''appclassification_exportmodeltoworkspace'')">How to predict using an exported model</a>。');

% 提取预测变量和响应
% 以下代码将数据处理为合适的形状以训练模型。
%
inputTable = trainingData;
predictorNames = {'SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth'};
predictors = inputTable(:, predictorNames);
response = inputTable.Species;
isCategoricalPredictor = [false, false, false, false];

% 执行交叉验证
partitionedModel = crossval(trainedClassifier.ClassificationDiscriminant, 'KFold', 5);

% 计算验证预测
[validationPredictions, validationScores] = kfoldPredict(partitionedModel);

% 计算验证准确度
validationAccuracy = 1 - kfoldLoss(partitionedModel, 'LossFun', 'ClassifError');

Other

要做回归分析,同理使用Regression Learner,下图为Matlab提供的回归算法


使用Matlab做机器学习是不是很方便,零基础傻瓜式入门!

要真正用好这个工具箱,需要掌握基本的机器学习知识,推荐看一看周志华老师的西瓜书《机器学习》:


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...

相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空