ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

癌の検出

この例では、ニューラル ネットワークを使用して、タンパク質プロファイルに関する質量分析データから癌を検出する方法を示します。

はじめに

血清プロテオミクス パターン診断を使用すると、疾患のある患者と疾患のない患者の標本を区別することができます。プロファイル パターンは、SELDI (表面増強レーザー脱着/イオン化) タンパク質質量分析を使用して生成されます。この技術には、悪性腫瘍病理学における臨床診断テストを改善できる可能性があります。

問題: 癌の検出

目標は、質量分析データから癌患者と対照患者を区別できる分類器を作成することです。

この例では、分類器による癌患者と対照患者の区別に使用可能な絞り込んだ測定値、つまり "特徴" を選択する方法を使用します。

これらの特徴は、特定の質量/充填量値でのイオン強度レベルです。

データの書式設定

この例のデータについては、「FDA-NCI 臨床プロテオミクス プログラム データ バンク」(http://home.ccr.cancer.gov/ncifdaproteomics/ppatterns.asp) を参照してください。

この例で使用されている ovarian_dataset.mat のデータを再作成するには、FDA-NCI の Web サイトから生の質量分析データをダウンロードして解凍します。Bioinformatics Toolbox (TM) のスクリプト msseqprocessing を実行するか、biodistcompdemo (並列計算によるバッチ処置) の例の手順に従って、データ ファイル OvarianCancerQAQCdataset.mat を作成します。新しいファイルには、変数 YMZ、および grp が含まれています。

Y の各列は、患者から得られた測定値を表します。Y には 216 人の患者を表す 216 の列があり、そのうち 121 人は卵巣癌患者で 95 人は正常な患者です。

Y の各行は、MZ に示す特定の質量/充填量値でのイオン強度レベルを表します。MZ には 15000 個の質量/充填量値があり、Y の各行は特定の質量/充填量値での患者のイオン強度レベルを表します。

変数 grp は、これらのどの標本が癌患者を表し、どの標本が正常な患者を表すかを示すインデックス情報を保持します。

このデータセットの詳しい説明、およびこの有望な技術の優れた紹介については、[1] および [2] を参照してください。

主な特徴のランク付け

これは、特徴の数が観測値の数を大幅に上回っているにもかかわらず、どの 1 つの特徴だけでも正しく分類できない典型的な分類問題です。そのため、複数の特徴の重み付けを行うと同時に、過適合にならない汎化されたマッピングを生成する方法を適切に学習する分類器を見つける必要があります。

重要な特徴を見つける簡単な方法は、M/Z の各値が独立であると仮定し、2 群 t 検定の計算を行うことです。rankfeatures は、最も重要な M/Z 値のインデックスを返します。たとえば、検定統計量の絶対値によってランク付けされた 100 個のインデックスを返します。

ovarian_dataset.mat からのデータの再作成の最後に、Bioinformatics Toolbox から OvarianCancerQAQCdataset.mat および rankfeatures を読み込み、ランクが高い 100 個の測定値を入力 x として選択します。

ind = rankfeatures(Y,grp,'CRITERION','ttest','NUMBER',100);
x = Y(ind,:);

2 つのクラスのターゲット t を以下のように定義します。

t = double(strcmp('Cancer',grp));
t = [t; 1-t];

スクリプトの前処理手順と上記の例は、前処理および特徴選択の想定される代表的な手順を示すためのものです。異なる手順またはパラメーターを使用すると、この例の結果とは異なる結果が得られたり、結果が改善されたりする場合があります。

[x,t] = ovarian_dataset;
whos
  Name        Size              Bytes  Class     Attributes

  t           2x216              3456  double              
  x         100x216            172800  double              

x 内の各列は、216 人の異なる患者の 1 人を表します。

x の各行は、各患者の 100 個の特定の質量/充填量値でのイオン強度レベルを表します。

変数 t には 2 行から成る 216 個の値があり、それぞれの値は癌患者を示す [1;0]、または正常な患者を示す [0;1] のいずれかになっています。

フィードフォワード ニューラル ネットワークを使用した分類

いくつかの重要な特徴を特定したら、この情報を使用して癌の標本と正常な標本を分類できます。

ニューラル ネットワークはランダムな初期重みで初期化されるため、ネットワークの学習後に得られる結果は例を実行するたびに多少異なります。このようなランダム性を回避するには、毎回同じ結果を生成するように乱数シードを設定します。ただし、これはユーザー独自のアプリケーションには不要です。

setdemorandstream(672880951)

5 つの隠れ層ニューロンがある 1 つの隠れ層のフィードフォワード ニューラル ネットワークを作成し、学習を行います。入力標本およびターゲット標本が自動的に学習セット、検証セット、およびテスト セットに分割されます。学習セットは、ネットワークに教えるために使用されます。検証セットに対してネットワークの改善が続いている限り、学習が続行されます。テスト セットを使用することで、ネットワークの精度を完全に独立して測定できます。

ネットワークはまだ入力データとターゲット データに一致するように構成されていないため、入力と出力のサイズは 0 です。ネットワークの学習時にはこのようになります。

net = patternnet(5);
view(net)

これでネットワークの学習の準備が整いました。標本が学習セット、検証セット、およびテスト セットに自動的に分割されます。学習セットは、ネットワークに教えるために使用されます。検証セットに対してネットワークの改善が続いている限り、学習が続行されます。テスト セットを使用することで、ネットワークの精度を完全に独立して測定できます。

NN Training Tool を使用すると、学習するネットワークと、学習に使用されているアルゴリズムが表示されます。さらに、学習中には学習の状態が表示され、学習を停止した条件が緑で強調表示されます。

下部にあるボタンを使用すると、便利なプロットを開くことができます。これらのプロットは、学習中および学習後に開くことができます。アルゴリズム名およびプロット ボタンの隣のリンクを使用すると、これらに関するドキュメンテーションを開くことができます。

[net,tr] = train(net,x,t);

学習中にネットワーク性能がどのように改善されているかを確認するには、学習ツールの [Performance] ボタンをクリックするか、PLOTPERFORM を呼び出します。

性能は、平均二乗誤差で測定され、対数スケールで表示されます。これは、ネットワークの学習が進むと急激に低下します。

性能は、学習セット、検証セット、およびテスト セットのそれぞれについて表示されます。検証セットに対してネットワークが最適な結果を示すのは、学習後です。

plotperform(tr)

メイン データセットから分割したテスト標本を使用して、学習済みニューラル ネットワークをテストできるようになりました。テスト データは学習にまったく使用されていないため、ネットワークをテストするための "標本外" のデータセットとなります。これにより、実際のデータでテストした場合にネットワークがどの程度一致しているかを把握できます。

ネットワーク出力は 0 ~ 1 の範囲になるため、癌患者を示す 1 または正常な患者を示す 0 が得られるようにしきい値を設定します。

testX = x(:,tr.testInd);
testT = t(:,tr.testInd);

testY = net(testX);
testClasses = testY > 0.5
testClasses =

  2×32 logical array

  Columns 1 through 19

   0   1   1   0   1   1   1   1   1   1   1   1   1   1   1   1   1   1   0
   1   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1

  Columns 20 through 32

   0   0   0   1   0   0   0   0   0   0   0   0   0
   1   1   1   0   1   1   1   1   1   1   1   1   1

ニューラル ネットワークがどの程度データにあてはまるかを測定する方法の 1 つは、混合プロットです。ここで、すべての標本に対して混合行列がプロットされます。

混合行列は、正しい分類と正しくない分類の比率を示します。正しい分類は、行列の対角部分の緑の正方形に表示されます。正しくない分類は、赤い正方形に表示されます。

ネットワークが適切な分類を学習した場合、赤い正方形の比率は非常に小さくなり、誤判別がほとんどないことを示します。

そうなっていない場合は、追加学習を行うか、隠れニューロンを増やしてネットワークの学習を行うことをお勧めします。

plotconfusion(testT,testY)

正しい分類と正しくない分類の全体的な比率を次に示します。

[c,cm] = confusion(testT,testY)

fprintf('Percentage Correct Classification   : %f%%\n', 100*(1-c));
fprintf('Percentage Incorrect Classification : %f%%\n', 100*c);
c =

    0.0938


cm =

    16     2
     1    13

Percentage Correct Classification   : 90.625000%
Percentage Incorrect Classification : 9.375000%

ニューラル ネットワークがどの程度データにあてはまるかを測定するもう 1 つの方法は、受信者動作特性プロットです。これは、出力のしきい値が 0 ~ 1 の範囲で変化する場合に偽陽性率と真陽性率にどのような関連があるかを示します。

線が左上にあればあるほど、高い真陽性率を得るために受け入れる必要がある偽陽性の数が減少します。最適な分類器とは、線が左下隅から左上隅、右上隅、またはその近くに向かって伸びている分類器です。

クラス 1 は癌患者、クラス 2 は正常な患者を示します。

plotroc(testT,testY)

この例では、ニューラル ネットワークを癌の検出用分類器として使用する方法を説明しました。主成分分析などの手法を使用し、ニューラル ネットワークの構築に使用されるデータの次元を減らして、分類器の性能を向上することもできます。

参照

[1] T.P. Conrads, et al., "High-resolution serum proteomic features for ovarian detection", Endocrine-Related Cancer, 11, 2004, pp. 163-178.

[2] E.F. Petricoin, et al., "Use of proteomic patterns in serum to identify ovarian cancer", Lancet, 359(9306), 2002, pp. 572-577.

この情報は役に立ちましたか?