当前位置:网站首页>《MATLAB 神经网络43个案例分析》:第26章 LVQ神经网络的分类——乳腺肿瘤诊断
《MATLAB 神经网络43个案例分析》:第26章 LVQ神经网络的分类——乳腺肿瘤诊断
2022-06-21 16:07:00 【mozun2020】
《MATLAB 神经网络43个案例分析》:第26章 LVQ神经网络的分类——乳腺肿瘤诊断
1. 前言
《MATLAB 神经网络43个案例分析》是MATLAB技术论坛(www.matlabsky.com)策划,由王小川老师主导,2013年北京航空航天大学出版社出版的关于MATLAB为工具的一本MATLAB实例教学书籍,是在《MATLAB神经网络30个案例分析》的基础上修改、补充而成的,秉承着“理论讲解—案例分析—应用扩展”这一特色,帮助读者更加直观、生动地学习神经网络。
《MATLAB神经网络43个案例分析》共有43章,内容涵盖常见的神经网络(BP、RBF、SOM、Hopfield、Elman、LVQ、Kohonen、GRNN、NARX等)以及相关智能算法(SVM、决策树、随机森林、极限学习机等)。同时,部分章节也涉及了常见的优化算法(遗传算法、蚁群算法等)与神经网络的结合问题。此外,《MATLAB神经网络43个案例分析》还介绍了MATLAB R2012b中神经网络工具箱的新增功能与特性,如神经网络并行计算、定制神经网络、神经网络高效编程等。
近年来随着人工智能研究的兴起,神经网络这个相关方向也迎来了又一阵研究热潮,由于其在信号处理领域中的不俗表现,神经网络方法也在不断深入应用到语音和图像方向的各种应用当中,本文结合书中案例,对其进行仿真实现,也算是进行一次重新学习,希望可以温故知新,加强并提升自己对神经网络这一方法在各领域中应用的理解与实践。自己正好在多抓鱼上入手了这本书,下面开始进行仿真示例,主要以介绍各章节中源码应用示例为主,本文主要基于MATLAB2015b(32位)平台仿真实现,这是本书第二十六章LVQ神经网络的分类实例,话不多说,开始!
2. MATLAB 仿真示例
打开MATLAB,点击“主页”,点击“打开”,找到示例文件
选中chapter26_lvq.m,点击“打开”
chapter26_lvq.m源码如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能: LVQ神经网络的分类——乳腺肿瘤诊断
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-18
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LVQ神经网络的分类——乳腺肿瘤诊断
%% 清空环境变量
clear all
clc
warning off
tic
%% 导入数据
load data.mat
a = randperm(569);
Train = data(a(1:500),:);
Test = data(a(501:end),:);
% 训练数据
P_train = Train(:,3:end)';
Tc_train = Train(:,2)';
T_train = ind2vec(Tc_train);
% 测试数据
P_test = Test(:,3:end)';
Tc_test = Test(:,2)';
%% 创建网络
count_B = length(find(Tc_train == 1));
count_M = length(find(Tc_train == 2));
rate_B = count_B/500;
rate_M = count_M/500;
net = newlvq(minmax(P_train),20,[rate_B rate_M],0.01,'learnlv1');
% 设置网络参数
net.trainParam.epochs = 1000;
net.trainParam.show = 10;
net.trainParam.lr = 0.1;
net.trainParam.goal = 0.1;
%% 训练网络
net = train(net,P_train,T_train);
%% 仿真测试
T_sim = sim(net,P_test);
Tc_sim = vec2ind(T_sim);
result = [Tc_sim;Tc_test]
%% 结果显示
total_B = length(find(data(:,2) == 1));
total_M = length(find(data(:,2) == 2));
number_B = length(find(Tc_test == 1));
number_M = length(find(Tc_test == 2));
number_B_sim = length(find(Tc_sim == 1 & Tc_test == 1));
number_M_sim = length(find(Tc_sim == 2 &Tc_test == 2));
disp(['病例总数:' num2str(569)...
' 良性:' num2str(total_B)...
' 恶性:' num2str(total_M)]);
disp(['训练集病例总数:' num2str(500)...
' 良性:' num2str(count_B)...
' 恶性:' num2str(count_M)]);
disp(['测试集病例总数:' num2str(69)...
' 良性:' num2str(number_B)...
' 恶性:' num2str(number_M)]);
disp(['良性乳腺肿瘤确诊:' num2str(number_B_sim)...
' 误诊:' num2str(number_B - number_B_sim)...
' 确诊率p1=' num2str(number_B_sim/number_B*100) '%']);
disp(['恶性乳腺肿瘤确诊:' num2str(number_M_sim)...
' 误诊:' num2str(number_M - number_M_sim)...
' 确诊率p2=' num2str(number_M_sim/number_M*100) '%']);
toc
添加完毕,点击“运行”,开始仿真,输出仿真结果如下:
result =
1 至 19 列
1 1 2 1 2 2 1 1 1 1 1 1 1 1 2 2 2 1 2
1 1 2 1 2 2 2 1 1 1 1 1 1 1 2 2 1 1 2
20 至 38 列
1 1 1 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1
2 1 1 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1
39 至 57 列
1 1 1 1 1 1 1 1 2 2 1 1 2 2 2 1 1 1 1
1 2 2 2 2 2 1 1 2 2 2 1 2 2 1 1 1 1 1
58 至 69 列
1 1 1 2 2 2 1 1 1 1 2 1
1 1 1 2 2 2 1 2 1 1 2 1
病例总数:569 良性:357 恶性:212
训练集病例总数:500 良性:314 恶性:186
测试集病例总数:69 良性:43 恶性:26
良性乳腺肿瘤确诊:41 误诊:2 确诊率p1=95.3488%
恶性乳腺肿瘤确诊:17 误诊:9 确诊率p2=65.3846%
时间已过 6.838382 秒。

