Оценка жировой прослойки

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

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

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

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

  • Вес (lbs)

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

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

  • Окружность грудной клетки (cm)

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

  • Модная окружность (cm)

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

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

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

  • Бицепс (расширил) окружность (cm)

  • Вооружите окружность (cm)

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

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

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

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

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

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

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

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

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

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

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

[X,T] = bodyfat_dataset;

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

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

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

size(X)
size(T)
ans =

    13   252


ans =

     1   252

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

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

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

setdemorandstream(491218382)

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

Мы попробуем один скрытый слой 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)

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

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