Этот пример показывает, как обучить нейронную сеть обнаруживать рак с помощью данных масс-спектрометрии по белковым профилям.
Сывороточная протеомная диагностика может быть использована для дифференциации образцов от пациентов с заболеванием и без него. Профили формируются с использованием масс-спектрометрии белка с улучшенной лазерной десорбцией и ионизацией (SELDI). Эта технология может улучшить клинические диагностические тесты на патологии рака.
Цель состоит в том, чтобы построить классификатор, который может различать рак и контрольных пациентов от данных масс-спектрометрии.
Методология, используемая в этом примере, заключается в выборе уменьшенного набора измерений или «признаков», которые могут быть использованы для различия между раком и контрольными пациентами с использованием классификатора. Эти признаки представляют собой уровни интенсивности ионов при определенных значениях массы/заряда.
Данные, используемые в этом примере, представленные в файле ovarian_dataset.mat, из банка данных программы клинической протеомики FDA-NCI. Подробное описание этого набора данных см. в разделах [1] и [2].
Создание файла данных OvarianCancerQAQCdataset.mat следуя шагам пакетной обработки спектров с использованием последовательных и параллельных вычислений (панель инструментов биоинформатики). Новый файл содержит переменные 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(Панель инструментов биоинформатики), чтобы выбрать 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] для нормального пациента.
Теперь, когда вы определили некоторые важные особенности, вы можете использовать эту информацию для классификации рака и нормальных образцов.
Поскольку нейронная сеть инициализируется со случайными начальными весами, результаты после обучения сети незначительно изменяются при каждом запуске примера. Чтобы избежать этой случайности, случайное начальное число настраивается на воспроизведение одних и тех же результатов каждый раз. Однако настройка случайного начального числа не требуется для собственных приложений.
setdemorandstream(672880951)
Создается и обучается 1-скрытый слой прямой нейронной сети с 5 нейронами скрытого слоя. Входные и целевые образцы автоматически разделяются на обучающие, проверочные и тестовые наборы. Обучающий набор используется для обучения сети. Обучение продолжается до тех пор, пока сеть продолжает улучшаться на наборе проверки. Тестовый набор обеспечивает независимое измерение точности сети.
Входные и выходные данные имеют размеры 0, поскольку сеть еще не настроена на соответствие входным и целевым данным. Такая конфигурация выполняется при обучении сети.
net = patternnet(5); view(net)
Сейчас сеть готова к обучению. Образцы автоматически разделяются на обучающие, проверочные и тестовые наборы. Обучающий набор используется для обучения сети. Обучение продолжается до тех пор, пока сеть продолжает улучшаться на наборе проверки. Тестовый набор обеспечивает независимое измерение точности сети.
Обучающий инструмент нейронной сети показывает обучаемую сеть и алгоритмы, используемые для ее обучения. Он также отображает состояние обучения во время обучения и критерии, которые остановили обучение, выделены зеленым цветом.
Кнопки внизу открывают полезные графики, которые можно открывать во время и после обучения. Ссылки рядом с именами алгоритмов и кнопками графика открывают документацию по этим темам.
[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 = 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
Одним из показателей того, насколько хорошо нейронная сеть подходит к данным, является график путаницы.
Матрица путаницы показывает процентное соотношение правильных и неправильных классификаций. Правильными классификациями являются зеленые квадраты на диагонали матрицы. Красные квадраты представляют неправильные классификации.
Если сеть точна, то проценты в красных квадратах невелики, что указывает на несколько ошибочных классификаций.
Если сеть не точна, то можно попробовать тренироваться дольше, или тренировать сеть с большим количеством скрытых нейронов.
plotconfusion(testT,testY)

Вот общие проценты правильной и неправильной классификации.
[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)

Этот пример демонстрирует, как нейронные сети могут использоваться в качестве классификаторов для выявления рака. Чтобы улучшить производительность классификатора, можно также попробовать использовать такие методы, как анализ основных компонентов, для уменьшения размерности данных, используемых для обучения нейронной сети.
T.P. Conrads, et al., «Сывороточные протеомные признаки высокого разрешения для обнаружения яичников», Endocrine-Related Cancer, 11, 2004, pp. 163-178.
[2] E.F. Petricoin, et al., «Использование протеомных паттернов в сыворотке для выявления рака яичников», Lancet, 359 (9306), 2002, стр. 572-577.