依次点击Plots中的Performance,Training State,Confusion,Receiver Operating Characteristic,可弹出以下图示:



回到MATLAB中,打开文件视图中chapter26_bp.m
chapter26_bp.m源码如下:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%功能:BP神经网络的分类——乳腺肿瘤诊断
%环境:Win7,Matlab2015b
%Modi: C.S
%时间:2022-06-19
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% BP神经网络的分类——乳腺肿瘤诊断
tic
%% 创建网络
net = newff(minmax(P_train),[50 1],{
'tansig','purelin'},'trainlm');
%% 设置网络参数
net.trainParam.epochs = 1000;
net.trainParam.show = 10;
net.trainParam.lr = 0.1;
net.trainParam.goal = 0.1;
%% 训练网络
net = train(net,P_train,Tc_train);
%% 仿真测试
T_sim = sim(net,P_test);
for i = 1:length(T_sim)
if T_sim(i) <= 1.5
T_sim(i) = 1;
else
T_sim(i) = 2;
end
end
result = [T_sim;Tc_test]
number_B = length(find(Tc_test == 1));
number_M = length(find(Tc_test == 2));
number_B_sim = length(find(T_sim == 1 & Tc_test == 1));
number_M_sim = length(find(T_sim == 2 &Tc_test == 2));
disp(['病例总数:' num2str(569)...
' 良性:' num2str(total_B)...
' 恶性:' num2str(total_M)]);
disp(['训练集病例总数:' num2str(500)...
' 良性:' num2str(count_B)...
' 恶性:' num2str(count_M)]);
disp(['测试集病例总数:' num2str(69)...
' 良性:' num2str(number_B)...
' 恶性:' num2str(number_M)]);
disp(['良性乳腺肿瘤确诊:' num2str(number_B_sim)...
' 误诊:' num2str(number_B - number_B_sim)...
' 确诊率p1=' num2str(number_B_sim/number_B*100) '%']);
disp(['恶性乳腺肿瘤确诊:' num2str(number_M_sim)...
' 误诊:' num2str(number_M - number_M_sim)...
' 确诊率p2=' num2str(number_M_sim/number_M*100) '%']);
toc
点击“运行”,开始仿真,输出仿真结果如下:
result =
1 至 19 列
1 1 2 1 2 2 1 1 1 1 1 1 1 1 2 2 2 1 2
1 1 2 1 2 2 2 1 1 1 1 1 1 1 2 2 1 1 2
20 至 38 列
1 1 1 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1
2 1 1 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1
39 至 57 列
1 1 1 1 1 1 1 1 2 2 1 1 2 2 2 1 1 1 1
1 2 2 2 2 2 1 1 2 2 2 1 2 2 1 1 1 1 1
58 至 69 列
1 1 1 2 2 2 1 1 1 1 2 1
1 1 1 2 2 2 1 2 1 1 2 1
病例总数:569 良性:357 恶性:212
训练集病例总数:500 良性:314 恶性:186
测试集病例总数:69 良性:43 恶性:26
良性乳腺肿瘤确诊:41 误诊:2 确诊率p1=95.3488%
恶性乳腺肿瘤确诊:17 误诊:9 确诊率p2=65.3846%
时间已过 6.838382 秒。
>> chapter26_bp
result =
1 至 19 列
1 1 2 1 2 2 2 1 1 1 1 1 1 1 2 2 1 2 2
1 1 2 1 2 2 2 1 1 1 1 1 1 1 2 2 1 1 2
20 至 38 列
1 1 1 2 1 1 2 2 2 1 1 2 1 1 1 1 1 1 1
2 1 1 1 1 1 1 2 2 1 1 2 1 1 1 1 1 1 1
39 至 57 列
1 2 2 2 2 2 2 1 1 2 2 2 2 2 2 2 1 1 1
1 2 2 2 2 2 1 1 2 2 2 1 2 2 1 1 1 1 1
58 至 69 列
1 1 1 2 1 2 2 2 1 2 2 1
1 1 1 2 2 2 1 2 1 1 2 1
病例总数:569 良性:357 恶性:212
训练集病例总数:500 良性:314 恶性:186
测试集病例总数:69 良性:43 恶性:26
良性乳腺肿瘤确诊:34 误诊:9 确诊率p1=79.0698%
恶性乳腺肿瘤确诊:23 误诊:3 确诊率p2=88.4615%
时间已过 2.954276 秒。

