数学建模课程论文
题目:胃癌的鉴别问题
1
胃癌的鉴别
摘要
本文研究的是一个判别问题,关键是给出判别胃癌、萎缩性胃炎和非胃病的标准。由于胃癌患者易误诊为萎缩性胃炎患者以及非胃病患者。进行胃癌的鉴别主要是通过化验4项生化指标:血清铜蓝蛋白(X1)、蓝色反应(X2)、尿吲哚乙酸(X3)、中性硫化物(X4)。本来从胃癌患者、萎缩性胃炎患者以及非胃病患者中一共抽取了12人进行指标化验,但是由于医护人员的疏忽,将化验结果搞混了。现有以前对胃癌患者、萎缩性胃炎患者以及非胃病患者化验的结果各一例,依次为(228,134,0.20,0.11)、(150,117,0.07,0.06)、(135,108,0.02,0.12),混淆的化验结果见附件
医学上一般根据临床的经验认为,患同一种病的人所表现出来的特征往往是相似的。
现在需要解决的问题如下:
问题一:建立一种判别准则,把12例被混淆的化验结果区分开来。
问题二:根据判别准则,对题目给出的三个病人的化验指标如下:(210,142,0.10,0.08)、(180,120,0.08,0.21)、(150,130,0.05,0.14),区分他们各属于哪一类人群。
问题三:为了尽量不想让胃癌诊断为萎缩性胃炎或无胃病,也不想让萎缩性胃炎诊断为无胃病,是否应对现有的判定准则作出调整?试给出调整方案。
针对问题一,应用MATLAB编程,建立并且训练了两个神经网络,成功地把12例被混淆的数据区分出来,画出了他们的散点图,并给出了判别准则。 针对问题二,根据给出的判别准则,容易判断出这3例数据分别显示这三个病人得了萎缩性胃炎、胃癌和非胃病。
针对问题三,利用求解超定方程组的最小二乘解,给出了两个判别函数,用于准确的区分三类人群。
关键字:神经网络 区分鉴别 判别准则
2
一、问题的重述和分析
胃癌患者易误诊为萎缩性胃炎患者以及非胃病患者。进行胃癌的鉴别主要是通过化验4项生化指标:血清铜蓝蛋白(X1)、蓝色反应(X2)、尿吲哚乙酸(X3)、中性硫化物(X4)。本来从胃癌患者、萎缩性胃炎患者以及非胃病患者中一共抽取了12人进行指标化验,但是由于医护人员的疏忽,将化验结果搞混了。现有以前对胃癌患者、萎缩性胃炎患者以及非胃病患者化验的结果各一例,依次为(228,134,0.20,0.11)、(150,117,0.07,0.06)、(135,108,0.02,0.12),混淆的化验结果见附件
医学上一般根据临床的经验认为,患同一种病的人所表现出来的特征往往是相似的。
1.试建立一种判别准则,把上述混淆的结果区分开来。
2.再给你三个病人的化验指标如下:(210,142,0.10,0.08)、(180,120,0.08,0.21)、(150,130,0.05,0.14),试区分他们各属于哪一类人群。
3.如果尽量不想让胃癌诊断为萎缩性胃炎或无胃病,也不想让萎缩性胃炎诊断为无胃病,是否应对现有的判定准则作出调整?试给出调整方案。
这是一个典型的分类问题,而分类的关键就是给出分类的判别标准,一旦给出了判别准则,问题一和二很快得到解答。考虑到问题本身数据被混淆这一特殊性,采用MATLAB编程训练了一个合适的神经网络,把混淆的数据区分出去,进而给出判别准则,然后充分利用分类数据和原始数据进行精确的分类,最后得到比较满意的分类方案。
二、基本假设和说明
1、各个生化指标互不影响,同时不考虑测量误差。 2、生化指标的数值在允许范围内,对诊断结果影响不大。
三、符号说明
1 标记胃癌
2 标记萎缩性胃炎 3 标记非胃病 X1 血清铜蓝蛋白 X2 蓝色反应 X3 尿吲哚乙酸 X4 中性硫化物
3
四、模型的建立与求解
问题一
利用3例正确的化验结果,构造并训练一个合适的神经网络,对混淆的12例数据进行分类,画出分类散点图,柱状图,并对分类好的数据作进一步的分析和判断。
分类结果如下:
4
12例被混淆的数据
诊断 NO. X1 X2 X3 X4
胃癌
1 245 134 0.1 0.4
非胃病
2 200 167 0.12 0.27
非胃病
3 170 150 0.07 0.08
非胃病
4 100 167 0.2 0.14
胃癌
5 255 125 0.07 0.14
萎缩性胃炎
6 130 100 0.06 0.12
诊断 NO. X1 X2 X3 X4
非胃病
7 120 133 0.1 0.26
胃癌
8 160 100 0.05 0.1
萎缩性胃炎
9 185 115 0.05 0.19
胃癌
10 170 125 0.06 0.04
非胃病
11 165 142 0.05 0.03
非胃病
12 100 117 0.07 0.02
首先区分胃癌与非胃癌
胃癌 非胃胃癌 非胃非胃非胃非胃胃癌 胃癌 病 病 病 病 病 1 0 0 0 1 0 0 1 1 其次在非胃癌中区分萎缩性胃炎与非胃病 萎缩性萎缩性萎缩性非胃病 萎缩性非胃病 胃炎 胃炎 胃炎 胃炎
5
非胃非胃非胃病 病 病 0 0 0 萎缩性萎缩性胃炎 胃炎 1 1 1 0 最后统一分成三类标记 胃癌 非胃非胃非胃胃癌 萎缩病 病 病 性胃炎 1 3 3 3 1 2 1 0 1 1 非胃胃癌 萎缩胃癌 非胃非胃病 性胃病 病 炎 3 1 1 2 3 3 胃癌与非胃病生化指标柱状图300250200150100500胃病胃病胃病胃病胃病胃病胃病非胃胃胃非非非非非胃非系列1系列2系列3系列4非胃病癌癌癌癌
胃癌、萎缩性胃炎、非胃病指标柱状图300250200150100500病病病病病非胃癌癌癌炎癌非胃非胃非胃非胃炎缩性萎系列1系列2系列3系列4萎缩性非胃胃胃胃胃胃胃病
从网络给出的判断结果以及柱状图中生化指标数值的比较,发现X1、X2两个指标主要决定化验结果,而胃癌、萎缩性胃病和胃癌的X3、X4指标取值都变化不大,所以对诊断结果影响不大,由此粗略的给出判断准则: 当X2X160 时,诊断结果为胃癌。
6
当60X2X130 时,诊断结果为胃索性胃炎。 当30X2X110 时,诊断结果为非胃病。
问题二
由问题一给出的判断准则,可以对三个新病人的化验指标进行诊断,结果如下: (210,142,0.10,0.08)诊断为萎缩性胃炎 (180,120,0.08,0.21)诊断为胃癌 (150,130,0.05,0.14)诊断为非胃病
问题三
根据问题一给出的判断准则,只能比较粗糙的区分出三类人群,这个准则对于指标X1、X2相差很大的或者像差很小的时候才比较准确,但是对于接近临界值的情况,就容易把胃癌诊断为萎缩性甚至非胃病,也可能把萎缩性诊断为非胃病,为了更准确的给出判别准则,设法建立两个判别系统,第一个判别系统是对胃癌与非胃癌进行区分,第二个判别系统是对萎缩性胃癌与非胃病进行区分。 判别系统一:设直线方程L1为
0 wxwxw11223对于平面上任意一点P(x1,x2),如果该点在直线上,w1x1w2x2w30;如果P(x1,x2)不在直线上,w1x1w2x2w30。由于胃癌与非胃病都不在所求直线上,故利用分类好的数据代入方程左端应该回事的表达式的值大于零或者小
于零两种不同的结果。
为了建立判别系统,引进判别函数g(P),当P(x1,x2)属于胃癌类时,有g(P)0 否则 g(P)1
为了对判别系统引进学习机制,在学习过程中将两种不同的状态,以‘1’‘-1’表示。
当P(x1,x2)属于胃癌类时,g(P)1,否则 g(P)1。
取
g(P)wxwxw11223
于是有多给数据形成约束条件,这是关于判别函数中的单个待定系数w1w2w3的线性超定方程组:
7
240w1134w2w31255w1125w2w311601001w2w3w11851151www123228150w31ww12200w1167w2w311701501w1w2w31001671w1w2w31301001w2w3w1120133w31ww12170125w31ww12165w1142w2w31100w1117w2w311501171w1w2w3 135108w2w31w1接下来用MATLAB输入数据,并求出超定方程的最小二乘解
程序运行后,可以求得朝定方程的最小二乘解为: 所以直线方程为
判别函数为 g(P)0.0131x10.0194x20.0350 将15学习样本的所有数据一次代入判别函数g(P),可得 k 1 2 3 4 g(P) 0.6449 -0.5848 -0.6480 -1.8948 k 9 10 11 12 g(P) 0.2275 -0.1630 -0.5583 -0.9248 (注:最后3例数据是以前化验正确的)
同理建立判别系统二:
5 0.9505 13 0.6938 6 -0.2020 14 -0.5220 7 -0.9732 15 -0.2917 8 0.1910 w= 0.0131
1ww
2
= -0.0194 = 0.0350
3
引进判别函数h(P),当P(x1,x2)属于胃癌类时,有h(P)0 否则 h(P)1
8
为了对判别系统引进学习机制,在学习过程中将两种不同的状态,以‘1’‘-1’表示。
当P(x1,x2)属于萎缩性胃炎类时,h(P)1,否则 h(P)1。
取
h(P)wxwxw11223
于是有多给数据形成约束条件,这是关于判别函数中的单个待定系数w1w2w3的线性超定方程组:
200w1167w2w311701501w1w2w31001671w2w3w1130100w31ww12120w1133w2w31
170w1125w2w311651421w2w3w1100117w31ww12150w1117w2w31135w1108w2w31接下来用MATLAB输入数据,并求出超定方程的最小二乘解
程序运行后,可以求得朝定方程的最小二乘解为:
w= -0.0095
1ww
2
= 0.0265 = -1.7449
3
判别函数为 h(P)0.0095x10.0265x21.7449 k 2 3 4 6 g(P) 0.7800.6151.730-0.326 1 6 99 7 10 0.614-0.049 74 11 12 14 0.4500.405-0.066 6 94 15 0.1654
五、模型的检验与评价
利用判别函数一对胃癌与非胃癌进行检验
k
1 2 3 4 9
5 6 7 8 g(P) 0.6449 -0.5848 -0.6480 -1.8948 0.9505 -0.2020 -0.9732 0.1910 k 9 10 11 12 13 14 15 g(P) 0.2275 -0.1630 -0.5583 -0.9248 0.6938 -0.5220 -0.2917 结果完全正确 利用判别函数二对萎缩性胃炎与非胃病进行检验
k 2 3 4 6 g(P) 0.7800.6151.730-0.326 1 6 99 结果完全正确
7 10 0.614-0.049 74 11 12 14 0.4500.405-0.066 6 94 15 0.1654 模型的总体评价
基于合理的假设和多方面的数据分析,本文成功地把混淆数据进行了分类,并不断修改判别准则,最终给出了准确度较高判别准则。如果能获取更多的临床正确数据进行实地检验,相信判别准则会得到更高精度的。总的来说,整个数学模型还是令人满意的。
附录 源程序
clear all clc %data
P1=[ 228 150 135; 134 117 108; 0.20 0.07 0.02; 0.11 0.06 0.12;]; P2=[150 135; 117 108; 0.07 0.02; 0.06 0.12;];
T1=[1 0 0]; T2=[0 1];
net1 = newp(minmax(P1),1); net2 = newp(minmax(P1),1);
E = 1;
net1.adaptParam.passes = 3;
10
net2.adaptParam.passes = 3;
while(sse(E))
[net1,Y1,E] = adapt(net1,P1,T1); [net2,Y2,E] = adapt(net2,P2,T2); end
Q1=[245 200 170 100 255 130 120 160 185 170 165 100;
134 167 150 167 125 100 133 100 115 125 142 117;
0.1 0.12 0.07 0.2 0.07 0.06 0.1 0.05 0.05 0.06 0.05 0.07;
0.4 0.27 0.08 0.14 0.14 0.12 0.26 0.1 0.19 0.04 0.03 0.02; ];
Answer1=sim(net1,Q1)
Q2=zeros(4,1);j=1;
for i=1:1:size(Answer1,2) if(Answer1(i)<1) Q2(:,j)=Q1(:,i); j=j+1; end end
Answer2=sim(net2,Q2)
%3: 1 0 0 0 1 0 0 1 1 0 0 0
%30: 1 0 0 0 1 0 0 1 1 0 0 0
%300 1 0 0 0 1 0 0 1 1 0 0 0
Consequence=zeros(1,size(Answer1,2)); j=1;
for i=1:1:size(Answer1,2) if(Answer1(i)<1)
Consequence(i)=Answer2(j)+2; j=j+1; else
Consequence(i)=1; end
11
end
Consequence
ad1 =
245.0000 255.0000 160.0000 185.0000 134.0000 125.0000 100.0000 115.0000 0.1000 0.0700 0.0500 0.0500 0.4000 0.1400 0.1000 0.1900
ad2 =
130.0000 170.0000 100.0000 125.0000 0.0600 0.0600 0.1200 0.0400
ad3 =
200.0000 170.0000 100.0000 120.0000 165.0000 100.0000 167.0000 150.0000 167.0000 133.0000 142.0000 117.0000 0.1200 0.0700 0.2000 0.1000 0.0500 0.0700
0.2700 0.0800 0.1400 0.2600 0.0300 0.0200 clear clc
A=[245 134 1
255 125 1 160 100 1 185 115 1
200 167 1 100 167 1 170 150 1 120 133 1 165 142 1 100 117 1 130 100 1 170 125 1];
b=[1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 ]';
12
rank=rank(A) abc=A\\b
clear clc
A=[200 167 1
100 167 1 170 150 1 120 133 1 165 142 1 100 117 1 135 108 1
150 117 1 130 100 1 170 125 1];
b=[1 1 1 1 1 1 1 -1 -1 -1 ]'; rank=rank(A) abc=A\\b
13
因篇幅问题不能全部显示,请点此查看更多更全内容