基于LVQ神经网络的乳腺肿癌诊断

news2024/12/28 18:55:41

1.案例背景

1.1 LVQ 神经网络概述

        学习向量量化(Learning Vector Quantization,LVQ)神经网络是一种用于训练竞争层的有监督学习(supervisedlearning)方法的输人前向神经网络,其算法是从Kohonen竞争算法演化而来的。LVQ神经网络在模式识别和优化领域有着广泛的应用。
        1)LVQ神经网络的结构
        LVQ神经网络由3层神经元组成,即输入层、竞争层和线性输出层,如图26-1所示。输人层与竞争层之间采用全连接的方式,竞争层与线性输出层之间采用部分连接的方式。竞争层神经元个数总是大于线性输出层神经元个数,每个竞争层神经元只与一个线性输出层神经元相连接且连接权值恒为1。但是,每个线性输出层神经元可以与多个竞争层神经元相连接。竞争层神经元与线性输出层神经元的值只能是1或0。当某个输人模式被送至网络时,与输人模式距离最近的竞争层神经元被激活,神经元的状态为“1”,而其他竞争层神经元的状态均为“0”。因此,与被激活神经元相连接的线性输出层神经元状态也为“1”,而其他线性输出层神经元的状态均为“0”。

元的输出。
        2)LVQ神经网络的学习算法
        LVQ神经网络算法是在有教师状态下对竞争层进行训练的一种学习算法,因此 LVQ算法可以认为是把自组织特征映射算法改良成有教师学习的算法。LVQ神经网络算法可分为LVQ1算法和LVQ2算法两种。
        (1) LVQ 1算法
        向量量化是利用输人向量的固有结构进行数据压缩的技术,学习向量量化是在向量量化基础上能将输人向量分类的监督学习技术。Kohonen把自组织特征映射算法改良成有教师学习算法,首先设计了LVQ 1算法。LVQ 1的训练过程开始于随机地自“标定”训练集合选择一个输人向量以及该向量的正确类别。
        LVQ 1算法的基本思想是:计算距离输人向量最近的竞争层神经元,从而找到与之相连接的线性输出层神经元,若输人向量的类别与线性输出层神经元所对应的类别--致,则对应的竞争层神经元权值沿着输人向量的方向移动;反之,若两者的类别不一致,则对应的竞争层神经元权值沿着输入向量的反方向移动。基本的LVQ1算法的步骤为:

        (2) LVQ2算法
        在LVQ1算法中,只有一个神经元可以获胜,即只有一个神经元的权值可以得到更新调整。为了提高分类的正确率,Kohonen改进了LVQ1,并且被称为新版本LVQ2。LVQ2算法基于光滑的移动决策边界逼近Bayes极限。LVQ 2版本接着被修改,产生LVQ 2. 1,并且最终发展为LVQ 3。这些后来的LVQ版本的共同特点是引入了“次获胜”神经元,获胜神经元的权值向量和“次获胜"神经元的权值向量都被更新。具体计算步骤如下:

        3)LVQ神经网络特点
        竞争层神经网络可以自动学习对输人向量模式的分类,但是竞争层进行的分类只取决于输入向量之间的距离,当两个输人向量非常接近时,竞争层就可能将它们归为一-类。在竞争层:的设计中没有这样的机制,即严格地判断任意的两个输人向量是属于同一类还是属于不同类。而对于LVQ网络用户指定目标分类结果,网络可以通过监督学习完成对输人向量模式的准确分类。
        与其他模式识别和映射方式相比,LVQ神经网络的优点在于网络结构简单,只通过内部单元的相互作用就可以完成十分复杂的分类处理,也很容易将设计域中的各种繁杂分散的设计条件收敛到结论上来。而且它不需要对输人向量进行归一化、正交化处理,只需要直接计算输入向量与竞争层之间的距离,从而实现模式识别,因此简单易行。

1.2 乳腺肿瘤诊断概述

        目前,乳腺癌已成为世界上妇女发病率最高的癌症。近年来在中国,尤其在相对比较发达的东部地区,乳腺癌的发病率及死亡率呈明显的增长趋势。研究表明,乳腺恶性肿瘤若能早期发现、早期诊断、早期治疗,可取得良好的效果。过去的20年里,人们在分析和诊断各种乳腺肿瘤方面发现了很多方法,尤其是针对乳腺图像的分析已日趋成熟。医学研究发现,乳腺肿瘤病灶组织的细胞核显微图像与正常组织的细胞核显微图像不同,但是用一般的图像处理方法很难对其进行区分。因此,运用科学的方法,根据乳腺肿瘤病灶组织的细胞核显微图像对乳腺肿瘤属于良性或恶性进行诊断显得尤为重要。
        威斯康辛大学医学院经过多年的收集和整理,建立了一个乳腺肿瘤病灶组织的细胞核显微图像数据库。数据库中包含了细胞核图像的10个量化特征(细胞核半径、质地、周长、面积、光滑性、紧密度、凹陷度、凹陷点数、对称度、断裂度),这些特征与肿瘤的性质有密切的关系。因此,需要建立-一个确定的模型来描述数据库中各个量化特征与肿瘤性质的关系,从而可以根据细胞核显微图像的量化特征诊断乳腺肿瘤是良性还是恶性的。

