Глубокое обучение, нейронная сеть - PullRequest
1 голос
/ 13 мая 2019

У меня есть вопрос относительно применения нейронной сети в категориальных данных.

1- У меня есть один выход, который является числовым (Connection.Duration)

2-У меня 5 входов, 4 из них (EVSE.ID, User.ID, Fee, Day) являются категориальными, а 1 (Time) - числовым.

Я хочу применить нейронную сеть для прогнозирования Connection.Duration.Я не знаю правильную команду для использования для категориальных данных.Я использовал model.matrix, но я не знал, как продолжить работу с новым фреймом данных (m), который содержит категориальные данные.

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

data$Fee <- as.factor(data$Fee)
data$EVSE.ID <- as.factor(data$EVSE.ID)
data$User.ID <- as.factor(data$User.ID)
data$Day <- as.factor(data$Day)
data$Time <- as.factor(data$Time)
data$Connection.Duration <- as.factor(data$Connection.Duration)

m <- model.matrix(Connection.Duration ~ EVSE.ID+Time+Day+Fee+User.ID,
              data= data)

# Neural Networks 
n <- neuralnet(Connection.Duration ~ EVSE.ID+Time+Day+Fee+User.ID,
           data = m,
           hidden=c(100,60))

# Data partition 
set.seed(1234)
ind <- sample(2, nrow(m), replace = TRUE, prob = c(0.7, 0.3))
training <- m[ind==1,1:5]
testing <- m[ind==2,1:5]
trainingtarget <- m[ind==1, 6]
testingtarget <- m[ind==2, 6]

# Normalize
m <- colMeans(training)
s <- apply(training, 2, sd)
training <- scale(training, center = m, scale = s)
testing <- scale(testing, center = m, scale = s)

# Create Model
model <- keras_model_sequential()
model %>%
layer_dense(units = 5, activation = 'relu', input_shape = c(5)) %>%
layer_dense(units = 1)

# Compile
model %>% compile(loss= 'mse',
              optimizer= 'rmsprop',
              metrics='mae')
# Fit model 
mymodel <- model %>%

  fit(training,
      trainingtarget,
      epochs= 100,
      batch_size = 32,
      validation_split = 0.2)

# Evaluate 
model %>% evaluate(testing, testingtarget)
pred <- model %>% predict(testing)
mean(testingtarget- pred^2)
plot(testingtarget, pred)

# Fine-tune Model
model <- keras_model_sequential()
model %>%
layer_dense(units = 100, activation = 'relu', input_shape = c(5)) %>%
 layer_dropout(rate = 0.4) %>%
layer_dense(units = 60, activation = 'relu', input_shape = c(5)) %>%
 layer_dropout(rate = 0.2) %>%
 layer_dense(units = 1)

# Compile
model %>% compile(loss= 'mse',
              optimizer= optimizer_rmsprop(lr=0.0001),
              metrics='mae')

# Fit model
mymodel <- model %>%
  fit(training,
      trainingtarget,
      epochs= 100,
      batch_size = 32,
      validation_split = 0.2)

# Evaluate 
model %>% evaluate(testing, testingtarget)
  pred <- model %>% predict(testing)
  mean(testingtarget- pred^2)
  plot(testingtarget, pred)

1 Ответ

0 голосов
/ 13 мая 2019

То, что вы ищете, называется "одна горячая кодировка".В tenorflow / keras есть функции, помогающие с кодированием.

Но в противном случае я бы попытался сделать это заранее.Я бы не стал полагаться на model.matrix, поскольку он не дает вам того, что вы хотите.

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

library(data.table)
library(mltools)
one_hot(data.table(x = factor(letters), n = 1:26))

Примечание: для этого требуется data.table вместо data.frame, но вы можете преобразоватьваши данные туда и обратно.

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