调用lssvm训练好的模型
最近要实现异步电机的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训练好的模型相关推荐
- 如何调用 caffe 训练好的模型对输入图片进行测试
如何调用 caffe 训练好的模型对输入图片进行测试 该部分包括两篇文章 win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型. 如何调用 caffe ...
- 使用OpenCV调用Caffe-SSD训练好的模型
前言 1.OpenCV3之后的dnn模型可以可以调用好多用深度学习框架的训练好的模型. 2.这里我演示是我自己训练的一个围棋棋盘识别模型,使用的神经网络是VGG16,OpenCV3.3,IDE是VS2 ...
- OpenCV的dnn模块调用TesorFlow训练的MoblieNet模型
七月 上海| 高性能计算之GPU CUDA培训 7月27-29日三天密集式学习 快速带你入门阅读全文> 正文共2073个字,2张图,预计阅读时间10分钟. 一.初得模型 那是一个月之前的事情了 ...
- opencv调用自己训练的yolo3模型
一 实现流程 1.准备好自己的数据集,通过yolo3结构框架训练好自己的模型文件(loss值一般训练到10就OK)yolov3源码:https://github.com/qqwweee/keras-y ...
- TensorFlow 调用预训练好的模型—— Python 实现
1. 准备预训练好的模型 TensorFlow 预训练好的模型被保存为以下四个文件 data 文件是训练好的参数值,meta 文件是定义的神经网络图,checkpoint 文件是所有模型的保存路径,如 ...
- 如何用java语言调用tensorflow训练好的模型
1.TensorFlow的训练模型在Android和Java的应用及调用 2.tensorflow的python离线训练java在线预测方案 3.tensorflow训练的模型在java中的使用 4. ...
- java调用tensorflow训练好的模型
1. python的处理 整个模型的源码在此:https://github.com/shelleyHLX/tensorflow_java 多谢star 首先训练一个模型,代码如下 import ten ...
- opencv调用pytorch训练好的模型
根据官方文档知 cv2.dnn.readNetFromTorch() 中使用 torch.save() 方法保存的文件. 加载文件必须包含带有导入网络的序列化 nn.Module 对象,尝试从序列化数 ...
- 调用训练好的模型(tensorflow)
使用Tensorflow框架完美保存并实现调用训练好的模型 opencv调用tf训练好的模型 主机调用,不用安装tf,不需要显卡 OpenCV的dnn模块调用TesorFlow训练的 ...
最新文章
- 天津大学计算机考研真题,天津大学计算机科学与技术考研真题
- cnpm install -g @vue/cli
- 8 MyBatis动态SQL
- 【theano-windows】学习笔记十四——堆叠去噪自编码器
- 炸了!刚刚数学家获得了2020年诺贝尔物理学奖!没想到诺奖也能蝉联.......
- html5鼠标放大,利用HTML5实现粒子游走鼠标经过放大特效
- 知乎Python后端面试总结
- Audition CC 2019 for Mac中文破解版永久激活方法附破解补丁
- cron每小时执行一次_crontab每小时运行一次
- 零数开放许可链入选《互联网周刊》2021区块链应用创新TOP50
- 一键重装系统 韩博士装机大师U盘启动一键重装
- 微信小程序激活账号时,提示“此帐号已激活,请使用帐号密码直接登录”
- c1科目三灯光全语言播报,驾照科目三灯光模拟考试语音提示
- 汉诺塔非递归算法分析与实现
- USB TYPE -A -B -C 接口
- 鸿蒙系统 规划,华为发布鸿蒙系统,青岛华为基地规划布局
- 大数据评估TMT公司内在价值
- 利用百度云盘同步Zotero
- 【JVM 学习笔记 05】:JVM性能调优工具的使用和优化案例
- 洛谷P4516:[JSOI2018]潜入行动(树形dp)
热门文章
- node.js安装后输入“node -v”提示'node' 不是内部或外部命令,也不是可运行的程序的解决方法
- linux下npm安装的全局命令无法执行
- 云南林业计算机单招试题,2021年云南林业职业技术学院单招数学考试模拟试题库...
- Unity虚拟相机Cinemachine教程
- 整理c语言运算符优先级表
- onvif gsoap 设备端接口方法部署示例及gsoap代码调用分析
- carbonData使用文档
- 移动互联网的未来发展趋势
- 23种设计模式-桥梁模式《官渡之战》
- Spring Boot集成第三方登录之微信登录