2.模型建立

2.1 设计恩路

        将乳腺肿瘤病灶组织的细胞核显微图像的10个量化特征作为网络的输人,良性乳腺肿瘤
和恶性乳腺肿瘤作为网络的输出。用训练集数据对设计的LVQ神经网络进行训练,然后对
测试集数据进行测试并对测试结果进行分析。

2.2 设计步骤

        根据上述设计思路,设计步骤主要包括以下几个,如图26-2所示。

        1)数据采集
        威斯康辛大学医学院的乳腺癌数据集共包括569个病例,其中,良性357例,恶性212例。本书随机选取500组数据作为训练集,剩余69组作为测试集。每个病例的一组数据包括采样组织中各细胞核的10个特征量的平均值、标准差和最坏值(各特征的3个最大数据的平均值)共30个数据。数据文件中每组数据共分32个字段,第1个字段为病例编号;第2个字段为确诊结果,B为良性,M为恶性;第3~12个字段是该病例肿瘤病灶组织的各细胞核显微图像的10个量化特征的平均值;第13~22个字段是相应的标准差;第23~32个字段是相应的最坏值。
        2)网络创建
        数据采集完成后,利用MATLAB自带的神经网络工具箱中的函数newlvq()可以构建一个LVQ神经网络,函数具体用法将在第3节中详细介绍。
        3)网络训练
        网络创建完毕后,若需要,还可以对神经网络的参数进行设置和修改。将训练集500个病例的数据输入网络,便可以对网络进行训练。
        4)网络仿真
        网络通过训练后,将测试集69组的10个量化特征数据输人网络,便可以得到对应的输出(即分类)。
        5)结果分析.
        通过对网络仿真结果的分析,可以得到误诊率(包括良性被误诊为恶性及恶性被误诊为良性),从而可以对该方法的可行性进行评价。同时,可以与其他方法进行比较,探讨该方法的有效性。

3.LVQ 网络的神经网络工具箱函数

        MATLAB的神经网络工具箱为LVQ神经网络提供了大量的函数工具,本节将详细介绍这些函数的功能、调用格式和注意事项等问题。

3.1LVQ网络创建函数

        newlvq()函数用于创建一一个学习向量量化LVQ网络,其调用格式为:
net = newlvq(PR,S1, PC,LR,LE)
        其中,PR为输人向量的范围,size(PR)=[R 2],R为输人向量的维数;S1为竞争层神经元的个数;PC为线性输出层期望类别各自所占的比重;LR为学习速率,默认值为0.01;LF为学习函数,默认为“learnlv1"。

3.2LVQ网络学习函数

        1) LVQ 1学习算法
        learnlv1是LVQ1算法对应的权值学习函数,其调用格式为:
[dw,Ls] = learnlv1(W,P,Z,N,A,T,E,gW,gA,D,LP,LS)

        其中,dW为权值(或阈值)变化矩阵;LS为当前学习状态(可省略);W为权值矩阵或者是阈值矢量;P为输入矢量或者是全为1的矢量;Z为输人层的权值矢量(可省略);N为网络的输人矢量(可省略);A为网络的输出矢量;T为目标输出矢量(可省略);E为误差矢量(可省略);gW为与性能相关的权值梯度矩阵(可省略);gA为与性能相关的输出梯度矩阵;D为神经元的距离矩阵;LP为学习参数,默认值为0.01;LS为初始学习状态。
        2) LVQ2学习算法
        learnlv2是LVQ2算法对应的权值学习函数,其调用格式为:
[dw,ls] = learnlv2(W,P,Z,N,A,T, E,gW,gA,D,LP,LS)
        其参数意义与learnlv1中的参数意义相同,只是权值调整的方法不同,此处不再赘述。

4.MATLAB 实现

        利用MATLAB神经网络工具箱提供的函数可以方便地在MATLAB环境下实现上述步骤。

%% LVQ神经网络的分类——乳腺肿瘤诊断

%% 清空环境变量
clear all
clc
warning off

%% 导入数据
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) '%']);

        某次运行神经网络训练测试的结果如下:

病例总数:569  良性:357   恶性 :212
训练集病例总数:500  良性:312  恶性 :188
测试集病例总数:69  良性:45   恶性:24
良性乳腺肿瘤确诊:43  误诊:2   确诊率 p1= 95.5556%
恶性乳腺肿瘤确诊:20  误诊:4   确诊率 p2= 83.3333%

        从上述结果可以看出,在69组测试集数据中,有6组数据误诊断(2组将良性乳腺肿瘤误诊为恶性乳腺肿瘤,4组将恶性乳腺肿瘤误诊为良性乳腺肿瘤),平均诊断正确率达91. 3%(63/69)。实验结果表明,将LVQ神经网络应用于模式识别是可行的。

5.案例拓展

        本小节将对比上述 LVQ 神经网络 经网络两 种模 型的效果, BP神经网络模型的程序如下:
%% BP神经网络的分类——乳腺肿瘤诊断

%% 创建网络
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) '%']);

        说明:由于BP网络输出非二值结果,因此程序中进行了四舍五入处理,即若输出小于1.5则认为属于良性肿瘤,输出大于1.5则表示属于恶性肿瘤。
        在训练集和测试集与LVQ神经网络相同的情况下,程序运行结果为:
病例总数:569  良性:357  恶性:212
训练集病例总数:500  良性:312   恶性:188
测试集病例总数:69   良性:45   恶性:24
良性乳腺肿瘤确诊:35   误诊:10   确诊率p1= 77.7778%
恶性乳腺肿瘤确诊:16   误诊:8     确诊率p2= 66.6667%
        从上述结果可以看出,在69组测试集数据中,有18组数据误诊断(10组将良性乳腺肿瘤误诊为恶性乳腺肿瘤,8组将恶性乳腺肿瘤误诊为良性乳腺肿瘤),平均诊断正确率达73.9%(51/69)。对比LVQ神经网络及BP神经网络的仿真结果,可以看出,LVQ神经网络的效果比BP神经网络要好很多,这也表明LVQ神经网络用于模式识别是有效的。
        LVQ神经网络无需对数据进行预处理,这使得相比于其他神经网络,LVQ神经网络更简单、有效。LVQ神经网络已经应用到各行各业中,如故障诊断、性能评价、风险预测等。近年来,许多人致力于研究LVQ神经网络的特点,提出了很多改进的算法以解决“死”神经元问题、改善权值调整规则等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Sklearn】基于逻辑回归算法的数据分类预测(Excel可直接替换数据))

【Sklearn】基于逻辑回归算法的数据分类预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.模型参数3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果 1.模型原理 逻辑回归是一种用于二分类问题的统计学习方法&#xff0c;尽管名字中含有“回归”&#xff0c…

Redis 缓存过期及删除

一、Redis缓存过期策略 物理内存达到上限后&#xff0c;像磁盘空间申请虚拟内存(硬盘与内存的swap),甚至崩溃。 内存与硬盘交换 (swap) 虚拟内存&#xff0c;频繁I0 性能急剧下降&#xff0c;会造成redis内存急剧下降&#xff1b; 一般设置物理内存的3/4&#xff0c;在redis…

Java算法_ 二叉树的中序遍历(LeetCode_Hot100)

题目描述&#xff1a;给定一个二叉树的根节点 &#xff0c;返回 它的 中序 遍历 。root 获得更多&#xff1f;算法思路:代码文档&#xff0c;算法解析的私得。 运行效果 完整代码 import java.util.ArrayList; import java.util.List;/*** 2 * Author: LJJ* 3 * Date: 2023/8/…

PyTorch深度学习实践---笔记

PyTorch深度学习实践---笔记 2.线性模型&#xff08;Linear Model&#xff09;2.exercise 3. 梯度下降算法&#xff08;Gradient Descent&#xff09;3.1梯度下降&#xff08;Gradient Descent&#xff09;3.2 随机梯度下降&#xff08;Stochastic Gradient Descent&#xff09…

编译OpenCV问题解决:已经编译OpenCV成功之后无法运行测试代码

报错问题如下&#xff1a; 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK2001 无法解析的外部符号 "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class c…

【腾讯云 Cloud Studio 实战训练营】在线 IDE 编写 canvas 转换黑白风格头像

关于 Cloud Studio Cloud Studio 是基于浏览器的集成式开发环境(IDE)&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 Cloud Studio 作为在线IDE&#xff0c;包含代码高亮、自动补全、Gi…

GIt Squash 多个提交压缩提交

假设你有一个名为 feature 的分支&#xff0c;它包含三个提交&#xff08;A, B, C&#xff09;&#xff0c;并且你想将这三个提交压缩成一个。下面是如何做到这一点的。 首先&#xff0c;找出你要开始压缩的那个最早提交的哈希值。在这个例子中&#xff0c;我们假设 A 是最早的…

RK3588平台开发系列讲解(AI 篇)RKNPU 推理软件框架

