exponenta event banner

Оценка жира в организме

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

Проблема: Оценить содержание жира в организме

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

  • Возраст (годы)

  • Вес (фунт)

  • Высота (дюймы)

  • Окружность шеи (см)

  • Окружность груди (см)

  • Окружность живота (см)

  • Окружность бедра (см)

  • Окружность бедра (см)

  • Окружность колена (см)

  • Окружность лодыжки (см)

  • Бицепс (удлиненная) окружность (см)

  • Окружность предплечья (см)

  • Окружность запястья (см)

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

Почему нейронные сети?

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

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

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

Подготовка данных

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

Каждый i-й столбец входной матрицы будет иметь тринадцать элементов, представляющих тело с известным процентным содержанием жира в теле.

Каждый соответствующий столбец целевой матрицы будет иметь один элемент, представляющий процентное содержание телесного жира.

Здесь загружается такой набор данных.

[X,T] = bodyfat_dataset;

Мы можем просмотреть размеры входов X и целей T.

Обратите внимание, что и X, и T имеют 252 столбца. Они представляют 252 телосложения (входы) и связанные с ними проценты жира в организме (мишени).

Входная матрица X имеет тринадцать строк для тринадцати атрибутов. Целевая матрица Т имеет только одну строку, так как для каждого примера мы имеем только один желаемый выход, процентное содержание телесного жира.

size(X)
size(T)
ans =

    13   252


ans =

     1   252

Подбор функции с помощью нейронной сети

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

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

setdemorandstream(491218382)

Двухслойные (то есть однослойные скрытые) прямые нейронные сети могут соответствовать любому соотношению «вход-выход», учитывая достаточное количество нейронов в скрытом слое. Слои, которые не являются выходными слоями, называются скрытыми слоями.

Мы попробуем один скрытый слой из 15 нейронов для этого примера. В общем, более сложные проблемы требуют больше нейронов и, возможно, больше слоев. Более простые проблемы требуют меньше нейронов.

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

net = fitnet(15);
view(net)

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

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

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

[net,tr] = train(net,X,T);
nntraintool
nntraintool('close')

Чтобы узнать, как улучшилась производительность сети во время обучения, нажмите кнопку «Performance» в инструменте обучения или вызовите команду PLOTPERFORM.

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

Производительность отображается для каждого из наборов обучения, проверки и тестов. Конечная сеть - это сеть, которая лучше всего работает в наборе проверки.

plotperform(tr)

Тестирование нейронной сети

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

testX = X(:,tr.testInd);
testT = T(:,tr.testInd);

testY = net(testX);

perf = mse(net,testT,testY)
perf =

   36.9404

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

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

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

Y = net(X);

plotregression(T,Y)

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

e = T - Y;

ploterrhist(e)

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

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