В этой статье я объясню нейронные сети и то, как вы можете создавать нейронные сети в R. Во-первых, я должен кратко объяснить нейронные сети.
Нейронные сети
Что такое нейронная сеть? Нейронная сеть — это система, в которой вы принимаете входные данные с числовыми и категориальными данными и передаете их в некоторые узлы. Эти узлы находятся в слоях, и в этих узлах к этим входным параметрам применяются простые математические процедуры. После этого вы можете применить другие слои для более детальной работы.
Как видите, есть три основных слоя. Вход, Скрытый и Выход. Выходные данные могут измениться, если случай классификации больше, чем 2 класса.
Как работают нейронные сети?
В этой статье кратко объясняются операции и рабочий процесс нейронных сетей. Кроме того, я объясню это тоже.
Общее дело вот в чем:
Просто вы взвешиваете все входные данные и вводите их в математическую ступенчатую функцию после суммирования весов. Затем таким же образом перейдите к другим слоям.
Этот процесс называется прямым распространением. После этого происходит обратное распространение для подбора весов. Таким образом, наша нейронная сеть могла работать легко.
Обратное распространение
Это простой процесс обновления веса. С цепным правилом из дифференциальных уравнений оно обновляется в сети.
Новый вес = старый вес — производная скорость * скорость обучения
Когда мы берем производную функции, мы просто находим малое значение для убывания в параболическом пространстве. Скорость обучения постоянна, и мы выбираем ее в соответствии с подробным подходом к минимальной ошибке.
Вы можете увидеть в этой статье простые шаги.
Нормализация перед глубоким обучением
Зачем нужна нормализация?
Потому что в узлах нейронных сетей некоторые узлы могут быть настолько взвешены своим не нормализованным значением и его можно измерить как нечто другое для вывода. Подробности вы можете прочитать в статье выше.
Это не сложно, хотя вы должны сначала соответствующим образом нормализовать переменные.
Если вы не нормализуете свои значения, алгоритм не сможет работать должным образом и выдаст ошибку. Вот почему это важно.
сначала я загружаю свои пакеты.
library(ISLR) library("caret") attach(Carseats) library(tidyverse) library("keras") library(neuralnet) library(Hmisc) library(caret) names(Carseats)
После этого я создаю функцию нормализации, чтобы применить ее позже.
normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) } data <- Carseats[complete.cases(Carseats), ] data <- data %>% select_if(is.numeric) dfNorm <- as.data.frame(lapply(data, normalize))
Нормализация — это минимальная нормализация. Он дает вам значения от 0 до 1. Таким образом, вы нормализуете значения в 0–1. После того, как complete.cases дает значения, отличные от na. Select_if, как следует из названия, выбирает, являются ли данные числовыми в этом столбце. Затем применяется функция нормализации с помощью функции lapply.
Далее проводится выборка.
n = nrow(Carseats) smp_size <- floor(0.7 * n) # set.seed(123) index<- sample(seq_len(n),size = smp_size) train <- dfNorm[index,] test <- dfNorm[-index,]
Сначала я беру номер строки данных Carseats в переменную n. Затем я создаю размер выборки равным 70%. Затем установка семени предназначена для создания корня для рандомизации. Smaple дает случайное число 70%. Так что я могу выбрать их с помощью after и отправить их на обучение и тестирование. Вы можете посмотреть некоторые операции R в Интернете.
Я смотрю первые 5 коррелированных значений для обучения нейронной сети
corrTrain <- cor(train) # Select best 5 correlated values. library(corrplot) corrplot(corrTrain, type = "upper", order = "hclust", tl.col = "black", tl.srt = 45)
Соотношение для выбора. Если вы выберете наиболее коррелированные значения для вашего процесса машинного обучения, вы достигнете наивысшей логической точности.
nn=neuralnet(Sales~Income+Advertising+Population+Price+Age,data=train, hidden=10,act.fct = "logistic", linear.output = TRUE,stepmax=10^5,threshold = 0.01)
Итак, как вы можете видеть в модели, я выбираю Доход, Реклама, Население, Цена и Возраст.
Для числовых значений вы можете изменить функцию linear.output.
Также вы можете изменить свои скрытые слои, указав числа в векторе, как это
nn=neuralnet(Sales~Income+Advertising+Population+Price+Age,data=train, hidden=c(7,6,5),act.fct = "logistic", linear.output = TRUE,stepmax=10^5,threshold = 0.01) hidden=c(7,6,5)
Как видите, я установил скрытые слои как 7,6,5. Сюжет этого таков:
С этим скрытым слоем ошибка предсказания не меняется.
Затем идет прогнозирование и вычисление ошибки. Я рассчитываю ошибку с помощью метода средней ошибки.
Predict=compute(nn,test) Predict$net.result RMSE <- function(actual,predicted) { return(sqrt(sum(actual^2-predicted^2)/length(actual))) } Predict <- is.numeric(Predict) RMSE(test$Sales,Predict)
Rmse — метод ошибок из статистики. Вы просто берете разницу между реальными и прогнозируемыми значениями. Однако для отрицательных значений вы берете квадраты из них, а затем делите N на количество значений.
Ошибка 0.5087188. Я думаю, это неплохо.
Спасибо за чтение, хорошего дня.