您的当前位置:首页正文

乳房癌_陈徐郑_

来源:独旅网
高效方便的乳房癌诊断

陈仁飞 徐知启 郑宝华 指导教员:数模组

(海军航空工程学院,烟台,264001)

摘要:本文是分类题目。首先,对待判样本分类时,建立了马氏距离模型、伪回归分析模型、Fisher判别模型以及SVM的分类模型,对各模型误判率进行了比较,其中SVM的分类模型最好,准确率达到100%,69个待判样本中有19个恶性,其余为良性。其次,在进行特征提取时,以Fisher判别法与SVM的分类法分别为基础,采用层层分析的方法,找出影响分类最主要的几个因素,误判率分别为0.058与0.038,提取非常成功。最后对模型进行了评价,并提出了改进方向。

关键字:马氏距离;伪回归分析;Fisher判别法;SVM;特征提取;

1

一、问题重述

乳房肿瘤通过穿刺采样进行分析可以确定其为良性的或为恶性的。医学研究发现乳房肿瘤病灶组织的细胞核显微图像的 10个量化特征:细胞核直径,质地,周长,面积,光滑度,紧密度,凹陷度,凹陷点数,对称度,断裂度与该肿瘤的性质有密切的关系。

我们需要解决两个问题: 1、根据已获得的实验数据建立起一种诊断乳房肿瘤是良性还是恶性的方法。数据来自已经确诊的 500 个病例,每个病例的一组数据包括采样组织中各细胞核的这 10 个特征量的平均值 , 标准差和“最坏值”共 30 个数据。并用该方法来诊断另外 69 名已做穿刺采样分析的患者。

2、若为节省费用,还想发展一种只用此 30 个特征数据中的部分特征来区分乳房肿瘤是良性还是恶性的方法,这就需要找到一个特征数少而区分又很好的方法。

二、问题假设

1、所给病例的诊断结果都是正确的;

2、患者进行采样分析所得的数据是可靠的; 3、所给的量化特征能充分的反映病症的特性; 4、不考虑所给数据的单位;

三、符号说明

Gi: 第i类总体;(i=1,2)

Ui: 第i类总体的观测指标平均值向量; d(t,Ui): 待判病例t到第i个总体的距离; xi: 第i个特征自变量; ep: 误判率; ∑: 协方差阵;

t(ji): 第i类总体中第j个病例的特征向量;

ti: 第i类总体的所有病例的平均特征向量; Rk: k维的空间;

n: 样本中良性诊断的个数;

2

m: 样本中恶性诊断的个数; I: 总的特征数;

t(i) : t向量中的第i个元素;

四、问题分析

由于该病的性质与细胞的10个量化特征密切相关,所以关于这10个量化特征的30 个数据就可以作为该病的观测指标。当要将某个病例诊断为良性一类或者为恶性一类时,就要将这个病例的观测指标与已经分好类的病例们的观测指标进行比较,再按照相似程度大小将该病例分入特定一类。可以有下面几个方法来判定:

(1) 距离判别法,对于新给定的病例,要判断它属于哪一类,一个最直观的办法就是计算它与已知两类别之间的距离,如果它与其中的某一类距离最近,那么就可判定它属于该类。用数学语言描述为:已有关于r类的知识,把每一类看作一个总体Gi,由于观测指标为30个,可设每个总体的病例都是30维向量的点。第i类总体的观测指标平均值向量为Ui,现在有一待判病例t,要判断它属于哪一个总体,就要计算t到各总体之间的距离d(t,Ui),当d(t,Ui)≤d(t,Uj)时

(j=1,2,L,r,j≠i),就判定t属于Gi。这里选择马氏距离来判别,马氏距离既排除了各指标之间相关性的干扰,而且还不受各指标量纲的影响。

(2)伪回归判别法,将良性结果设为常数A,恶性结果设为常数B,这样就可以建立因变量y与自变量x1,x2,L,xI之间的多元线性回归模型,通过所给已经确诊病例的数据,可以求出回归系数。这样就可以求出第j个待判病例的因变量yj,按照使误判率最低在常数A和B之间选择一个常数C,通过yj与C的比较来确定分类。

