Модель классификации с использованием искусственных нейронных сетей (ИНС)

Опубликовано: 2020-12-01

В терминологии машинного обучения классификация относится к проблеме прогнозного моделирования, в которой входные данные классифицируются как один из предопределенных помеченных классов. Например, предсказание «Да» или «Нет», «Истина» или «Ложь» относится к категории двоичной классификации, поскольку количество выходных данных ограничено двумя метками.

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

Хотя ML более чем способен обрабатывать варианты использования классификации, от мешков до бустинга, нейронные сети появляются, когда у нас есть большое количество выходных классов и большой объем данных для поддержки производительности модели. В дальнейшем мы рассмотрим, как мы можем реализовать модель классификации с использованием нейронных сетей на Keras (Python).

Изучите курс искусственного интеллекта в лучших университетах мира. Заработайте программы Masters, Executive PGP или Advanced Certificate Programs, чтобы ускорить свою карьеру.

Оглавление

Нейронные сети

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

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

Источник: Википедия

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

Читайте: Учебное пособие по обнаружению объектов TensorFlow для начинающих

Проблема классификации

В этой статье мы будем использовать Keras для построения нейронной сети. Keras можно напрямую импортировать в python с помощью следующих команд.

импортировать тензорный поток как tf

из тензорного потока импортировать керас

из keras.models импорт последовательный

из keras.layers импорт плотный

Набор данных и целевая переменная

Мы будем использовать набор данных Diabetes, который будет иметь следующие функции:

Входные переменные (X):

  • Беременности: количество беременностей
  • Глюкоза: Концентрация глюкозы в плазме через 2 часа в пероральном тесте на толерантность к глюкозе.
  • Кровяное давление: диастолическое артериальное давление (мм рт. ст.)
  • SkinThickness: Толщина кожной складки трицепса (мм)
  • Инсулин: 2-часовой сывороточный инсулин (мЕд/мл)
  • ИМТ: индекс массы тела (вес в кг/(рост в м)^2)
  • DiabetesPedigreeFunction: Функция родословной диабета
  • Возраст: Возраст (лет)

Выходные переменные (y):

Результат: переменная класса (0 или 1) [у пациента диабет или нет]

# загрузить набор данных

df= loadtxt('pima-indians-diabetes.csv', разделитель=',')

# Разделить данные на X (вход) и Y (выход)

X = набор данных[:,0:8]

у = набор данных[:,8]

Определить модель Кераса

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

Создание нейронных сетей — не очень простой процесс. Есть много проб и ошибок, которые происходят, прежде чем будет построена хорошая модель. Мы создадим полносвязную сетевую структуру, используя класс Dense в keras. Нейрон считается первым аргументом, передаваемым плотному слою.

Функцию активации можно задать с помощью аргумента активации. В этом случае мы будем использовать выпрямленную линейную единицу в качестве функции активации. Существуют и другие варианты, такие как Sigmoid или TanH, но RELU — это очень обобщенный и лучший вариант.

# определяем модель keras

модель = Последовательный()

model.add (плотный (12, input_dim = 8, активация = 'relu'))

model.add (плотный (8, активация = 'relu'))

model.add (плотный (1, активация = 'сигмоид'))

Скомпилируйте модель Keras

Компиляция модели является следующим шагом после определения модели. Tensorflow используется для компиляции модели. Компиляция — это процесс, в котором задаются параметры для обучения модели и прогнозирования. CPU/GPU или распределенная память могут использоваться в фоновом режиме.

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

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

# компилируем модель keras

model.compile (потеря = 'binary_crossentropy', оптимизатор = 'адам', метрики = ['точность'])

Подгонка модели и оценка

Подгонка модели по существу известна как обучение модели. После компиляции модель готова к эффективному просмотру данных и обучению. Функцию fit() от Keras можно использовать для обучения модели. Два основных параметра, используемых перед обучением модели:

  1. Эпохи: один проход по всему набору данных.
  2. Размер партии: веса обновляются для каждого размера партии. Эпохи состоят из равномерно распределенных пакетов данных.

# подгонять модель keras к набору данных

model.fit(X, y, эпохи=150, batch_size=10)

В этом процессе используется GPU или CPU. Обучение может быть очень долгим процессом в зависимости от эпох, размера партии и, что наиболее важно, размера данных.

Мы также можем оценить модель в наборе обучающих данных, используя функцию оценки(). Данные можно разделить на наборы для обучения и тестирования, а тестирование X и Y можно использовать для оценки модели.

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

Функция Assessment() возвращает список из двух значений. Первым будет потеря модели в наборе данных, а вторым будет точность модели в наборе данных. Нас интересует только точность отчета, поэтому мы не будем принимать во внимание важность потери.

# оцениваем модель keras

_, точность = model.evaluate(Xtest, ytest)

print('Точность: %.2f' % (точность*100))

Читайте также: Введение в модель нейронной сети

Заключение

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

Ознакомьтесь с расширенной сертификационной программой upGrad в области машинного обучения и НЛП. Этот курс был разработан с учетом различных типов студентов, заинтересованных в машинном обучении, предлагая индивидуальное наставничество и многое другое.

Как можно использовать нейронные сети для классификации?

Классификация – это разделение объектов на группы. Тип классификации - это когда прогнозируется несколько классов. В нейронных сетях нейронные единицы организованы в слои. На первом уровне происходит обработка входных данных и создание выходных данных. Этот вывод затем отправляется через оставшиеся слои для получения окончательного вывода. Одни и те же входные данные обрабатываются через слой для получения разных выходных данных. Это можно представить с помощью многослойного персептрона. Тип нейронной сети, используемой для классификации, зависит от набора данных, но нейронные сети использовались для задач классификации.

Почему искусственные нейронные сети хороши для классификации?

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

Когда мы должны использовать искусственные нейронные сети?

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