Диагностика рака

Этот пример показывает, как обучить нейронную сеть, чтобы обнаружить рак с помощью данных о масс-спектрометрии по профилям белка.

Введение

Сыворотка протеомная диагностика шаблона может использоваться, чтобы дифференцировать выборки от пациентов с и без болезни. Шаблоны профиля сгенерированы с помощью улучшенной поверхностью лазерной десорбции и ионизации (SELDI) масс-спектрометрия белка. Эта технология имеет потенциал, чтобы улучшить клинические тесты диагностики для патологий рака.

Проблема: диагностика рака

Цель состоит в том, чтобы создать классификатор, который может различать рак и управлять пациентами от данных о масс-спектрометрии.

Методология, сопровождаемая в этом примере, должна выбрать уменьшаемый набор измерений или "функций", которые могут быть использованы, чтобы различать рак и управлять пациентами, использующими классификатор. Этими функциями являются ионные уровни яркости в определенных значениях массы/заряда.

Форматирование данных

Данные, используемые в этом примере, являются от FDA-NCI Клиническим Банком данных Программы Протеомики: https://home.ccr.cancer.gov/ncifdaproteomics/ppatterns.asp

Чтобы воссоздать данные в ovarian_dataset.mat, используемом в этом примере, загрузите и распакуйте необработанные данные о масс-спектрометрии из веб-сайта FDA-NCI. Создайте файл данных OvarianCancerQAQCdataset.mat путем выполнения шагов в Пакетной обработке данных Спектров Используя Последовательные и Параллельные вычисления (Bioinformatics Toolbox). Новый файл содержит переменные Y, MZ и grp.

Каждый столбец в Y представляет измерения, проведенные от пациента. Существуют столбцы 216 в Y, представляющем пациентов 216, из которых 121 больные раком яичника, и 95 нормальные пациенты.

Каждая строка в Y представляет ионный уровень яркости в определенном значении массового заряда, обозначенном в MZ. Существуют значения массового заряда 15000 в MZ, и каждая строка в Y представляет ионные уровни яркости пациентов в том особом значении массового заряда.

Переменная grp содержит индексную информацию, относительно которой из этих выборок представляют больных раком и которые представляют нормальных пациентов.

Обширное описание этого набора данных может быть найдено в [1] и [2].

Рейтинг ключевых возможностей

Этой задачей является типичная проблема классификации, где количество функций намного больше, чем количество наблюдений, но одна функция достигает правильной классификации. Поэтому цель состоит в том, чтобы найти классификатор, который соответственно изучает, как взвесить несколько функций, и в то же время производит обобщенное отображение, которое не сверхадаптировано.

Простой подход для нахождения значительных функций должен принять, что каждое значение M/Z независимо, и вычислите двухсторонний t-тест. rankfeatures возвращает индекс в старшие значащие значения M/Z, например, 100 индексов, оцениваемых абсолютным значением тестовой статистической величины.

Чтобы закончить воссоздавать данные из ovarian_dataset.mat, загрузите OvarianCancerQAQCdataset.mat и rankfeatures от Bioinformatics Toolbox, чтобы выбрать 100 самых высоких оцениваемых измерений в качестве входных параметров x.

ind = rankfeatures(Y,grp,'Criterion','ttest','NumberOfIndices',100);
x = Y(ind,:);

Задайте цели t для этих двух классов можно следующим образом:

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

Шаги предварительной обработки от скрипта и упомянутого выше примера предназначаются, чтобы продемонстрировать представительный набор возможной предварительной обработки и показать процедуры отбора. Используя различные шаги или параметры может привести к различному и возможно лучшим результатам.

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

  t           2x216              3456  double              
  x         100x216            172800  double              

Каждый столбец в x представляет одного из 216 различных пациентов.

Каждая строка в x представляет ионный уровень яркости в одном из 100 определенных значений массового заряда для каждого пациента.

Переменная t имеет две строки с 216 значениями, каждое из которых любой [1; 0], указывая на больного раком, или [0; 1] для нормального пациента.

Классификация Используя канал прямая нейронная сеть

Теперь, когда вы идентифицировали некоторые значительные функции, можно использовать эту информацию, чтобы классифицировать рак и нормальные выборки.

Поскольку нейронная сеть инициализируется со случайными начальными весами, результаты после обучения сети отличаются немного каждый раз, когда пример запущен. Чтобы избежать этой случайности, случайный seed собирается воспроизвести те же результаты каждый раз. Однако установка случайного seed не необходима для ваших собственных приложений.

