这个例子展示了如何训练神经网络来检测癌症使用质谱数据的蛋白质谱。
血清蛋白质组模式诊断可用于区分有疾病和无疾病患者的样本。使用表面增强激光解吸电离(SELDI)蛋白质质谱法生成模式。该技术有可能改进癌症病理学的临床诊断测试。
目标是建立一个分类器,能够从质谱数据中区分癌症患者和对照患者。
本例中采用的方法是选择一组简化的测量值或“特征”,可用于使用分类器区分癌症患者和对照患者。这些特征是特定质量/电荷值下的离子强度水平。
本例中使用的数据,在文件中提供ovarian_dataset.mat
,来自FDA-NCI临床蛋白质组学项目数据库。有关此数据集的详细说明,请参见[1]和[2]。
创建数据文件卵巢癌qaqcDataSet.mat
按照中的步骤进行操作基于顺序和并行计算的光谱批处理(生物信息学工具箱). 新文件包含变量Y
,MZ
和grp
.
每一列中Y
表示病人的测量值。有216
列Y
代表216
患者,其中121
卵巢癌患者和95
是正常的病人。
在每一行Y
表示在特定的质量-电荷值下的离子强度级MZ
.有15000
mass-charge值MZ
每行Y
表示特定质量电荷值下患者的离子强度水平。
变量grp
保存这些样本中哪些代表癌症患者,哪些代表正常患者的索引信息。
该任务是一个典型的分类问题,其中特征的数量远大于观测值的数量,但单个特征可以实现正确的分类。因此,我们的目标是找到一个分类器,该分类器能够适当地学习如何对多个特征进行加权,同时生成一个不过度拟合的广义映射。
寻找重要特性的一个简单方法是假设每个M/Z值是独立的,并计算一个双向t检验。rankfeatures
返回最重要的M/Z值的索引,例如按测试统计数据的绝对值排列的100个索引。
加载卵巢癌qaqcDataSet.mat
并使用rankfeatures
(生物信息学工具箱)选择100个排名最高的测量值作为输入x
.
ind=等级特征(Y,grp,“标准”,“测试”,“NumberOfIndices”,100); x=Y(ind,:);
定义的目标t
以下两类:
t=双(strcmp(“癌症”grp));t = [t;1 - t];
上面列出的脚本和示例中的预处理步骤旨在演示一组具有代表性的可能的预处理和特征选择过程。使用不同的步骤或参数可以得到不同的、可能更好的结果。
[x, t] = ovarian_dataset;谁xt
Name Size Bytes Class Attributes t 2x216 3456 double x 100x216 172800 double
每一列中x
代表216名不同患者中的一名。
在每一行x
表示每个患者在100个特定的质量-电荷值之一的离子强度水平。
变量t
有两行216个值,每个值为[1;0],表示癌症患者,或[0;1]表示正常患者。
现在您已经确定了一些重要的特征,可以使用这些信息对癌症样本和正常样本进行分类。
由于神经网络是使用随机初始权重初始化的,因此每次运行示例时,训练网络后的结果都会略有不同。为了避免这种随机性,将随机种子设置为每次复制相同的结果。但是,对于您自己的应用程序,设置随机种子不是必需的。
setdemorandstream(672880951)
建立并训练了包含5个隐层神经元的1-隐层前馈神经网络。输入样本和目标样本被自动划分为训练集、验证集和测试集。训练集用于网络教学。只要网络在验证集上继续改进,训练就会继续进行。测试集提供了对网络准确性的独立度量。
输入和输出的大小为0,因为网络还没有配置为匹配输入和目标数据。当您训练网络时,会发生这种配置。
净=净(5);视图(净)
现在网络已经准备好接受培训。样本将自动划分为训练集、验证集和测试集。该训练集用于网络教学。只要网络继续改进验证集,培训就会继续进行。测试集提供了对网络精度的独立测量。
神经网络训练工具显示了被训练的网络和用来训练它的算法。它还显示训练期间的训练状态,并且停止训练的条件用绿色突出显示。
底部的按钮打开有用的图形,可以在训练期间和训练后打开。算法名称和绘图按钮旁边的链接打开了关于这些主题的文档。
[net,tr]=列车(net,x,t);
要查看网络在培训期间的性能改进情况,请单击培训工具中的“性能”按钮,或使用绘图仪
函数。
性能是用均方误差来衡量的,并以对数表示。随着网络的训练,性能迅速下降。
显示每个训练、验证和测试集的性能。
绘图执行(tr)
经过训练的神经网络现在可以用我们从主数据集中分割出来的测试样本进行测试。测试数据没有以任何方式用于训练,因此提供了一个“样本外”数据集来测试网络。这样就可以估算出在使用来自真实世界的数据进行测试时,网络的性能如何。
网络输出在0-1范围内。设定输出阈值,分别获得1和0表示癌症或正常患者。
testX=x(:,tr.testInd);testT=t(:,tr.testInd);testY=net(testX);testClasses=testY>0.5
testClasses =2 x32逻辑阵列0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1
衡量神经网络与数据吻合程度的一个指标是混淆图。
混淆矩阵显示正确分类和错误分类的百分比。正确分类是矩阵对角线上的绿色方块。红色方块表示错误分类。
如果网络是准确的,则红色方框中的百分比很小,表明错误分类很少。
如果网络不准确,那么你可以尝试更长时间的训练,或者训练一个包含更多隐藏神经元的网络。
plotconfusion (testT暴躁的)
以下是正确和错误分类的总体百分比。
[c cm] =混乱(testT,暴躁的);流('正确分类百分比:%f%%\n',100*(1-c));
分类正确率:90.625000%
流('分类不正确的百分比:%f%%\n',100*c);
分类错误百分比:9.375000%
衡量神经网络拟合数据的另一个指标是接收器工作特性图。该图显示了当输出阈值从0到1变化时,假阳性率和真阳性率的关系。
行越左越高,需要接受的误报越少,才能获得较高的真阳性率。最好的分类器有一条从左下角到左上角、右上角或接近该点的行。
1级为癌症患者,2级为正常患者。
plotroc(testT,testY)
这个例子演示了如何将神经网络用作癌症检测的分类器。为了提高分类器性能,还可以尝试使用主成分分析等技术来降低用于神经网络训练的数据的维数。
[1] T.P. Conrads等,“高分辨率血清蛋白质组学特征用于卵巢检测”,内分泌相关癌症,2004年11月,第163-178页。
[2] E.F.Petricoin等人,“利用血清中的蛋白质组模式识别卵巢癌”,《柳叶刀》,359(9306),2002年,第572-577页。