【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期",可获取下载链接。

相关推荐
MemoriKu6 分钟前
Flutter 相册 APP 收尾优化实战:未分析任务横幅持久隐藏与标签回归测试补强
大数据·人工智能·flutter·elasticsearch·机器学习·搜索引擎·重构
林间码客7 分钟前
02数据挖掘:数据属性、类型与相似性度量
人工智能·算法·机器学习
王小王-1231 小时前
基于多种机器学习的豆瓣电影分析与可视化预测评估系统
人工智能·机器学习·flask·豆瓣电影·电影评分预测·影评分析·哪吒电影评论分析
装不满的克莱因瓶1 小时前
学习 LPRNet 框架——轻量级车牌识别网络从结构到工程落地
人工智能·python·深度学习·机器学习·ai
王小王-1231 小时前
基于机器学习的重庆主城的二手房价格影响因素分析与预测分析
机器学习·可视化·二手房价格预测·重庆二手房·成都二手房
小糖学代码2 小时前
机器学习:8.决策树
人工智能·决策树·机器学习
KaMeidebaby2 小时前
卡梅德生物技术快报|噬菌体展示文库构建全流程解析 | 大豆球蛋白纳米抗体筛选实践
人工智能·python·tcp/ip·算法·机器学习
硅谷秋水2 小时前
物理人工智能的驾驭工程:机器人中间件是驾驭层
人工智能·机器学习·语言模型·中间件·机器人
-Thinker2 小时前
AI 算法核心原理与实现
人工智能·算法·机器学习
装不满的克莱因瓶2 小时前
掌握生成对抗网络(GAN)原理——从零理解“对抗学习”的核心思想与生成机制
人工智能·pytorch·python·深度学习·神经网络·机器学习·ai