最近要实现异步电机的LSSVM逆控制,参考文献《基于LS-SVM的异步电机解耦控制方法》已附。遇到的问题是:训练得到的模型model挺好的,为什么单独拿出来调用,效果却很差?我的程序贴出来如下:1,训练程序 lssvm_um.m ,保存训练好的model ,文件名为 LSSVM1223
%% 文件:LS-SVM 程序学习,数据:MTdata1126.mat,具有6000组数据 日期:20141209 目标:转矩电压输出um
%6输入1输出的系统
clear all
clc
%导入数据
load MTdata1126.mat
%随机产生训练集和测试集
n=randperm(size(MTdata1029_in,1));             %***********注意数据修改****************************
%训练集 1000个样本
train_matrix=MTdata1029_in(n(1:2:2000),:);
train_label=MTdata1029_um_out(n(1:2:2000),:);       %训练集输出值为um,对应于MTdata1126_um*********注意:修改部分*************
%测试集 200个样本
%test_matrix=MTdata1029_in(n(2:2:800),:);
%test_label=MTdata1029_um_out(n(2:2:800),:); 
test_matrix=MTdata1029_in(n(5801:end),:);
test_label=MTdata1029_um_out(n(5801:end),:);      %测试集输出值为um,对应于data1017_um*********注意:修改部分************
%% 归一化处理
%训练集
[Train_matrix,inputps]=mapminmax(train_matrix');
Train_matrix=Train_matrix';                        %数据结构为4000*6  
Test_matrix=mapminmax('apply',test_matrix',inputps);
Test_matrix=Test_matrix';                          %数据结构为2000*6
%测试集
[Train_label,outputps]=mapminmax(train_label');
Train_label=Train_label';                          %数据结构为4000*1 
Test_label=mapminmax('apply',test_label',outputps);
Test_label=Test_label';                            %数据结构为2000*1      
%%  *********************统一一下训练、测试集书写格式*****************************
X=Train_matrix; %训练集输入矩阵
Xt=Test_matrix; %测试集输入矩阵
Y=Train_label;  %训练集输出(标签)矩阵
Yt=Test_label;  %测试集输出(标签)矩阵
%% LS-SVM参数设置****************************************************************
%type = 'f';
%kernel = 'RBF_kernel';
%gam = 2;                % Regularization parameter
%sig2 = 0.25;            % Kernel parameter (bandwidth in the case of the 'RBF_kernel'
%model = initlssvm(X,Y,type,gam,sig2,kernel);     % ***********模型初始化********************
model = initlssvm(X,Y,'f',[],[],'RBF_kernel','original'); %最后一个参数表示’preprocess’(*) or ’original’,归一化或者不归一化(自己归一化的数据,试用此)
%% 交叉验证优化参数
%costfun = 'rcrossvalidate';
%costfun_args = {X,Y,10};
%optfun = 'gridsearch';
%model = tunelssvm(model,[],optfun,{},costfun,costfun_args);     % *******模型参数优化******

model = tunelssvm(model,'simplex','crossvalidatelssvm',{10,'mse'});    %交叉验证优化参数的三种形式,simplex which works for all kernels
                                                                        %单纯型 适用于所有内核
%model = tunelssvm(model,'gridsearch','crossvalidatelssvm',{10,'mse'}); %(this one is restricted to 2-dimensional tuning parameter optimization);
                                                                       %(这是局限于二维调优参数优化);
%model = tunelssvm(model,'linesearch','crossvalidatelssvm',{10,'mse'}); %(used with the linear kernel).用于线性内核
%% 留一法优化参数
%model =
%tunelssvm(model,'simplex','leaveonroutlssvm',{'mse'}); %leaveonroutlssvm留一法无法使用

%% 训练与测试
model = trainlssvm(model);          %训练model 
Predict_Y=simlssvm(model,X);        %训练集回归预测
Predict_Yt=simlssvm(model,Xt);      %测试集回归预测
%model                               %显示model的结构以及参数
save LSSVM1223 model        %保存训练好的model   文件名为 LSSVM1223
%% ***********************************性能指标***********************************
              %*****************训练集的性能指标*********************************
%均方误差
tn_sim=Predict_Y;         %方便计算均方误差和决定系数
tn_test=Y;                %方便计算均方误差和决定系数
E_1=mse(tn_sim-tn_test);
%决定系数
N = size(train_label,1);   %训练集样本数
R2_1=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))^2/((N*sum((tn_sim).^2)-(sum(tn_sim))^2)*(N*sum((tn_test).^2)-(sum(tn_test))^2));

%*****************测试集的性能指标*********************************
%均方误差
tn_sim=Predict_Yt;        %方便计算均方误差和决定系数
tn_test=Yt;               %方便计算均方误差和决定系数
E=mse(tn_sim-tn_test);
%决定系数
N = size(test_label,1);   %测试集样本数
R2=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))^2/((N*sum((tn_sim).^2)-(sum(tn_sim))^2)*(N*sum((tn_test).^2)-(sum(tn_test))^2)); 
%反归一化
predict_Y=mapminmax('reverse',Predict_Y',outputps);    %训练集回归预测反归一化后数值
predict_Y=predict_Y';
predict_Yt=mapminmax('reverse',Predict_Yt',outputps);  %测试集回归预测反归一化后数值
predict_Yt=predict_Yt';
%% ******************************* 结果作图**************************************
figure(1)
plot(1:length(train_label),train_label,'r-*',1:length(train_label),predict_Y,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('转矩电压um')
string_1={'训练集预测结果对比'
          ['mse = ' num2str(E_1)  'R^2 = ' num2str(R2_1)]};
title(string_1)
figure(2)
plot(1:length(test_label),test_label,'r-*',1:length(test_label),predict_Yt,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('转矩电压um')
string_2={'测试集预测结果对比';
          ['mse = ' num2str(E) 'R^2 = ' num2str(R2)]};
title(string_2)
figure(3)
plotlssvm(model)                  %绘图,用LSSVM绘制训练好model的情况

2,然后用保存好model   文件名为 LSSVM1223  进行回归预测(检验一下训练好的模型是否好用,想要利用训练好的model用到simulink中,如参考文献),请注意红色部分。
测试model的程序 test_lssvm_um.m:(这个程序只是测试用的,解释文字没有实际意义)
%% 文件:LS-SVM 程序学习,数据:MTdata1126.mat 日期:20141209 目标:转矩电压输出um
%6输入以输出的系统
clear all
clc
%导入数据
load MTdata1126.mat
%随机产生训练集和测试集
n=randperm(size(MTdata1029_in,1));             %***********注意数据修改****************************
%训练集 400个样本
%train_matrix=MTdata1029_in(n(1:2:800),:);
%train_label=MTdata1029_um_out(n(1:2:800),:);       %训练集输出值为um,对应于MTdata1126_um*********注意:修改部分*************
%测试集 200个样本
%test_matrix=MTdata1029_in(n(2:2:800),:);
%test_label=MTdata1029_um_out(n(2:2:800),:);

%test_matrix=MTdata1029_in(n(5801:end),:);
%test_label=MTdata1029_um_out(n(5801:end),:);      %测试集输出值为um,对应于data1017_um*********注意:修改部分************
%%  *******************等间隔选取样本*****************************
%产生训练集400个样本
train_matrix=MTdata1029_in(1:2:800,:);     %数据结构为4000*6   , 神经网络的格式使然。SVM格式为4000*6
train_label=MTdata1029_um_out(1:2:800,:);  %数据结构为4000*6    ,SVM格式为4000*6,每一列为一个样本
%产生测试集200个样本
test_matrix=MTdata1029_in((1000:2:6000),:);    %都变成了2000*6
test_label=MTdata1029_um_out((1000:2:6000),:); %都变成了2000*1
%% 归一化处理
%训练集
[Train_matrix,inputps]=mapminmax(train_matrix');
Train_matrix=Train_matrix';                        %数据结构为4000*6  
Test_matrix=mapminmax('apply',test_matrix',inputps);
Test_matrix=Test_matrix';                          %数据结构为2000*6
%测试集
[Train_label,outputps]=mapminmax(train_label');
Train_label=Train_label';                          %数据结构为4000*1 
Test_label=mapminmax('apply',test_label',outputps);
Test_label=Test_label';                            %数据结构为2000*1      
%%  *********************统一一下训练、测试集书写格式*****************************
%pn_train=Train_matrix;    %训练集输入矩阵
X=Train_matrix;
%pn_test=Test_matrix;      %测试集输入矩阵
Xt=Test_matrix;
%tn_train=Train_label;     %训练集输出(标签)矩阵
Y=Train_label; 
%tn_test=Test_label;       %%测试集输出(标签)矩阵
Yt=Test_label;
%% LS-SVM参数设置****************************************************************
%type = 'f';
%kernel = 'RBF_kernel';
%gam = 2;              % Regularization parameter
%sig2 = 0.25;            % Kernel parameter (bandwidth in the case of the 'RBF_kernel'
%model = initlssvm(X,Y,type,gam,sig2,kernel);     % ***********模型初始化********************
%% 交叉验证优化参数
%costfun = 'rcrossvalidate';
%costfun_args = {X,Y,10};
%optfun = 'gridsearch';
%model = tunelssvm(model,[],optfun,{},costfun,costfun_args);     % *******模型参数优化****** 
%% 训练与测试
load ('LSSVM1223.mat')                    %下载保存好的model,用于预测
%model = trainlssvm(model);          %训练model 
Predict_Y=simlssvm(model,X);        %训练集回归预测
Predict_Yt=simlssvm(model,Xt);      %测试集回归预测
model                        %显示model的解耦以及参数
%save LSSVM1209 model        %保存训练好的model   文件名为 LSSVM1209
%% ***********************************性能指标***********************************
              %*****************训练集的性能指标*********************************
%均方误差
tn_sim=Predict_Y;         %方便计算均方误差和决定系数
tn_test=Y;                %方便计算均方误差和决定系数
E_1=mse(tn_sim-tn_test);
%决定系数
N = size(train_label,1);   %训练集样本数
R2_1=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))^2/((N*sum((tn_sim).^2)-(sum(tn_sim))^2)*(N*sum((tn_test).^2)-(sum(tn_test))^2));

%*****************测试集的性能指标*********************************
%均方误差
tn_sim=Predict_Yt;        %方便计算均方误差和决定系数
tn_test=Yt;               %方便计算均方误差和决定系数
E=mse(tn_sim-tn_test);
%决定系数
N = size(test_label,1);   %测试集样本数
R2=(N*sum(tn_sim.*tn_test)-sum(tn_sim)*sum(tn_test))^2/((N*sum((tn_sim).^2)-(sum(tn_sim))^2)*(N*sum((tn_test).^2)-(sum(tn_test))^2)); 
%反归一化
predict_Y=mapminmax('reverse',Predict_Y',outputps);    %训练集回归预测反归一化后数值,反归一化时候,转置一下数据
predict_Y=predict_Y';                                   %再次转置回来
predict_Yt=mapminmax('reverse',Predict_Yt',outputps);  %测试集回归预测反归一化后数值
predict_Yt=predict_Yt';                                       %再次转置回来
%% ******************************* 结果作图**************************************
figure(1)
plot(1:length(train_label),train_label,'r-*',1:length(train_label),predict_Y,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('转矩电压um')
string_1={'训练集预测结果对比'
          ['mse = ' num2str(E_1)  'R^2 = ' num2str(R2_1)]};
title(string_1)
figure(2)
plot(1:length(test_label),test_label,'r-*',1:length(test_label),predict_Yt,'b:o')
grid on
legend('真实值','预测值')
xlabel('样本编号')
ylabel('转矩电压um')
string_2={'测试集预测结果对比';
          ['mse = ' num2str(E) 'R^2 = ' num2str(R2)]};
title(string_2)
figure(3)
plotlssvm(model)                  %绘图,用LSSVM绘制保存的训练好model的情况

调用lssvm训练好的模型相关推荐

  1. 如何调用 caffe 训练好的模型对输入图片进行测试

    如何调用 caffe 训练好的模型对输入图片进行测试 该部分包括两篇文章 win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型. 如何调用 caffe ...

  2. 使用OpenCV调用Caffe-SSD训练好的模型

    前言 1.OpenCV3之后的dnn模型可以可以调用好多用深度学习框架的训练好的模型. 2.这里我演示是我自己训练的一个围棋棋盘识别模型,使用的神经网络是VGG16,OpenCV3.3,IDE是VS2 ...

  3. OpenCV的dnn模块调用TesorFlow训练的MoblieNet模型

    七月 上海| 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习  快速带你入门阅读全文> 正文共2073个字,2张图,预计阅读时间10分钟. 一.初得模型 那是一个月之前的事情了 ...

  4. opencv调用自己训练的yolo3模型

    一 实现流程 1.准备好自己的数据集,通过yolo3结构框架训练好自己的模型文件(loss值一般训练到10就OK)yolov3源码:https://github.com/qqwweee/keras-y ...

  5. TensorFlow 调用预训练好的模型—— Python 实现

    1. 准备预训练好的模型 TensorFlow 预训练好的模型被保存为以下四个文件 data 文件是训练好的参数值,meta 文件是定义的神经网络图,checkpoint 文件是所有模型的保存路径,如 ...

  6. 如何用java语言调用tensorflow训练好的模型

    1.TensorFlow的训练模型在Android和Java的应用及调用 2.tensorflow的python离线训练java在线预测方案 3.tensorflow训练的模型在java中的使用 4. ...

  7. java调用tensorflow训练好的模型

    1. python的处理 整个模型的源码在此:https://github.com/shelleyHLX/tensorflow_java 多谢star 首先训练一个模型,代码如下 import ten ...

  8. opencv调用pytorch训练好的模型

    根据官方文档知 cv2.dnn.readNetFromTorch() 中使用 torch.save() 方法保存的文件. 加载文件必须包含带有导入网络的序列化 nn.Module 对象,尝试从序列化数 ...

  9. 调用训练好的模型(tensorflow)

    使用Tensorflow框架完美保存并实现调用训练好的模型 opencv调用tf训练好的模型          主机调用,不用安装tf,不需要显卡 OpenCV的dnn模块调用TesorFlow训练的 ...

最新文章

  1. 天津大学计算机考研真题,天津大学计算机科学与技术考研真题
  2. cnpm install -g @vue/cli
  3. 8 MyBatis动态SQL
  4. 【theano-windows】学习笔记十四——堆叠去噪自编码器
  5. 炸了!刚刚数学家获得了2020年诺贝尔物理学奖!没想到诺奖也能蝉联.......
  6. html5鼠标放大,利用HTML5实现粒子游走鼠标经过放大特效
  7. 知乎Python后端面试总结
  8. Audition CC 2019 for Mac中文破解版永久激活方法附破解补丁
  9. cron每小时执行一次_crontab每小时运行一次
  10. 零数开放许可链入选《互联网周刊》2021区块链应用创新TOP50
  11. 一键重装系统 韩博士装机大师U盘启动一键重装
  12. 微信小程序激活账号时,提示“此帐号已激活,请使用帐号密码直接登录”
  13. c1科目三灯光全语言播报,驾照科目三灯光模拟考试语音提示
  14. 汉诺塔非递归算法分析与实现
  15. USB TYPE -A -B -C 接口
  16. 鸿蒙系统 规划,华为发布鸿蒙系统,青岛华为基地规划布局
  17. 大数据评估TMT公司内在价值
  18. 利用百度云盘同步Zotero
  19. 【JVM 学习笔记 05】:JVM性能调优工具的使用和优化案例
  20. 洛谷P4516:[JSOI2018]潜入行动(树形dp)

热门文章

  1. node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法
  2. linux下npm安装的全局命令无法执行
  3. 云南林业计算机单招试题,2021年云南林业职业技术学院单招数学考试模拟试题库...
  4. Unity虚拟相机Cinemachine教程
  5. 整理c语言运算符优先级表
  6. onvif gsoap 设备端接口方法部署示例及gsoap代码调用分析
  7. carbonData使用文档
  8. 移动互联网的未来发展趋势
  9. 23种设计模式-桥梁模式《官渡之战》
  10. Spring Boot集成第三方登录之微信登录