Matlab Tutorial 03 official SVM and NNW

发布于 2021-06-08  194 次阅读



  本文主要介绍在Matlab中使用官方库函数提供的SVM支持向量机和NNW神经网络,同时将这两种模型应用到多目标分类(Multi-Target Classfication)上。

一、神经网络

1.1 newff()函数参数说明

  使用的函数newff()是前馈反向传播网络,下面是它的定义式:

net = newff(P,T,S)
net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
  •   P:输入参数矩阵。(RxQ1),其中Q1代表R元的输入向量。其数据意义是矩阵P有Q1列,每一列都是一个样本,而每个样本有R个属性(特征)。一般矩阵P需要归一化,即P的每一行都归一化到[0 1]或者[-1 1]。m * n,m是特征数, n是样本数。
  •   T:目标参数矩阵。(SNxQ2),Q2代表SN元的目标向量。
  •   S:N-1个隐含层的数目(S(i)到S(N-1)),默认为空矩阵[]。输出层的单元数目SN取决于T。返回N层的前馈BP神经网络
  •   TF:相关层的传递函数,默认隐含层为tansig函数,输出层为purelin函数。
  •   BTF:BP神经网络学习训练函数,默认值为trainlm函数。
  •   BLF:权重学习函数,默认值为learngdm。
  •   PF:性能函数,默认值为mse,可选择的还有sse,sae,mae,crossentropy。
  •   IPF,OPF,DDF均为默认值即可。

1.2 传递函数TF

  •   purelin: 线性传递函数。
  •   tansig :正切S型传递函数。
  •   logsig :对数S型传递函数。 
  •   隐含层和输出层函数的选择对BP神经网络预测精度有较大影响,一般隐含层节点转移函数选用 tansig函数或logsig函数,输出层节点转移函数选用tansig函数或purelin函数。

1.3 学习训练函数BTF

  •   traingd:最速下降BP算法。
  •   traingdm:动量BP算法。
  •   trainda:学习率可变的最速下降BP算法。
  •   traindx:学习率可变的动量BP算法。
  •   trainrp:弹性算法。
      

  变梯度算法:

  •   traincgf(Fletcher-Reeves修正算法)
  •   traincgp(Polak_Ribiere修正算法)
  •   traincgb(Powell-Beale复位算法)
  •   trainbfg(BFGS 拟牛顿算法)
  •   trainoss(OSS算法)

1.4 参数说明

  通过net.trainParam可以查看参数

  •   Show Training Window Feedback showWindow: true
  •   Show Command Line Feedback showCommandLine: false
  •   Command Line Frequency show: 两次显示之间的训练次数
  •   Maximum Epochs epochs: 训练次数
  •   Maximum Training Time time: 最长训练时间(秒)
  •   Performance Goal goal: 网络性能目标
  •   Minimum Gradient min_grad: 性能函数最小梯度
  •   Maximum Validation Checks max_fail: 最大验证失败次数
  •   Learning Rate lr: 学习速率
  •   Learning Rate Increase lr_inc: 学习速率增长值
  •   Learning Rate lr_dec: 学习速率下降值
  •   Maximum Performance Increase max_perf_inc:
  •   Momentum Constant mc: 动量因子

1.5 实例

% 创建网络
net = newff(TriX, TriY, 9);

% 设置参数
net.trainParam.epochs = 1000;
net.trainParam.goal = 1e-3;
net.trainParam.lr = 0.01;

% 训练
net = train(net, TriX, TriY);

% 测试
PreY = sim(net, TestX);

  值得注意的地方是,这里的X和Y需要是m * n,即m个特征* n个样本数。

二、支持向量机

2.1 fitcsvm()函数参数说明

  fitcsvm()本身应用于单目标回归,我们可以将多目标拆分成多个单目标回归以应用到多目标上。

model = fitcsvm(X,Y,'ClassNames',{'negClass','posClass'},'Standardize',true,...
        'KernelFunction','rbf','BoxConstraint',1);
  •   X是训练样本,nxm的矩阵,n是样本数,m是特征维数。
  •   Y是样本标签,nx1的矩阵,n是样本数。
  •   ‘ClassNames’,{‘negClass’,‘posClass’} 为键值对参数,指定正负类别,负类名在前,正类名在后,与样本标签Y中的元素对应。
  •   ‘Standardize’,true 为键值对参数,指示软件是否应在训练分类器之前使预测期标准化。
  •   ‘KernelFunction’,‘rbf’ 为键值对参数,有3种 ‘linear’(默认), ‘gaussian’ (or ‘rbf’), ‘polynomial’。
  •   ‘BoxConstraint’,1 为键值对参数,直观上可以理解为一个惩罚因子(或者说正则参数),这个参数和svmtrain里的-c是一个道理。其实际上涉及到软间隔SVM的间隔(Margin)大小。

2.2 实例

 model1 = fitcsvm(TriX, TriY(:, 1));
 model2 = fitcsvm(TriX, TriY(:, 2));
 model3 = fitcsvm(TriX, TriY(:, 3));

 [label1, score1] = predict(model1, TestX);
 [label2, score2] = predict(model2, TestX);
 [label3, score3] = predict(model3, TestX);

 PreY = [label1, label2, label3];