数据处理是用matlab好还是python好_机器学习深度学习用python还是matlab-使用Matlab做机器学习方法 - PS下...

做机器学习深度学习用python还是matlab比较好?这是很多朋友比较纠结的问题,因为一提到机器学习,大家都会想到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、训练树模型

各菜单页含义:

特征:选择参与训练的特征或者使用PCA降维,默认使用全部特征,不降维

选项:设定误分类代价,就是类别准确率优先级,哪些一定要分对,哪些误差大点能接收

模型类型:选择训练模型及模型参数配置

训练:使用并行同时训练多模型

绘图:分类器效果评价,散点图、混淆矩阵、ROC曲线等

导出:导出训练结果、训练代码或模型文件

简单起见,直接使用默认的树模型做训练(默认会打开并行池,同意即可),结果如下:准确率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有关详细信息,请参阅 How to predict using an exported model。');

% 提取预测变量和响应

% 以下代码将数据处理为合适的形状以训练模型。

%

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做机器学习是不是很方便,零基础傻瓜式入门!

你可能感兴趣的:(数据处理是用matlab好还是python好_机器学习深度学习用python还是matlab-使用Matlab做机器学习方法 - PS下...)