• 小龙虾算法优化极限学习机实现乳腺癌诊断,(COA-ELM)数据分类


    本期文章采用小龙虾优化算法(Crayfish optimization algorithm,COA)优化极限学习机(ELM),实现数据分类。该方法也可以用于其他故障分类

    小龙虾优化算法是于2023年9月最新发表在Artifcial Intelligence Review的一个算法,该算法的收敛能力还是很不错的。

    此次的分类案例中,选用的是公用的UCI数据集。

    ELM极限学习机初始的权值阈值都是随机生成的,因此不一定是最佳的。采用智能算法优化ELM的权值阈值,使得输入与输出有更加完美的映射关系,以此来提高ELM数据分类模型的精度。

    分类案例

    COA-ELM的分类案例,采用的数据是UCI数据集中的乳腺癌分类数据集(Wisconsin Diagnostic Breast Cancer Data — wdbc),该数据一共分为两类。接下来看分类效果。

    标准ELM模型分类结果

    混淆矩阵结果图:

    64cf2ae477c3fc827018322f42f5947b.png

    简单说一下这个图该怎么理解。请大家横着看,每行的数据加起来是100%,每行的数据个数加起来就是测试集中第一类数据的真实个数。以第一行为例,测试集中一共有67个数据是属于第一类的,而在67个数据中,有65个预测正确,有2个预测成了第2类。其他行均这样理解。

    下面这个图是另一种结果展现方式,在一些论文中会用这种方式展示结果。

    83ee19adc725d141be3171f0e7723aa0.png

    COA-ELM分类结果:

    c2592f5120c98f6b9053dd26fe1decf2.png

    7acd8225a7440907a922e6a0efc6d98a.png

    acdafed2cfc216a16f0e588c2677687b.png

    03 代码展示

    1. %% 初始化
    2. clear
    3. close all
    4. clc
    5. warning off
    6. addpath(genpath(pwd));
    7. load wdbc.mat
    8. data = WDBC;
    9. data=data(randperm(size(data,1)),:); %此行代码用于打乱原始样本,使训练集测试集随机被抽取,有助于更新预测结果。
    10. input=data(:,2:end);
    11. output =data(:,1);
    12. %% 划分训练集和测试集
    13. m=fix(size(data,1)*0.8); %训练的样本数目
    14. %训练集
    15. input_train=input(1:m,:)';
    16. output_train=output(1:m,:)';
    17. % 测试集
    18. input_test=input(m+1:end,:)';
    19. output_test=output(m+1:end,:)';
    20. %% 数据归一化
    21. [inputn,inputps]=mapminmax(input_train,0,1);
    22. inputn_test=mapminmax('apply',input_test,inputps); %测试集
    23. %% 获取输入层节点、输出层节点个数
    24. inputnum=size(input_train,1);
    25. outputnum=size(output_train,1);
    26. disp('/')
    27. disp('ELM网络结构...')
    28. disp(['输入层的节点数为:',num2str(inputnum)])
    29. disp(['输出层的节点数为:',num2str(outputnum)])
    30. hiddennum = 8; %隐含层节点
    31. %% 没有优化前的ELM网络,构建ELM分类器并预测
    32. disp(' ')
    33. disp('标准的ELM网络:')
    34. activation='sin';
    35. [IW,B,LW,TF,TYPE] = elmtrain(inputn,output_train,hiddennum,activation,1);
    36. Tn_sim = elmpredict(inputn_test,IW,B,LW,TF,TYPE);
    37. test_accuracy=(sum(output_test==Tn_sim))/length(output_test);
    38. % 画图
    39. figure
    40. set(gca,'looseInset',[0 0 0 0])
    41. stem(output_test,'*')
    42. hold on
    43. plot(Tn_sim','p')
    44. xlabel('样本','fontsize',12,'fontname','TimesNewRoman');
    45. ylabel('标签值','fontsize',12,'fontname','TimesNewRoman');
    46. title(['标准ELM分类准确率:',num2str(test_accuracy*100),'%'],'fontsize',12,'fontname','TimesNewRoman');
    47. legend('实际值','预测值','fontsize',12,'fontname','TimesNewRoman');
    48. %画方框图
    49. confMat = confusionmat(output_test,Tn_sim'); %output_test是真实值标签
    50. figure;
    51. set(gca,'looseInset',[0 0 0 0])
    52. % set(gcf,'unit','centimeters','position',[5 2 23 15])
    53. zjyanseplotConfMat(confMat.');
    54. xlabel('预测标签','fontsize',12,'fontname','TimesNewRoman');
    55. ylabel('真实标签','fontsize',12,'fontname','TimesNewRoman');
    56. title(['标准ELM分类准确率:',num2str(test_accuracy*100),'%'],'fontsize',12,'fontname','TimesNewRoman');
    57. hold off
    58. %% 采用COA优化ELM
    59. TYPE=1;
    60. [Alpha_score,bestchrom,trace]=COA(inputnum,hiddennum,TYPE,activation,inputn,output_train,inputn_test,output_test);% PSOCHOA
    61. %% 优化后结果分析
    62. figure
    63. set(gca,'looseInset',[0 0 0 0])
    64. plot(1-trace,'r--','linewidth',1)
    65. legend('COA-ELM优化曲线')
    66. title('COA适应度曲线图','fontsize',12,'fontname','TimesNewRoman');
    67. xlabel('进化代数','fontsize',12,'fontname','TimesNewRoman');ylabel('诊断正确率','fontsize',12,'fontname','TimesNewRoman');
    68. x=bestchrom;
    69. %% 把最优初始阀值权值赋予ELM重新训练与预测
    70. [W,B1,LW,activation] = angintrain(x,inputnum,hiddennum,inputn,output_train,activation,TYPE);

    代码中注释非常详细,简单易懂。

    代码附带UCI常用的数据集及其解释。大家可以自行尝试别的数据进行分类。附带COA算法在CEC2005函数的测试代码。

    代码目录如下:

    654e23298e1d6dabc707a7117448e9d1.png

    点击下方卡片获取更多代码!

  • 相关阅读:
    R语言生物群落数据统计分析
    CentOS系统上定时备份与清理Java项目日志文件
    教程 - 深度探讨在 Vue3 中引入 CesiumJS 的最佳方式
    vSphere6.7创建Windows Server 2008虚拟机及磁盘扩容
    Python采集某Top 250信息,再也不怕寂寞无聊......
    文献阅读(183)MAGMA
    超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
    2022-8-21 01点 程序爱生活 纳指可能转向一次大跌中,奇怪的0.618数字出现了,恒指被美股带着可能要走破位,开始做空。
    MySQL 之多版本并发控制 MVCC
    pandas第六章 -连接
  • 原文地址:https://blog.csdn.net/woaipythonmeme/article/details/133802223