Искусственные нейронные сети — многоуровневый персептрон, примененный к классификации набора данных Iris

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

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

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

Рис. 1. Искусственная нейронная сеть — это взаимосвязанная группа узлов, созданная по принципу упрощения нейронов в мозгу. Здесь каждый круговой узел представляет собой искусственный нейрон, а стрелка представляет собой соединение между выходом одного искусственного нейрона и входом другого.

Многослойный персептрон, применяемый к классификации набора данных Iris

Информация о наборе данных

Набор данных состоит из 50 образцов каждого из трех видов Ирис (Iris setosa, Iris virginica и Iris versicolor). У каждого образца измеряли четыре характеристики: длину и ширину чашелистиков и лепестков в сантиметрах.

Информация об атрибутах

  1. длина чашелистика в см
  2. ширина чашелистика в см
  3. длина лепестка в см
  4. ширина лепестка в см
  5. класс: (Iris setosa, Iris virginica и Iris versicolor)

Моделирование в коде R

Установить библиотеки

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

install.packages("neuralnet")
install.packages("NeuralNetTools")
install.packages("ggplot2")
install.packages("GGally")
install.packages("caret")

Импорт библиотек

Импортируйте библиотеки, необходимые для разработки и решения этой проблемы.

library("neuralnet")
library("NeuralNetTools")
library("ggplot2")
library("GGally")
library("caret")

Загрузить ирис

Набор данных Iris существует внутри R, поэтому вы можете импортировать его в соответствии с приведенным ниже кодом.

data(iris)

Исследовательский анализ данных

В статистике исследовательский анализ данных (EDA) представляет собой подход к анализу наборов данных для обобщения их основных характеристик, часто с помощью визуальных методов.

Корреляционный анализ

ggplot <- function(...) 
  ggplot2::ggplot(...) + 
  scale_color_brewer(palette="Purples") + 
  scale_fill_brewer(palette="Purples")

unlockBinding("ggplot",parent.env(asNamespace("GGally")))
assign("ggplot",ggplot,parent.env(asNamespace("GGally")))

graph_corr <- ggpairs(iris, mapping = aes(color = Species), 
                      columns = c('Sepal.Length', 
                                  'Sepal.Width', 
                                  'Petal.Length', 
                                  'Petal.Width', 
                                  'Species'), 
                      columnLabels = c('Sepal.Length', 
                                       'Sepal.Width', 
                                       'Petal.Length', 
                                       'Petal.Width', 
                                       'Species')) 
graph_corr <- graph_corr + theme_minimal()
graph_corr

Выходной корреляционный анализ

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

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

Мы можем сделать это двумя способами в R:

  • Автоматическое масштабирование фрейма данных с помощью функции scale в R.
  • Преобразуйте данные с помощью метода максимально-минимальной нормализации.

В этом примере будет использоваться функция нормализации Max-Min.

norm.fun = function(x){(x - min(x))/(max(x) - min(x))}

Примените функцию в наборе данных, чтобы нормализовать данные.

df_iris = iris[,c("Sepal.Length","Sepal.Width",
                  "Petal.Length","Petal.Width" )]

df_iris = as.data.frame(apply(df_iris, 2, norm.fun))

df_iris$Species = iris$Species

df_iris$setosa <- df_iris$Species=="setosa"
df_iris$virginica <- df_iris$Species == "virginica"
df_iris$versicolor <- df_iris$Species == "versicolor"

Разделенные данные — набор данных для обучения и тестирования

Теперь нам нужно разделить данные между обучающим и тестовым набором данных. В приведенном ниже коде размер обучающей выборки составляет 75 % от общего набора данных, а 25 % — тестовый набор данных.

## 75% of the sample size
smp_size <- floor(0.75 * nrow(df_iris))

## set the seed to make your partition reproducible
set.seed(123)
train_ind <- sample(seq_len(nrow(df_iris)), size = smp_size)

training.set <- df_iris[train_ind, ]
test.set <- df_iris[-train_ind, ]

Подгонка модели нейронной сети

Модель нейронной сети содержит 4 переменные во входном слое, 2 скрытых слоя, содержащих в каждом слое по 10 нейронов.

Количество повторений для обучения нейронной сети равно 5.

Используемая функция активации является логистической, а функция, используемая для вычисления ошибки, — это ce (перекрестная энтропия).

model = as.formula("Species ~ 
                           Sepal.Length + 
                           Sepal.Width + 
                           Petal.Length + 
                           Petal.Width")

iris.net <- neuralnet(model,
                      data=training.set, 
                      hidden=c(10,10), 
                      rep = 5, 
                      act.fct = "logistic",
                      err.fct = "ce",
                      linear.output = F, 
                      lifesign = "minimal", 
                      stepmax = 1000000,
                      threshold = 0.001)

Подгонка модели выходной нейронной сети

hidden: 10,10  thresh: 0.001  rep: 1/5  steps: 5796 error: 7e-04 time: 1.39 secs

hidden: 10,10  thresh: 0.001  rep: 2/5  steps: 1551 error: 0.00107 time: 0.33 secs

hidden: 10,10  thresh: 0.001  rep: 3/5  steps: 6682 error: 0.00063 time: 1.43 secs

hidden: 10,10  thresh: 0.001  rep: 4/5  steps: 3973 error: 0.00099 time: 0.86 secs

hidden: 10,10  thresh: 0.001  rep: 5/5  steps: 3525 error: 0.00109 time: 0.75 secs

Визуализация модели нейронной сети

Визуализируйте архитектуру нейронной сети с помощью приведенного ниже кода.

plotnet(iris.net, 
        alpha.val = 0.8, 
        circle_col = list('purple', 'white', 'white'), 
        bord_col = 'black')

Визуализация выходной модели нейронной сети

Предсказание

Используйте набор тестовых данных в качестве входных данных для модели нейронной сети, чтобы предсказать классы Iris.

iris.prediction <- compute(iris.net, test.set)

idx <- apply(iris.prediction$net.result, 1, which.max)

predicted <- as.factor(c('setosa', 'versicolor', 'virginica')[idx])

Метрики для оценки

Матрица путаницы

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

confusionMatrix(predicted, test.set$Species)

Выходная матрица путаницы

Confusion Matrix and Statistics

            Reference
Prediction   setosa versicolor virginica
  setosa         11          0         0
  versicolor      0         13         1
  virginica       0          0        13

Overall Statistics
                                          
               Accuracy : 0.9737          
                 95% CI : (0.8619, 0.9993)
    No Information Rate : 0.3684          
    P-Value [Acc > NIR] : 2.196e-15       
                                          
                  Kappa : 0.9604

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

Дополнительная информация

Узнайте больше о различных архитектурах нейронных сетей Зоопарк нейронных сетей.

К следующему…

Я надеюсь, что этот подход может помочь тем, кто начинает заниматься наукой о данных, будь то статистика, математик, компьютерщик или студенты, интересующиеся этим предметом.