bp神经网络作为反向传播的经典算法。是我最初接触的第一个神经网络,使我对机器学习产生了很高的兴趣。同时我作为老初学者,给大家介绍具体代码及思路。
老规矩, 我嘴笨,怕理解的不好,上大神的理解。
深度学习 --- BP算法详解(流程图、BP主要功能、BP算法的局限性)_zsffuture的博客-CSDN博客_bp算法
我也忘了这是什么时候的搞到的数据集了。
图1 数据集的结构属性
该数据集为水污染的诊断分类,6个污染指标,对应4种污染状态。
图2 污染指标
图3 污染指标对应的标签
%% 清除
clear all
clc
% 1. 导入数据
load water_data.mat
attributes = mapminmax(attributes);
将前35 个样本作为训练集,后四个作为测试集。
该数据集未做到每种污染状态的样本数据数目的一致,我也没有进行统一,你们可以在后续划分数据集的过程中,考虑到这个问题,即保持每种污染指标的数据数目相同。
% . 训练集和测试集划分
% 训练集——35个样本
train_x = attributes(:,1:35);
train_y = classes(:,1:35);
% 测试集——4个样本
test_x = attributes(:,36:end);
test_y = classes(:,36:end);
“【5 2】”为隐含层的神经网络节点
“{ 'logsig' 'purelin' }”调用的函数
%创建网络
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 ) ;
我不知道为什么bp对于这个数据集根本学不到东西,好像是过拟合了。
我也没有继续调节,感兴趣的可以继续调节一下。
%查看精度
y = round(Y);
accuracy = mean(y==test_y);
图4 预测污染种类 (离大谱)
图5 bp神经网络训练结果
bp作为最经典的机器学习网络影响了很多人,希望这篇推文对你有一点的帮助。
%% 清除
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);