0


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

1、简介

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

2.基本原理

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

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

3、代码实现

3.1 数据集来源

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

图1 数据集的结构属性

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

图2 污染指标

图3 污染指标对应的标签

3.1.1对应代码

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

3.2数据划分

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

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

  1. % . 训练集和测试集划分
  2. % 训练集——35个样本
  3. train_x = attributes(:,1:35);
  4. train_y = classes(:,1:35);
  5. % 测试集——4个样本
  6. test_x = attributes(:,36:end);
  7. test_y = classes(:,36:end);

3.3创建bp神经网络

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

“{ 'logsig' 'purelin' }”调用的函数

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

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

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

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

3.5训练神经网络

  1. net = train( net,train_x,train_y) ;

3.6测试集进行测试

  1. % 测试数据集
  2. testInput = test_x;
  3. Y = sim( net , testInput ) ;

3.7评估误差

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

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

  1. %查看精度
  2. y = round(Y);
  3. accuracy = mean(y==test_y);

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

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

图5 bp神经网络训练结果

4.总结

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

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

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

5、完整代码

  1. %% 清除
  2. clear all
  3. clc
  4. % 1. 导入数据
  5. load water_data.mat
  6. attributes = mapminmax(attributes);
  7. % 3. 训练集和测试集划分
  8. % 训练集——35个样本
  9. train_x = attributes(:,1:35);
  10. train_y = classes(:,1:35);
  11. % 测试集——4个样本
  12. test_x = attributes(:,36:end);
  13. test_y = classes(:,36:end);
  14. %创建网络
  15. net = newff(train_x,train_y,[5,2] ,{ 'logsig' 'purelin' } , 'traingdx' ) ;
  16. %设置训练参数
  17. net.trainparam.show = 50 ;
  18. net.trainparam.epochs = 100;
  19. net.trainparam.goal = 0.01 ;
  20. net.trainParam.lr = 0.01 ;%学习率
  21. net = train( net,train_x,train_y) ;
  22. % 测试数据集
  23. testInput = test_x;
  24. Y = sim( net , testInput ) ;
  25. y = round(Y);
  26. accuracy = mean(y==test_y);

本文转载自: https://blog.csdn.net/weixin_49890890/article/details/125253982
版权归原作者 向秃头前进中 所有, 如有侵权,请联系我们删除。

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

还没有评论