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

简介: 因上一步骤进行了正常的回归预测,输出一般为小数点,且不是限定标签的数值。所以需要通过find函数,将回归预测的输出结果进行分段赋值。若涉及多隐含层,可修改[20,20,5]中的数字。前2个20代表两层隐含层的神经元数 ,后面的5为输出节点,根据本案例数据设置。输出分为五个指标,每个指标共4个评分维度,即【0 10 20 30】归一化区间可自行设置,默认[-1,1],本文采用[0,1]根据四舍五入的思路,如数据如果在5以下,则赋值为0,数据为1输入,5输出,总共482个样本。如果为[5,15),赋值为10…

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

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

一、导入数据

e035de0384857890a28dcaf324a29422_9ea31e96f2da49a28dd531cf70d8ac3f.png

数据为1输入,5输出,总共482个样本。
输出分为五个指标,每个指标共4个评分维度,即【0 10 20 30】

%%  导入数据
load data

二、数据样本划分

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

temp = randperm(size(data,1));%打乱数据顺序

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

temp = 1:size(data,1):;%不打乱数据

训练样本数量可自行设置 ,本文设置为422。
代码如下:

%%  划分训练集和测试集
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);

三、归一化设置

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

method=@mapminmax;%最大最小值归一化
method=@mapstd;%标准值归一化

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

%%  数据归一化
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为输出节点,根据本案例数据设置。
若增加或者减少隐含层,需要更改后面对应的激活函数。

net = newff(minmax(p_train), [20,20,5],{
   
   'logsig','logsig','purelin'});

代码如下:

%%  创建网络
%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...
依次进行赋值。

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

六、评价指标及绘图

bd63c687f4e3ac1225cb234520fa33d6_58e3c06ca8a94d02b44a4dc6ce95a7e4.png



%%  绘图
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

七、测试新数据

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

%% 测试新数据
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期”,可获取下载链接。

相关文章
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
9天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
10天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
17 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
4天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
18 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
11天前
|
存储 算法 决策智能
基于免疫算法的TSP问题求解matlab仿真
旅行商问题(TSP)是一个经典的组合优化问题,目标是寻找经过每个城市恰好一次并返回起点的最短回路。本文介绍了一种基于免疫算法(IA)的解决方案,该算法模拟生物免疫系统的运作机制,通过克隆选择、变异和免疫记忆等步骤,有效解决了TSP问题。程序使用MATLAB 2022a版本运行,展示了良好的优化效果。
|
10天前
|
机器学习/深度学习 算法 芯片
基于GSP工具箱的NILM算法matlab仿真
基于GSP工具箱的NILM算法Matlab仿真,利用图信号处理技术解析家庭或建筑内各电器的独立功耗。GSPBox通过图的节点、边和权重矩阵表示电气系统,实现对未知数据的有效分类。系统使用MATLAB2022a版本,通过滤波或分解技术从全局能耗信号中提取子设备的功耗信息。
|
10天前
|
机器学习/深度学习 算法 5G
基于MIMO系统的SDR-AltMin混合预编码算法matlab性能仿真
基于MIMO系统的SDR-AltMin混合预编码算法通过结合半定松弛和交替最小化技术,优化大规模MIMO系统的预编码矩阵,提高信号质量。Matlab 2022a仿真结果显示,该算法能有效提升系统性能并降低计算复杂度。核心程序包括预编码和接收矩阵的设计,以及不同信噪比下的性能评估。
26 3
|
15天前
|
机器学习/深度学习 人工智能 算法
青否数字人声音克隆算法升级,16个超真实直播声音模型免费送!
青否数字人的声音克隆算法全面升级,能够完美克隆真人的音调、语速、情感和呼吸。提供16种超真实的直播声音模型,支持3大AI直播类型和6大核心AIGC技术,60秒快速开播,助力商家轻松赚钱。AI讲品、互动和售卖功能强大,支持多平台直播,确保每场直播话术不重复,智能互动和真实感十足。新手小白也能轻松上手,有效规避违规风险。
|
16天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。