Искусственные нейронные сети — многоуровневый персептрон, примененный к классификации набора данных Iris
Искусственные нейронные сети (ИНС) или коннекционистские системы — это вычислительные системы, вдохновленные биологическими нейронными сетями, составляющими мозг животных, но не идентичные им.
ИНС основана на наборе связанных единиц или узлов, называемых искусственными нейронами, которые грубо моделируют нейроны в биологическом мозге. Каждое соединение, как и синапсы в биологическом мозге, может передавать сигнал другим нейронам. Искусственный нейрон, который получает сигнал, затем обрабатывает его и может сигнализировать нейронам, связанным с ним.
Первоначальная цель подхода ИНС состояла в том, чтобы решать проблемы так же, как это делал бы человеческий мозг. Однако со временем внимание переместилось на выполнение конкретных задач, что привело к отклонениям от биологии. ИНС использовались для решения множества задач, включая компьютерное зрение, распознавание речи, машинный перевод, фильтрацию социальных сетей, настольные и видеоигры, а также медицинскую диагностику.
Рис. 1. Искусственная нейронная сеть — это взаимосвязанная группа узлов, созданная по принципу упрощения нейронов в мозгу. Здесь каждый круговой узел представляет собой искусственный нейрон, а стрелка представляет собой соединение между выходом одного искусственного нейрона и входом другого.
Многослойный персептрон, применяемый к классификации набора данных Iris
Информация о наборе данных
Набор данных состоит из 50 образцов каждого из трех видов Ирис (Iris setosa, Iris virginica и Iris versicolor). У каждого образца измеряли четыре характеристики: длину и ширину чашелистиков и лепестков в сантиметрах.
Информация об атрибутах
- длина чашелистика в см
- ширина чашелистика в см
- длина лепестка в см
- ширина лепестка в см
- класс: (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% в разработанной модели нейронной сети.
Дополнительная информация
Узнайте больше о различных архитектурах нейронных сетей Зоопарк нейронных сетей.
К следующему…
Я надеюсь, что этот подход может помочь тем, кто начинает заниматься наукой о данных, будь то статистика, математик, компьютерщик или студенты, интересующиеся этим предметом.