# NOT RUN {
# load example data (Bank clients with/without a term deposit - see ?bank_td for details)
data("bank_td")
# prepare data for training model for binomial target has_td and train models
train_index = sample(seq(1, nrow(bank_td)),size = 0.5*nrow(bank_td) ,replace = FALSE)
train = bank_td[train_index,]
test = bank_td[-train_index,]
train_seq = bank_td[train_index,c('has_td','duration','campaign','pdays','previous','euribor3m')]
test_seq = bank_td[-train_index,c('has_td','duration','campaign','pdays','previous','euribor3m')]
#train keras models using keras_model_sequential() .
x_train <- as.matrix(train[,-c(1:2)]); y_train <- 2-as.numeric(train[,1]);
input_train = list(x_train); output_train = list(y_train)
x_test <- as.matrix(test[,-c(1:2)]); y_test <- 2-as.numeric(test[,1]);
input_test = list(x_test); output_test = list(y_test)
`%>%` <- magrittr::`%>%`
nn_seq <- keras::keras_model_sequential() %>%
keras::layer_dense(units = 16,kernel_initializer = "uniform",activation = 'relu',
input_shape = NCOL(x_train))%>%
keras::layer_dense(units = 16,kernel_initializer = "uniform", activation='relu') %>%
keras::layer_dense(units = 1,activation='sigmoid')
nn_seq %>% keras::compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=c('accuracy'))
nn_seq %>% keras::fit(input_train,output_train,epochs = 20,batch_size = 1028,verbose=0)
scores_and_ntiles <- prepare_scores_and_ntiles_keras(inputlists = list("input_train","input_test"),
inputlist_labels = list("train data","test data"),
models = list("nn_seq"),
model_labels = list("keras sequential model"),
outputlists = list("output_train","output_test"),
select_output_index = 1,
targetclass_labels = list("no.term.deposit","term.deposit"),
ntiles = 10)
plot_input <- plotting_scope(prepared_input = scores_and_ntiles,scope = "compare_datasets")
plot_cumgains(data = plot_input)
plot_cumlift(data = plot_input)
plot_response(data = plot_input)
plot_cumresponse(data = plot_input)
plot_multiplot(data = plot_input)
#... or train keras models using keras functional api (multi-input / multi-output is supported).
x1_train <- as.matrix(train[,c(3:4)]); y1_train <- as.numeric(train[,1])-1;
x2_train <- as.matrix(train[,c(5:7)]); y2_train <- keras::to_categorical(as.numeric(train[,2])-1,
num_classes = 4);
input_train = list(x1_train,x2_train); output_train = list(y1_train,y2_train)
x1_test <- as.matrix(test[,c(3:4)]); y1_test <- as.numeric(test[,1])-1;
x2_test <- as.matrix(test[,c(5:7)]); y2_test <- keras::to_categorical(as.numeric(test[,2])-1,
num_classes = 4);
input_test = list(x1_test,x2_test); output_test = list(y1_test,y2_test)
x1_input <- keras::layer_input(shape = NCOL(x1_train))
x2_input <- keras::layer_input(shape = NCOL(x2_train))
concatenated <- keras::layer_concatenate(list(x1_input, x2_input)) %>%
keras::layer_dense(units = 16,kernel_initializer = "uniform", activation='relu') %>%
keras::layer_dense(units = 16,kernel_initializer = "uniform", activation='relu')
y1_output <- concatenated %>% keras::layer_dense(1, activation = "sigmoid", name = "has_td")
y2_output <- concatenated %>% keras::layer_dense(4, activation = "softmax", name = "td_type")
nn_api <- keras::keras_model(list(x1_input,x2_input), list(y1_output,y2_output))
nn_api %>% keras::compile(optimizer = "rmsprop",
loss = c("binary_crossentropy","categorical_crossentropy"))
nn_api %>% keras::fit(list(x1_train, x2_train),list(y1_train, y2_train),20,batch_size = 1028)
scores_and_ntiles <- prepare_scores_and_ntiles_keras(inputlists = list("input_train","input_test"),
inputlist_labels = list("train data","test data"),
models = list("nn_api"),
model_labels = list("keras api model"),
outputlists = list("output_train","output_test"),
select_output_index = 2,
targetclass_labels = list('no.td','td.type.A','td.type.B','td.type.C'),
ntiles = 100)
plot_input <- plotting_scope(prepared_input=scores_and_ntiles,scope="compare_targetclasses")
plot_cumgains(data = plot_input)
plot_cumlift(data = plot_input)
plot_response(data = plot_input)
plot_cumresponse(data = plot_input)
plot_multiplot(data = plot_input)
# }
Run the code above in your browser using DataLab