setdemorandstream(672880951)

Канал с 1 скрытым слоем прямая нейронная сеть с 5 нейронами скрытого слоя создан и обучен. Вход и целевые выборки автоматически разделены на обучение, валидацию и наборы тестов. Набор обучающих данных используется, чтобы преподавать сеть. Обучение продолжается, пока сеть продолжает изменять к лучшему набор валидации. Набор тестов обеспечивает независимую меру сетевой точности.

Ввод и вывод имеет размеры 0, потому что сеть еще не была сконфигурирована, чтобы совпадать с входом и целевыми данными. Эта настройка происходит, когда вы обучаете сеть.

net = patternnet(5);
view(net)

Теперь сеть готова быть обученной. Выборки автоматически разделены на обучение, валидацию и наборы тестов. Набор обучающих данных используется, чтобы преподавать сеть. Обучение продолжается, пока сеть продолжает изменять к лучшему набор валидации. Набор тестов обеспечивает независимую меру сетевой точности.

Инструмент Обучения Нейронной сети показывает обученную сеть, и алгоритмы раньше обучали его. Это также отображает учебное состояние во время обучения и критериев, которые остановились, обучение подсвечены в зеленом.

Кнопки в нижней части открывают полезные графики, которые могут быть открыты в течение и после обучения. Ссылки рядом с именами алгоритма и кнопками графика открывают документацию относительно тех предметов.

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

Чтобы видеть, как производительность сети, улучшаемая во время обучения, или, нажимает кнопку "Performance" в учебном инструменте или использует функцию plotperform.

Уровень измерен с точки зрения среднеквадратической ошибки и показан на логарифмическом масштабе. Это быстро уменьшилось, когда сеть была обучена.

Производительность показывают для каждого обучения, валидации и наборов тестов.

plotperform(tr)

Обученная нейронная сеть может теперь быть протестирована с выборками тестирования, которые мы разделили от основного набора данных. Данные о тестировании не использовались в обучении ни в каком случае и следовательно обеспечивают набор данных "из выборки", чтобы протестировать сеть на. Это дает оценку того, как хорошо сеть выполнит, когда протестировано с данными из реального мира.

Сетевые выходные параметры находятся в области значений 0-1. Порог выходные параметры, чтобы получить 1's и указание 0 на рак или нормальных пациентов, соответственно.

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

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

  2x32 logical array

  Columns 1 through 19

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

  Columns 20 through 32

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

Одной мерой того, как хорошо нейронная сеть имеет подгонку данные, является график беспорядка.

Матрица беспорядка показывает проценты правильных и неправильных классификаций. Правильные классификации являются зелеными квадратами на матричной диагонали. Красные квадраты представляют неправильные классификации.

Если сеть точна, то проценты в красных квадратах являются маленькими, указывая на немного misclassifications.

Если сеть не точна, то можно попробовать обучение в течение более длительного времени или обучение сети с более скрытыми нейронами.

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);
Percentage Correct Classification   : 84.375000%
Percentage Incorrect Classification : 15.625000%

Другой мерой того, как хорошо нейронная сеть имеет подходящие данные, является график рабочей характеристики получателя. Этот график показывает, как ложные положительные и истинные положительные уровни имеют отношение, когда пороговая обработка выходных параметров отличается от 0 до 1.

Чем более далека оставленный и строка, тем меньше ложных положительных сторон должно быть принято в порядке получить высокий истинный положительный уровень. Лучшие классификаторы имеют строку, идущую от левого нижнего угла, к левому верхнему углу, к правому верхнему углу, или близко к этому.

Класс 1 указывает на больных раком, и класс 2 указывает на нормальных пациентов.

plotroc(testT,testY)

Этот пример демонстрирует, как нейронные сети могут использоваться в качестве классификаторов для диагностики рака. Чтобы улучшать производительность классификатора, можно также попытаться использовать методы как анализ главных компонентов для сокращения размерности данных, используемых для обучения нейронной сети.

Ссылки

[1] Т.П. Конрэдс, и др., "Сыворотка с высоким разрешением протеомные функции яичникового обнаружения", Эндокринно-связанный Рак, 11, 2004, стр 163-178.

[2] Э.Ф. Петрикойн, и др., "Использование протеомных шаблонов в сыворотке, чтобы идентифицировать рак яичника", Ланцет, 359 (9306), 2002, стр 572-577.