Этот пример показывает, как обучить нейронную сеть обнаруживать рак с помощью данных масс-спектрометрии на профилях белка.
Диагностика протеомного шаблона сыворотки может использоваться, чтобы дифференцировать выборки от пациентов с заболеваниями и без них. Шаблоны профиля генерируют с помощью масс-спектрометрии белка десорбции и ионизации с усиленной поверхностью (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)
Сейчас сеть готова к обучению. Выборки автоматически разделяются на наборы для обучения, валидации и тестирования. Набор обучающих данных используется для обучения сети. Обучение продолжается до тех пор, пока сеть продолжает улучшаться на наборе валидации. Тестовый набор обеспечивает независимую меру точности сети.
Neural Network Training Tool показывает обучаемую сеть и алгоритмы, используемые для ее обучения. Это также отображает состояние обучения во время обучения, и критерии, которые остановили обучение, подсвечиваются зеленым цветом.
Кнопки внизу открывают полезные графики, которые можно открыть во время и после обучения. Ссылки рядом с именами алгоритмов и кнопками графика открывают документацию по этим темам.
[net,tr] = train(net,x,t);
Чтобы увидеть, как улучшилась производительность сети во время обучения, либо нажмите кнопку «Эффективность» в инструменте обучения, либо используйте plotperform
функция.
Эффективность измеряется в терминах средней квадратичной невязки и показана на логарифмической шкале. Он быстро уменьшился, когда сеть была обучена.
Эффективность показана для каждого из наборов обучения, валидации и тестирования.
plotperform(tr)
Обученную нейронную сеть теперь можно протестировать с помощью проверки, выборки мы разбили на разделы из основного набора данных. Данные проверки никоим образом не использовались в обучении и, следовательно, обеспечивают набор данных «out-of-sample» для тестирования сети. Это дает оценку того, насколько хорошо сеть будет работать при тестировании с данными из реального мира.
Выходные выходы сети находятся в области значений 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)
Этот пример демонстрирует, как нейронные сети могут использоваться в качестве классификаторов для обнаружения рака. Чтобы улучшить эффективность классификатора, можно также попробовать использовать методы, такие как анализ основных компонентов для уменьшения размерности данных, используемых для обучения нейронной сети.
[1] T.P. Conrads, et al., «High-resolution serum proteomic features for yvarian detection», Endocrine-Related Cancer, 11, 2004, pp. 163-178.
[2] E.F. Petricoin, et al., «Использование протеомных шаблонов в сыворотке для идентификации рака яичников», Lancet, 359 (9306), 2002, pp. 572-577.