依次点击Plots中的Performance,Training State,Regression,可弹出以下图示:


3. 小结
LVQ(Learning Vector Quantization)神经网络是Kohonen于1989年提出基于竞争网络的学习矢量量化网络,主要用于做分类。属于前向神经网络类型,在模式识别和优化领域有着广泛的的应用。LVQ神经网络由三层组成,即输入层、隐含层和输出层,网络在输入层与隐含层间为完全连接,而在隐含层与输出层间为部分连接,每个输出层神经元与隐含层神经元的不同组相连接。隐含层和输出层神经元之间的连接权值固定为1。输入层和隐含层神经元间连接的权值建立参考矢量的分量(对每个隐含神经元指定一个参考矢量)。在网络训练过程中,这些权值被修改。隐含层神经元(又称为Kohnen神经元)和输出神经元都具有二进制输出值。当某个输入模式被送至网络时,参考矢量最接近输入模式的隐含神经元因获得激发而赢得竞争,因而允许它产生一个“1”,而其它隐含层神经元都被迫产生“0”。与包含获胜神经元的隐含层神经元组相连接的输出神经元也发出“1”,而其它输出神经元均发出“0”。产生“1”的输出神经元给出输入模式的类,由此可见,每个输出神经元被用于表示不同的类。
本章将LVQ神经网络与BP神经网络在乳腺肿瘤诊断预测上进行对比仿真,可以看到在良性与恶性两种分类预测中,LVQ神经网络与BP神经网络各有优劣,本实例仿真需要首先运行LVQ得到相应数据,再运行BP进行仿真。对本章内容感兴趣或者想充分学习了解的,建议去研习书中第二十六章节的内容。后期会对其中一些知识点在自己理解的基础上进行补充,欢迎大家一起学习交流。
边栏推荐
猜你喜欢

软件测试体系学习及构建(14)-测试基础之软件测试和开发模型概述

疫情数据对应的大陆和全球的矢量数据下载,基于geojson转shp

Detailed explanation of Fisher information quantity detection countermeasure sample code

窗帘做EN 1101易燃性测试过程是怎么样的?

【mysql学习笔记15】用户管理

栈的生长方向和内存生长方向
![[MySQL learning notes 18] constraints](/img/29/c72f83bfae8fd8b43e78cdf1aa9cbc.png)
[MySQL learning notes 18] constraints

Set up your own website (11)

#Vscode工具#

Niuke.com: large number addition
随机推荐
Implementation of decode function in GP
Sequence traversal of binary tree
数据类型
MySQL 1055错误-this is incompatible with sql_mode=only_full_group_by解决方案
云函数实现模糊搜索功能
变量与指针
我的小工具-卡片学习APP 完成啦
[Error] ‘vector‘ was not declared in this scope
Application of integrated servo motor and Schneider PLC tm241cec24t under CANopen Protocol
The beta version of move protocol is stable, and it is temporarily decided to expand the scale of the prize pool
Android kotlin class delegation by, by lazy key
[issue 349] Interviewer: how to gracefully customize the ThreadPoolExecutor thread pool?
BM95 分糖果问题
蓄电池外壳如何执行EN45545防火试验
variable
[MySQL learning notes 19] multi table query
Four areas of telephone memory
【没搞懂路由策略?盘它!】
FragmentStatePagerAdapter 与FragmentPagerAdapter的区别
[MySQL learning notes 18] constraints