(3)Fisher判别法,多变量的判别分析有多个指标,它们对判别样本属于哪一类一般都有影响,但总会有大小的差异。因此按主要差异来进行判别肯定会有比较好的效果。由于指标之间有一定的相关性,因而主要差异经常是指标的某个线性组合,在此方向上,样本点分得最开,因而也最容易区分。Fisher方法将所有的样本点向一条直线投影,这条直线是一条特殊的直线,在这条直线上,上述样本点的投影最分散、最清楚地显示分类情况。

(4)支持向量机分类法,支持向量机是目前新兴的一种分类方法,遵循结构风险最小化原理,使实际输出与理想输出之间的偏差尽可能少,而不是遵循传统的经验风险最小化原理。该方法可以转化为二次规划求解。

当分类结束后就需要对分类方法进行评价与比较,定义误判率为对500个检验样本的错分样本数与样本总数之比,误判率越大,效果越差。

3

五、模型建立与求解

5.1 马氏距离模型

某待判病例t到总体Gi的马氏距离定义为d2(t,Gi)=(t−Ui)'∑−1(t−Ui), 其中Ui为第i类总体的均值向量,∑为协方差阵。

设ti(1)(i=1,2,L,n)和ti(2)(i=1,2,L,m)分别是总体G1和G2的里面的病例,可以令: t

n

(1)

1n(1)1m(2)(2)

