【MATLAB第56期】#源码分享 | 基于MATLAB的机器学习算法单输入多输出分类预测模型思路(回归改分类)

【MATLAB第56期】#源码分享 | 基于MATLAB的机器学习算法单输入多输出分类预测模型思路(回归改分类)

针对单输入多输出分类预测,可采用回归的方式进行预测。
本文采用BP神经网络进行演示。

一、导入数据

数据为1输入,5输出,总共482个样本。

输出分为五个指标,每个指标共4个评分维度,即【0 10 20 30】

bash 复制代码
%%  导入数据
load data

二、数据样本划分

保持样本均匀多样性,可将数据打乱。

bash 复制代码
temp = randperm(size(data,1));%打乱数据顺序

若不需要打乱,上面代码改成:

bash 复制代码
temp = 1:size(data,1):;%不打乱数据

训练样本数量可自行设置 ,本文设置为422。

代码如下:

bash 复制代码
%%  划分训练集和测试集
temp = randperm(size(data,1));%打乱数据顺序

NN=422;%训练数量
P_train = data(temp(1: NN), 6 )';%422个数据为训练,剩余为测试,第6列y为输入
T_train = data(temp(1: NN), 1: 5)';%x为输出
M = size(P_train, 2);

P_test = data(temp(NN+1: end), 6 )';
T_test = data(temp(NN+1: end), 1: 5)';
N = size(P_test, 2);

三、归一化设置

常用归一化有两种,即最大最小值归一化及标准值归一化。

bash 复制代码
method=@mapminmax;%最大最小值归一化
method=@mapstd;%标准值归一化

归一化区间可自行设置,默认[-1,1],本文采用[0,1]

bash 复制代码
%%  数据归一化
method=@mapstd;
[p_train, ps_input] = method(P_train, 0, 1);
p_test = method('apply', P_test, ps_input);

[t_train, ps_output] = method(T_train, 0, 1);
t_test = method('apply', T_test, ps_output);

四、模型创建及预测

熟悉的BP网络建模过程,不多介绍。

若涉及多隐含层,可修改[20,20,5]中的数字。前2个20代表两层隐含层的神经元数 ,后面的5为输出节点,根据本案例数据设置。

若增加或者减少隐含层,需要更改后面对应的激活函数。

bash 复制代码
net = newff(minmax(p_train), [20,20,5],{'logsig','logsig','purelin'});

代码如下:

bash 复制代码
%%  创建网络
%net = newff(minmax(p_train), t_train, 10);
net = newff(minmax(p_train), [20,20,5],{'logsig','logsig','purelin'});
%%  设置训练参数
net.trainParam.epochs = 2000;     % 迭代次数 
net.trainParam.goal = 1e-7;       % 误差阈值
net.trainParam.lr = 0.01;         % 学习率
net.trainFcn = 'trainlm';

%%  训练网络
net = train(net, p_train, t_train);

%%  仿真测试
t_sim1 = sim(net, p_train);
t_sim2 = sim(net, p_test );

%%  数据反归一化
T_sim1 = method('reverse', t_sim1, ps_output);
T_sim2 = method('reverse', t_sim2, ps_output);

五、分类预测结果

因上一步骤进行了正常的回归预测,输出一般为小数点,且不是限定标签的数值。所以需要通过find函数,将回归预测的输出结果进行分段赋值。

根据四舍五入的思路,如数据如果在5以下,则赋值为0,

如果为[5,15),赋值为10...

依次进行赋值。

bash 复制代码
for i = 1: 5
[m1,n1]=find(T_sim(i,:)<5);T_sim1(i,n1)=0;
[m2,n2]=find(T_sim(i,:)<15 & T_sim1(i,:)>=5);T_sim1(i,n2)=10;
end

六、评价指标及绘图

bash 复制代码
%%  绘图
figure
subplot(2, 1, 1)
plot(1: M, T_train(i, :), 'r-*', 1: M, T_sim1(i, :), 'b-o', 'LineWidth', 1)
legend(['x' num2str(i) '真实值'],['x' num2str(i) '预测值'])
xlabel('预测样本')
ylabel('预测结果')
string = {'训练集预测结果对比'; ['准确率acc=' num2str(acc1(i, :))]};
title(string)
xlim([1, M])
grid

subplot(2, 1, 2)
plot(1: N, T_test(i, :), 'r-*', 1: N, T_sim2(i, :), 'b-o', 'LineWidth', 1)
legend(['x' num2str(i) '真实值'],['x' num2str(i) '预测值'])
xlabel('预测样本')
ylabel('预测结果')
string = {'测试集预测结果对比';['准确率acc=' num2str(acc2(i, :))]};
title(string)
xlim([1, N])
grid

%%  分割线
disp('**************************')
disp(['下列是输出', num2str(i)])
disp('**************************')



end

七、测试新数据

若输入为一个新值,则预测结果参考下列代码:

bash 复制代码
%% 测试新数据
p_newtest=21.6;% 输入新数据
p_newtest1 = method('apply',p_newtest, ps_input);
t_simnew = sim(net, p_newtest1);

T_simnew = method('reverse', t_simnew , ps_output);

T_simnew

八、代码获取

后台私信回复"56期",可获取下载链接。

相关推荐
jk_1011 小时前
MATLAB中decomposition函数用法
开发语言·算法·matlab
zmjia1111 小时前
全流程Python编程、机器学习与深度学习实践技术应用
python·深度学习·机器学习
龙的爹23331 小时前
论文翻译 | Generated Knowledge Prompting for Commonsense Reasoning
人工智能·gpt·机器学习·语言模型·自然语言处理·nlp·prompt
_.Switch2 小时前
Python机器学习:自然语言处理、计算机视觉与强化学习
python·机器学习·计算机视觉·自然语言处理·架构·tensorflow·scikit-learn
这可就有点麻烦了2 小时前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
百锦再2 小时前
自动驾驶的技术实现及原理
人工智能·机器学习·自动驾驶
不想当个技术宅3 小时前
【梯级水电站调度优化】基于自适应权值优化粒子群算法
matlab·粒子群算法·梯级水电站调度优化
HyperAI超神经3 小时前
Meta 首个多模态大模型一键启动!首个多针刺绣数据集上线,含超 30k 张图片
大数据·人工智能·深度学习·机器学习·语言模型·大模型·数据集
sp_fyf_20243 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-03
人工智能·算法·机器学习·计算机视觉·语言模型·自然语言处理
学步_技术4 小时前
自动驾驶系列—线控悬架技术:自动驾驶背后的动力学掌控者
人工智能·机器学习·自动驾驶·线控系统·悬挂系统