文章目录 一、推理软件框架二、RKNN 模型三、学习步骤整理沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解什么是RKNPU。 一、推理软件框架 RKNPU 硬件层 RKNPU 驱动层 RKNPU 的驱动层是连接上层应用和 RKNPU 硬件的桥梁。驱动层的主要作用是将应用程序…

Health Kit基于数据提供专业方案,改善用户睡眠质量

什么是CBT-I? 中国社科院等机构今年发布的《中国睡眠研究报告2023》内容显示&#xff0c;2022年&#xff0c;受访者的每晚平均睡眠时长为7.40小时&#xff0c;近半数受访者的每晚平均睡眠时长不足8小时(47.55%)&#xff0c;16.79%的受访者的每晚平均睡眠时长不足7小时。这些数…

shell脚本和解释器

shell脚本和解释器 #!是shell脚本文件的标识&#xff0c;/bin/bash代表要使用的解析器&#xff0c;#是注释符号 test.sh #!/bin/bashls whoami #下面这条命令会执行失败&#xff0c;但不会影响其他命令的执行 cat /etc/shadow ps对于上面的脚本文件&#xff0c;后缀是.sh或者…

Leaflet入门,Leaflet如何自定义版权信息,以vue2-leaflet修改自定义版权为例

前言 本章讲解使用Leaflet的vue2-leaflet或者vue-leaflet插件来实现自定义版权信息的功能。 # 实现效果演示 见图片右下角版权信息 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定式的使用Leaflet地图,以及初始化后拿到leaflet对象…

三、Dubbo 注册中心

三、Dubbo 注册中心 3.1 注册中心概述 主要作用 动态加入&#xff1a;服务提供者通过注册中心动态地把自己暴露给其他消费者动态发现&#xff1a;消费者动态地感知新的配置、路由规则和新的服务提供者动态调整&#xff1a;注册中心支持参数的动态调整&#xff0c;新参数自动更…

[HDLBits] Exams/m2014 q4d

Implement the following circuit: module top_module (input clk,input in, output out);always(posedge clk) beginout<out^in;end endmodule直接写out^in就行

LangChain手记 Chains

整理并翻译自DeepLearning.AILangChain的官方课程&#xff1a;Chains&#xff08;源代码可见&#xff09; Chains 直译链&#xff0c;表达的意思更像是对话链&#xff0c;对话链的背后是思维链 LLM Chain&#xff08;LLM链&#xff09; 首先介绍了一个最简单的例子&#xff0c…

解决xss转义导致转码的问题

一、xss简介 人们经常将跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;缩写为CSS&#xff0c;但这会与层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;的缩写混淆。因此&#xff0c;有人将跨站脚本攻击缩写为XSS。跨站脚本攻击&#xff…

【量化课程】02_3.投资学基础概念

文章目录 1. 投资和投资学的关系1.1 什么是投资&#xff1f;1.2 什么是投资学&#xff1f; 2. 投资学的主要内容2.1 金融市场与投资环境2.1.1 金融资产2.1.2 债券市场的意义2.1.3 金融市场与经济2.1.4 投资过程2.1.5 竞争性的市场2.1.6 市场参与者2.1.7 主要的市场债券市场外汇…

KCC@广州开源读书会广州开源建设讨论会

亲爱的开源读书会朋友们&#xff0c; 在下个周末我们将举办一场令人激动的线下读书会&#xff0c;探讨两本引人入胜的新书《只是为了好玩》和《开源之迷》。作为一个致力于推广开源精神和技术创新的社区&#xff0c;这次我们还邀请了圈内大咖前来参与&#xff0c;会给大家提供一…

概念解析 | 隐式神经表示:揭开神经网络黑盒的奥秘

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:隐式神经表示(Implicit Neural Representations) 隐式神经表示:揭开神经网络黑盒的奥秘 近年来,神经网络在各种任务上取得了惊人的进步,但其内部表示方式依然难以解读,被称为“…

交互消息式IMessage扩展开发记录

IMessage扩展简介 iOS10新加入的基于iMessage的应用扩展&#xff0c;可以丰富发送消息的内容。&#xff08;分享表情、图片、文字、视频、动态消息&#xff1b;一起完成任务或游戏。&#xff09; 简单的将发送的数据内型分为三种&#xff1a; 1.贴纸Stickers&#xff1b; 2.交…

arcgis pro3.0-3.0.1-3.0.2安装教程大全及安装包下载

一. 产品介绍&#xff1a; ArcGIS Pro 这一功能强大的单桌面 GIS 应用程序是一款功能丰富的软件&#xff0c;采用 ArcGIS Pro 用户社区提供的增强功能和创意进行开发。 ArcGIS Pro 支持 2D、3D 和 4D 模式下的数据可视化、高级分析和权威数据维护。 支持通过 Web GIS 在一系列 …