=∑ti,t=∑ti ni=1mi=1−t)(t

(1)

(1)

i

S1=∑(t

i=1

(1)i

−t)',S2=∑(ti(2)−t(2))(ti(2)−t(2))'

(1)

i=1

m

则∑=

判别规则为

1

(S1+S2)

n+m−2

当d(t,G1)≤d(t,G2)时,t∈G1 当d(t,G1)>d(t,G2)时,t∈G2

为了判别的方便,针对本题求解两个马氏距离的平方之差:

d2(t,G1)−d2(t,G2)

=(t−U1)'∑−1(t−U1)−(t−U2)'∑−1(t−U2) ⎛(U+U2)⎞−1

=−2×⎜t−1⎟∑(U1−U2)

2⎝⎠=−2×Y(t)

判别规则修改为

当Y(t)≥0时,t∈G1 当Y(t)<0时,t∈G2

对69个待判病例用matlab7.0编程求解得:

恶性(16) 良性(53)

2 4 10 1 3 5 6 7 8 9 11 12 13 17 18 14 15 16 19 20 21 23 24 25 22 34 36 26 27 28 29 30 31 32 33 35 42 63 64 37 38 39 40 41 43 44 45 46 65 66 67 47 48 49 50 51 52 53 54 55 68 56 57 58 59 60 61 62 69

4

用最小距离规则判别是会产生误判的,特别是当两总体G1与G2十分接近时,无论用什么方法,误判概率都很大,这里不讨论用马氏距离来判别时出现的误判率。

5.2 伪回归分析模型

对已诊断的病例,良性结果设为-1000,恶性结果设为1000,建立多元线性回归模型如下:

y=β0+β1x1+L+βIxI

判别标准为:

y(t)<0 t∈ 良性 y(t)>0 t∈ 恶性 y(t)=0 t 待判

y(t)是待判样本t的因变量,Y为临界判别点,用matlab7.0求解:

β=(5705.4,434.98,-24.049,-45.464,-0.83714,-2779.1,9414.3,-3455.2,

-2074.3,95.522,-4739.2,-843.77,-7.6392,70.523,0.8094,-31460,1663,8349.9,-31533,-1442.4,8899.1,-387.41,-4.1319,-1.2752,2.2802,-703.21,-542.92,-689.66,-476.58,-1436.3,-7347.8);其中R2=0.7785 ,F=54.9512,

P=0,可知该模型成立。

错分总数为44个,ep=0.0880,效果比较理想。对69个待判病例进行判定,结果如下: 恶性(16) 良性(53)

2 4 10 1 3 5 6 7 8 9 11 12 13 17 18 14 15 16 19 20 21 23 24 25 22 34 36 26 27 28 29 30 31 32 33 35 42 63 64 37 38 39 40 41 43 44 45 46 65 66 67 47 48 49 50 51 52 53 54 55 68 56 57 58 59 60 61 62 69

5.3 Fisher判别模型

在前面已经分析过了,Fisher方法就是将所有的样本点向一条直线投影,在此方向上,样本点分得最开,从而可以很好的判别。

本题分为两类,良性类G1有n个病例,恶性类G2有m个病例。由于有I个观测指标,所以每个病例可以看成是I维空间的点。

令a为RI中的任一方向,则RI中病例点t在这条直线上投影为u(t)=a't,则各组数据的投影为:

111

G1:a't1,a't2,L,a'tn

5

22

G2:a't12,a't2,L,a'tm

现在讨论这些投影点的情况,共有两种。第一种,类与类之间方差很大而各

类内部方差很小;第二种情况正好相反,类与类之间方差很小而各类内部方差很大。显然,为了使投影点的类与类尽可能分开,就应该符合第一种情况。可以用类间方差除以类内方差的商来表征上述两种特征,当商很大时,很容易区分,反之,则难分。

将Gi中数据投影均值记为a't这两组的总均值记为a't,有

(a't(1)+a't(2))

, a't=

2

(i)

,则a't

(1)

1n1m(1)(2)

=∑a'ti,a't=∑a'ti(2),ni=1mi=1

因此,这两组数据的组类方差平方和为:

sse=∑(a't

i=1

n

(1)

i

−a't)+∑(a'ti(1)−a't(2))

(1)

m

i=1

这两组数据的组间方差平方和为:

ssg=n×(a't(1)−a't)+m×(a't(2)−a't)

要使尽可能区分,就要满足:

ssgmax

sse

当求出a后,此方向就是投影方向,对该方向进行显著性检验,若可以分类,再求判别函数分界点。可取两类样本点的样本均值投影连线的中点或某一定比分点作为分界点Y。

判别标准为:

y(t)>Y t∈ 良性 y(t)y(t)是待判样本t在该直线上的投影,用matlab7.0求解:

a=(-0.3008,0.0562,-0.0278,0.0038,1.692,0.3932,1.2176

1.8353,0.8955,0.5059,1.4667,-0.0029,-0.1714,0,1.1979,-0.1465 -1.446,0.7329,0.9219,0.9023,0.7264,0.0065,0.005,-0.0045 2.671,-0.2362,0.7649,2.5237,2.7502,0.6601)

取分界点Y为7.78,错分总数为9个,ep=0.018,效果非常理想,对69个待判病例进行判定,结果如下: 恶性(16) 良性(53)

2 4 10 1 3 5 6 7 8 9 11 12

6

13 17 18 14 15 16 19 20 21 23 24 25 22 34 36 26 27 28 29 30 31 32 33 35 42 63 64 37 38 39 40 41 43 44 45 46 65 66 67 47 48 49 50 51 52 53 54 55 68 56 57 58 59 60 61 62 69

5.4 SVM的分类模型

由分析知道,支持向量机是目前新兴的一种分类方法,遵循结构风险最小化原理,使实际输出与理想输出之间的偏差尽可能少。

首先,对两类线性可分的情况而言,就是期望找到最优超平面,从而使不同类的样本能正确分开,而且该超平面可以使分类间隔最大。不管通过最大间隔法还是平分最近点法,都可以得到同一个分类超平面f(t)=wT⋅t+b,其中:

w=(a1,a2,L,aI)T,ai是相对样本第i个特征的线性待定系数,b是一个待定常数,将该分类超平面展开为:f(t)=a1t(1)+a2t(2)+L+aIt(I)+b,要使该平面可以将两类不同样本点分开,必须满足下面条件:

f(t(1))=a1ti(1)(1)+a2ti(1)(2)+L+aIti(1)(I)+b≥f1 i=1,2,L,n

f(t(1))=a1t(j1)(1)+a2t(j1)(2)+L+aIt(j1)(I)+b≤f2 j=1,2,L,m

f1、f2为满足f1>f2的任意常数,因为ai、b都是待定数,所以f1与f2的数值不影响分类结果。为了求解的方便,令f1为1,f2为−1。除了要使样本点分开,还需要使两类的间隔最大。超平面f(t(1))与超平面f(t(2))的距离为:

22

=D=

222wa1+a2+L+a30

建立凸二次规划模型如下:

maxΦ=

2

w

wT⋅ti(1)+b≥1 i=1,2,L,n wT⋅t(j2)+b≤−1 j=1,2,L,m

其次,对两类线性不可分的情况,任何划分超平面都会有划错,这时候希望

2

两个平面的间距尽可能大,还希望划错程度尽可能小,我们对每个样本都引

w入一个松弛项ξk≥0,约束条件变为:

a1ti(1)(1)+a2ti(1)(2)+L+aIti(1)(I)+b+ξi≥1

a1t(j2)(1)+a2t(j2)(2)+L+aIt(j2)(I)+b−ξi+j≤−1

现在目标函数要求两个平面的间距最大,同时划错程度最小,我们可以建立如下的模型:

n+mw

+c∑ξk minΦ=2k=1

wT⋅ti(1)+b+ξi≥1 i=1,2,L,n

7

wT⋅t(j2)+b−ξn+j≤−1 j=1,2,L,m

用上面的模型对问题进行求解,将线性可分模型化为标准式:

w minΦ=2

a1ti(1)(1)+a2ti(1)(2)+L+aIti(1)(I)+b≥1 i=1,2,L,n

a1t(j2)(1)+a2t(j2)(2)+L+aIt(j2)(I)+b≤−1 j=1,2,L,m

用matlab7.0求解知道该乳房癌问题为线性可分,结果为:

wT=(132.33,-3.3442,-2.9391,-1.0135,-856.1,1357,-606.35,-714.94 293.24,-1210,-90.263,-9.9599,19.972,-1.002,2032.8,-1419.7,1589.1 -6861.5,1610,11959,-29.527,-0.38737,-2.3191,0.16027,6.8393,67.658

,b=-29.111 -126.4,-22.182,-400.73,-1041.5)

对69个待判病例进行判定,结果如下: 恶性(19) 良性(50)

2 4 10 1 3 5 6 7 8 9 11 12 13 15 17 1 16 19 20 21 23 24 25 26 18 22 29 27 2 30 31 32 33 35 37 38 34 36 37 39 40 41 43 44 45 46 47 48 42 63 64 49 50 51 52 53 54 55 56 57 65 66 67 58 59 60 61 62 69 68

由于是线性可分的,也就是ep=0,所以从理论上讲,这个结果相对前面几个模型的分类要准确。

5.5 特征量提取

由前面分析已知,多变量的判别分析有多个指标,它们对判别样本属于哪一类一般都有影响,但总会有大小的差异。

5.5.1 基于Fisher判别法的特征提取

Fisher判别法就是按主要差异来进行判别的,所以,可以根据Fisher模型所求的解来提取主要特征量。

首先,定义差异量R=a't(1)−a't(2),表示属于不同类的病例点在投影直线上的平均距离,而正是这个距离决定了不同类的病例点的差异;接着,可以求出第i个特征在该投影直线上的差异值Ri=a(i)t(1)(i)−a(i)t(2)(i),正是这些值决定了R;最后,从Ri中选择对R影响比较大的几个特征,就是这几个特征最终形成了不同类的病例点的差异,可以用这些特征来判别。

根据5.3的求解可以得到:a't(1)=9.2727,a't(2)=6.6701,则R=2.6026,

Ri=(-1.5538,0.21746,-1.0082,1.9047,0.0189,0.026037,0.13696 0.11293,0.016877,0.00011521,0.47134,0,-0.3915,0,-0.0002152 -0.0015964,-0.022042,0.0037821,0,0.00041821,5.5351,0.03906 0.26619,-3.8252,0.058374,-0.045658,0.21377,0.27058,0.14975

8

0.008437),可以很明显的发现第1、3、4、21、24个特征对R影响最显著,就提取这五个特征作为判别特征。

修改5.3中的Fisher模型,将特征值只取五个,求解得:

a=(-23877,1677,83,17015,93)

取分界点Y为70400,错分总数为29个,ep=0.058,效果不错,说明提取特征比较成功。对69个待判病例进行判定,结果如下: 恶性(17) 良性(51)

2 4 10 1 3 5 6 7 8 9 11 12 13 15 17 14 16 19 20 21 23 24 25 26 18 22 34 27 28 30 31 32 33 35 37 38 36 42 63 39 40 41 43 44 45 46 47 48 64 65 66 49 50 51 52 53 54 55 56 57 67 68 58 59 60 61 62 69

5.5.2 基于SVM的特征提取 与上面特征提取的分析一样,主要是从30个特征中找出几个最重要的因数,而提取的标准就是选择使超平面间距分开尽可能大的特征。

从计算中得到第1、3、4、21、23、24个特征对间距影响最大(过程略),也就是细胞核直径 , 周长,面积的平均值和最坏值。先用两类线性可分的二次规划模型求解,发现得不到可行解,也就是通过这几个特征使这两类线性不可分。显然是由于特征不够引起的,符合实际情况。运用下面模型进行求解:

n+mw

minΦ=+c∑ξk

2k=1

wT⋅ti(1)+b+ξi≥1 i=1,2,L,n

wT⋅t(j2)+b−ξn+j≤−1 j=1,2,L,m

wT=(2.0979,-0.3006,0.0100,0.2683,-0.0182,-0.0157),b=2.4691

取0为分界点对500个样本检验,错判19个,ep=0.038,特征提取非常成功,对69个待判病例做下面判断:

f(t)=a1t(1)+a2t(2)+L+aIt(I)+b

f(t)≥0 t∈良性 f(t)<0 t∈恶性

恶性(18)

2 4 10 13 17 18 22 29 34 36 37 42 63 64 65 66 67 68

良性(52)

1 3 5 6 7 8 9 11 12 14 16 19 20 21 23 24 25 26 27 28 29 30 31 32 33 35 38 39 40 41 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 69

9

六、模型评价与改进

优点:

1、本文建立了多个模型,通过比较可以得出最优的判别方法,其中新兴的支持向量机的分类方法从理论上说误判率为零,所以分类结果应该很理想;

2、特征提取时,采用层层分析的方法,分别从Fisher判别法与SVM法出发找出最终影响判别的几个主要特征,效果比较好,准确率达到96.2%。

缺点:

1、题目数据没有给出各量化特征的单位,但是单位变化会导致分类结果的大不同,本题模型没有考虑单位的归一化。

2、模型缺乏相关背景知识,不能很好的符合实际。

3、所建有几个模型或多或少存在误判,没有采取进一步的措施。

改进方向:掌握详细的背景知识,对各量化特征的单位进行归一化处理,然后再建立相应模型,对误判进行深一步的研究。

参考文献:

[1] 尹泽明等.精通Matlab[M].北京:清华大学出版社,2004年2月

[2] 姜启源,谢金星,叶俊.数学模型(第二版)[M].北京:高等教育出版社,2003年8月

[3] 许波.Matlab工程数学应用[M].北京:清华大学出版社,2003

[4] 任若恩,王惠文.多元统计数据分析[M].北京:国防工业出版社,1999

附录:

1.马氏距离求解的程序: clc;clear;

load cancerdata.txt m=cancerdata; m(:,1)=[];

lei1=find(m(:,1)==-2); lei2=find(m(:,1)==-1); lei3=find(m(:,1)==-1000); m(:,1)=[]; a3=m(lei1,:); a2=m(lei2,:); a1=m(lei3,:); t1(1:30,:)=0; for j=1:30 for i=1:195

t1(j)=t1(j)+a1(i,j)/195; end

10

end

t2(1:30,:)=0; for j=1:30 for i=1:305

t2(j)=t2(j)+a2(i,j)/305; end end

for i=1:195

b1(i,:)=a1(i,:)-t1'; end

for i=1:305

b2(i,:)=a2(i,:)-t2'; end

A1(1:30,1:30)=0; for i=1:195

A1(1:30,1:30)= A1(1:30,1:30)+ b1(i,1:30)'*b1(i,1:30); end

A2(1:30,1:30)=0; for i=1:305

A2(1:30,1:30)= A2(1:30,1:30)+ b2(i,1:30)'* b2(i,1:30); end

E=1/498*( A1+ A2); s1=(t1+t2)/2; s2=t1-t2; for i=1:69

W(i)=(a3(i,1:30)'-s1)'*inv(E)*s2; End

2.伪回归分析求解的程序: load cancerdata.txt can=cancerdata;can(:,1)=[];

lei1=find(can(:,1)==-2);lei2=find(can(:,1)==1000);lei3=find(can(:,1)==-1000); can(:,1)=[];sj1=can(lei1,:);sj2=can(lei2,:);sj3=can(lei3,:); for i=1:500 for j=1:30

x0(i,j)=cancerdata(i,j+2); end end

for i=1:500

y0(i,1)=cancerdata(i,2); end

x=[ones(500,1),x0];[b,bint,r,rint,stats]=regress(y0,x); b,bint,stats,rcoplot(r,rint); for i=1:500

11

Y(i)=b'*x(i,:)'; end m=100; for i=1:500 Y(i)=b'*x(i,:)'; end

c1(1,:)=Y(lei2);c2(1,:)=Y(lei3); h=0;

for i=1:305

if c1(i)for i=1:105 if Y(i)>m l=l+1; end end h;l;

for i=1:69 for j=1:30

x1(i,j)=cancerdata(i+500,j+2); end end

x2=[ones(69,1),x1]; for i=1:69

Y1(i)=b'*x2(i,:)'; end

for i=1:69

if Y1(i)<0 Y1(i)=1;, elseif Y1(i)<100000 Y1(i)=0;, else Y1(i)=-1; end end

for i=1:30 xh=0; for j=1:305 xh=xh+sj2(j,i); end

xp1(i)=xh/305; end

Y2=b'*[1,xp1]';

12

for i=1:30 xh=0; for j=1:195 xh=xh+sj3(j,i); end

xp2(i)=xh/195; end

Y1,(h+l)/500

3.Fisher判别法求解的程序: function h=fun1(x); load cancerdata.txt m=cancerdata; j=1;k=1; for i=1:500 if m(i,2)==-1000;

a1(j,:)=m(i,3:32);j=j+1; end if m(i,2)==1000;

a2(k,:)=m(i,3:32);k=k+1; end end

t1(1:30,:)=0; for j=1:30 for i=1:195

t1(j)=t1(j)+a1(i,j)/195; end end

t2(1:30,:)=0; for j=1:30 for i=1:305

t2(j)=t2(j)+a2(i,j)/305; end end

for i=1:30

t3(i,:)=(t1(i,:)+t2(i,:))/2; end

for i=1:195

s1(i,:)=a1(i,:)-t1'; end

for i=1:305

s2(i,:)=a2(i,:)-t2'; end

e=sum((s1(1:195,:)*x).^2)+sum((s2(1:305,:)*x).^2); g=195*(t1'*x-t3'*x)^2+305*(t2'*x-t3'*x)^2;

13

h=e/g; clc;clear;

options=optimset('largescale','off');

[x,y]=fmincon('fun1',rand(30,1),[],[],[],[],-inf,[],[], options)

4.SVM分类法求解的程序: clc;clear;

load cancerdata.txt m=cancerdata; j=1;k=1; for i=1:500 if m(i,2)==-1000;

a1(j,:)=m(i,3:32);j=j+1; end if m(i,2)==1000;

a2(k,:)=m(i,3:32);k=k+1; end end

a3=m(501:569,3:32); h=zeros(31);

h(1:30,1:30)=eye(30); a=-ones(500,31);

a(1:305,1:30)=-a2(:,:); a(306:500,1:30)=a1(:,:); a(306:500,31)=1; b=-ones(500,1);

[x,value]=quadprog(h,zeros(31,1),a,b,[],[],-inf,[],zeros(31,1))

5.特征提取的两个求解程序: function h=fun2 (x); load cancerdata.txt m=cancerdata; j=1;k=1; for i=1:500 if m(i,2)==-1000;

a1(j,:)=m(i,3:32);j=j+1; end if m(i,2)==1000;

a2(k,:)=m(i,3:32);k=k+1; end end l=1;

for i=501:569

a3(l,:)=m(i,3:32);l=l+1;

14

end

a11(:,1)=a1(:,1);a11(:,2)=a1(:,3);a11(:,3)=a1(:,4); a11(:,4)=a1(:,21);a11(:,5)=a1(:,24);

a12(:,1)=a2(:,1);a12(:,2)=a2(:,3);a12(:,3)=a2(:,4); a12(:,4)=a2(:,21);a12(:,5)=a2(:,24);

a13(:,1)=a3(:,1);a13(:,2)=a3(:,3);a13(:,3)=a3(:,4); a13(:,4)=a3(:,21);a13(:,5)=a3(:,24); t1(1:30,:)=0; for j=1:30 for i=1:195

t1(j)=t1(j)+a1(i,j)/195; end end

t11(1)=t1(1);t11(2)=t1(3);t11(3)=t1(4); t11(4)=t1(21);t11(5)=t1(24); t11=t11'; t2(1:30,:)=0; for j=1:30 for i=1:305

t2(j)=t2(j)+a2(i,j)/305; end end

t12(1)=t2(1);t12(2)=t2(3);t12(3)=t2(4); t12(4)=t2(21);t12(5)=t2(24); t12=t12'; for i=1:5

t13(i,:)=(t11(i,:)+t12(i,:))/2; end

for i=1:195

s1(i,:)=a11(i,:)-t11'; end

for i=1:305

s2(i,:)=a12(i,:)-t12'; end

e=sum((s1(1:195,:)*x).^2)+sum((s2(1:305,:)*x).^2); g=195*(t11'*x-t13'*x)^2+305*(t12'*x-t13'*x)^2; h=e/g; clc;clear;

options=optimset('largescale','off');

[x,y]=fmincon('fun2',rand(30,1),[],[],[],[],-inf,[],[], options)

clc;clear;

load cancerdata.txt

15

m=cancerdata; j=1;k=1; for i=1:500 if m(i,2)==-1000;

a1(j,:)=m(i,3:32);j=j+1; end if m(i,2)==1000;

a2(k,:)=m(i,3:32);k=k+1; end end

a3=m(501:569,3:32);

a11(:,1)=a1(:,1);a11(:,2)=a1(:,3);a11(:,3)=a1(:,4); a11(:,4)=a1(:,21);a11(:,5)=a1(:,23);a11(:,6)=a1(:,24); a21(:,1)=a2(:,1);a21(:,2)=a2(:,3);a21(:,3)=a2(:,4); a21(:,4)=a2(:,21);a21(:,5)=a2(:,23);a21(:,6)=a2(:,24); a31(:,1)=a3(:,1);a31(:,2)=a3(:,3);a31(:,3)=a3(:,4); a31(:,4)=a3(:,21);a31(:,5)=a3(:,23);a31(:,6)=a3(:,24); h=zeros(507); h(1:6,1:6)=eye(6); f=zeros(507,1); f(8:507,1)=1; a=zeros(500,507); a(1:305,1:6)=-a21(:,:); a(306:500,1:6)=a11(:,:); a(306:500,7)=1; a(1:305,7)=-1;

a(1:305,8:312)=-eye(305); a(306:500,313:507)=-eye(195); b=-ones(500,1);

[x,value]=quadprog(h,f,a,b,[],[],[-inf*ones(7,1);zeros(500,1)],[],zeros(507,1))

16

因篇幅问题不能全部显示,请点此查看更多更全内容