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

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

Введение

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

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

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

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

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

Данные используются в этом примере, обеспеченном в файле ovarian_dataset.mat, от FDA-NCI Клинический Банк данных Программы Протеомики. Для подробного описания этого набора данных см. [1] и [2].

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

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

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

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

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

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

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

Загрузите 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)

Figure Performance (plotperform) contains an axes object. The axes object with title Best Validation Performance is 0.035332 at epoch 33 contains 6 objects of type line. These objects represent Train, Validation, Test, Best.

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

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

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

testY = net(testX);
testClasses = testY > 0.5
testClasses = 2x32 logical array

   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

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

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

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

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

plotconfusion(testT,testY)

Figure Confusion (plotconfusion) contains an axes object. The axes object with title Confusion Matrix contains 29 objects of type patch, text, line.

Вот полные проценты правильной и неправильной классификации.

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

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

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

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

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

plotroc(testT,testY)

Figure Receiver Operating Characteristic (plotroc) contains an axes object. The axes object with title ROC contains 4 objects of type line. These objects represent Class 1, Class 2.

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

Ссылки

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

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