BP神经网络的诊断分类(初学者+matlab代码实现)

1、简介

bp神经网络作为反向传播的经典算法。是我最初接触的第一个神经网络,使我对机器学习产生了很高的兴趣。同时我作为老初学者,给大家介绍具体代码及思路。

2.基本原理

老规矩, 我嘴笨,怕理解的不好,上大神的理解。

深度学习 — BP算法详解(流程图、BP主要功能、BP算法的局限性)_zsffuture的博客-CSDN博客_bp算法

3、代码实现

3.1 数据集来源

我也忘了这是什么时候的搞到的数据集了。

BP神经网络的诊断分类(初学者+matlab代码实现)

图1 数据集的结构属性

该数据集为水污染的诊断分类,6个污染指标,对应4种污染状态。

BP神经网络的诊断分类(初学者+matlab代码实现)

 图2  污染指标

BP神经网络的诊断分类(初学者+matlab代码实现)

 图3  污染指标对应的标签

3.1.1对应代码

 %% 清除
clear all
clc
% 1. 导入数据
load water_data.mat
attributes = mapminmax(attributes);

3.2数据划分

将前35 个样本作为训练集,后四个作为测试集。

该数据集未做到每种污染状态的样本数据数目的一致,我也没有进行统一,你们可以在后续划分数据集的过程中,考虑到这个问题,即保持每种污染指标的数据数目相同。

% . 训练集和测试集划分

% 训练集——35个样本
train_x = attributes(:,1:35);
train_y = classes(:,1:35);
% 测试集——4个样本
test_x = attributes(:,36:end);
test_y = classes(:,36:end);

3.3创建bp神经网络

“【5 2】”为隐含层的神经网络节点

“{ ‘logsig’ ‘purelin’ }”调用的函数

%创建网络
net = newff(train_x,train_y,[5,2] ,{ 'logsig' 'purelin' } , 'traingdx' ) ; 

3.4设置神经网络的训练参数

具体参数可以自己调节着玩,

%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 100;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;%学习率

3.5训练神经网络

net = train( net,train_x,train_y) ;

3.6测试集进行测试


% 测试数据集

testInput = test_x;
Y = sim( net , testInput ) ;

3.7评估误差

我不知道为什么bp对于这个数据集根本学不到东西,好像是过拟合了。

我也没有继续调节,感兴趣的可以继续调节一下。

%查看精度

y = round(Y);

accuracy = mean(y==test_y);

BP神经网络的诊断分类(初学者+matlab代码实现)

 图4 预测污染种类 (离大谱)

实际标签为1 2 3 4,预测则为3 3 3 3,精度只有0.25,o(╥﹏╥)o。

BP神经网络的诊断分类(初学者+matlab代码实现)

 图5 bp神经网络训练结果

4.总结

bp作为最经典的机器学习网络影响了很多人,希望这篇推文对你有一点的帮助。

Ps:真的同一数据,我用svm(没用调参)随便跑一下可以达到75%的精度,结果bp,,,,,,,

哎,感兴趣的可以看一下的下一篇SVM分类的。再见

5、完整代码

 %% 清除
clear all
clc
% 1. 导入数据
load water_data.mat
attributes = mapminmax(attributes);

% 3. 训练集和测试集划分

% 训练集——35个样本
train_x = attributes(:,1:35);
train_y = classes(:,1:35);
% 测试集——4个样本
test_x = attributes(:,36:end);
test_y = classes(:,36:end);
%创建网络
net = newff(train_x,train_y,[5,2] ,{ 'logsig' 'purelin' } , 'traingdx' ) ; 

%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 100;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;%学习率

net = train( net,train_x,train_y) ;

% 测试数据集

testInput = test_x;
Y = sim( net , testInput ) ;

y = round(Y);

accuracy = mean(y==test_y);

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年3月28日 上午10:51
下一篇 2023年3月28日 上午10:52

相关推荐