Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
865
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

Пример процедуры обучения

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

Рассмотрим одно из типичных приложений нейронных сетей в медицинских исследованиях. Для этого примера используем данные из медицинского приложения [35]. Требуется разработать вычислительный инструмент, который может определять уровни липидных составляющих холестерина на основе измерений спектра крови. Имеется статистика измерения 21 волны спектра крови для 264 пациентов. Кроме того, известны уровни hdl, ldl и vldl липидных составляющих холестерина, основанных на сепарации сыворотки. Необходимо определить состоятельность нового способа анализа крови, основанного на измерении ее спектра.

Данные измерений спектра должны быть загружены из МАТ-файла choles_all и подвергнуты факторному анализу:

load choles_all

% Нормировка обучающего множества

[pn,meanp,stdp,tn,meant,stdt] = prestd(p,t);

[ptrans,transMat] = prepca(pn, 0.001);% Выделение главных компонентов

В этом случае сохраняются только те компоненты, которые объясняют 99.9 % изменений в наборе данных. Проверим, сколько же компонентов из первоначальных 21 являются состоятельными:

[R,Q] = size(ptrans)

R = 4

Q = 264

Оказывается, что всего 4.

Теперь сформируем из исходной выборки обучающее, контрольное и тестовое множества. Для этого выделим половину выборки для обучающего множества ptr и по четверти для контрольного v и тестового t:

iitst = 2:4:Q;

iival = 4:4:Q;

iitr = [1:4:Q 3:4:Q];

v.P = ptrans(:,iival); v.T = tn(:,iival);

t.P = ptrans(:,iitst); t.V = tn(:,iitst);

ptr = ptrans(:,iitr); ttr = tn(:,iitr);

Теперь необходимо сформировать и обучить нейронную сеть. Будем использовать сеть с двумя слоями, с функциями активации: в скрытом слое – гиперболический тангенс, в выходном слое – линейная функция. Такая структура эффективна для решения задач аппроксимации и регрессии. В качестве начального приближения установим 5 нейронов в скрытом слое. Сеть должна иметь 3 выходных нейрона, поскольку определено 3 цели. Для обучения применим алгоритм LM:

net = newff(minmax(ptr),[5 3],{'tansig' 'purelin'},'trainlm')

[net,tr]=train(net,ptr,ttr,[],[],v,t);

Обучение, остановлено после 15 итераций, потому что контрольная ошибка в 5 раз превысила ошибку обучения. Построим графики всех ошибок:

plot(tr.epoch,tr.perf,’–‘,tr.epoch,tr.vperf,’—–‘,tr.epoch,tr.tperf,’:’)

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

Рис. 3.27

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

an = sim(net,ptrans); % Моделирование сети

a = poststd(an,meant,stdt); % Восстановление выходов

t = poststd(tn,meant,stdt); % Восстановление целей

for i=1:3

figure(i)

[m(i),b(i),r(i)] = postreg(a(i,:),t(i,:)); % Расчетрегрессии

end % Рис. 3.28,а-в

а

б

в

Рис. 3.28

Первые 2 выхода сети (hdl- иldl-составляющие) хорошо отслеживают целевое множество, значение близко к 0.9, и это означает, что эти липидные характеристики могут быть определены по измерениям спектра крови. Третий выход (vldl-составляющая) восстанавливается плохо (коэффициент корреляции около 0.6), и это означает, что решение задачи должно быть продолжено.

Можно использовать другую архитектуру сети, увеличить количество нейронов в скрытом слое (больше скрытых слоев нейронов) или воспользоваться методом регуляризации. Хотя может оказаться, что восстановление составляющей vldl на основе измерения спектра крови вообще несостоятельно.