# install.packages("keras")
# install.packages("tensorflow")
library(tensorflow)
install_tensorflow()
# remove.packages("tensorflow")
#调包
library(keras)
#导入数据集
setwd("E:\\临时工作\\彬锋\\archive")
df <- read.csv("cs-training.csv",header = TRUE)
#去除不必要变量及变量重命名
df <- df[2:12]
colnames(df) <- c("y","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
##处理缺失值
#看一下变量情况
summary(df)
#查看缺失
colSums(is.na(df))
#对x5用中位数填充
x5_mean <- mean(df$x5,na.rm =TRUE)
df[which(is.na(df$x5)),"x5"] <- x5_mean
#对x10用0填充
df[which(is.na(df$x10)),"x10"] <- 0
##处理异常值
#定义切片,将上极值设为99%超出部分按照99%值计算,同理设置下极值
block<-function(x,lower=T,upper=T){
if(lower){
q1<-quantile(x,0.01)
x[x<=q1]<-q1
}
if(upper){
q99<-quantile(x,0.99)
x[x>q99]<-q99
}
return(x)
}
#运行盖帽
features <- c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
for (i in features){
df[i]=sapply(df[i],block)
}
##标准中心化处理
for (i in features){
df[i]=scale(df[i],center = TRUE, scale = TRUE)
}
##划分训练集与测试集,按照7:3比例
set.seed(1)
sub<-sample(1:nrow(df),round(nrow(df)*0.7))
length(sub)
train<-df[sub,]
test<-df[-sub,]
#将训练集与测试集矩阵化
x_train <- as.matrix(train[features])
y_train <- as.matrix(train$y)
x_test <- as.matrix(test[features])
y_test <- as.matrix(test$y)
####基于keras构建神经网络,并进行训练
# 创建模型
# 创建模型
model <- keras_model_sequential()
# 定义连接损失函数、优化器和评估指标
model %>%
layer_dense(units = 64, activation = 'relu', input_shape = c(10)) %>%
layer_dropout(rate = 0.5) %>%
layer_dense(units = 64, activation = 'relu') %>%
layer_dropout(rate = 0.5) %>%
layer_dense(units = 1, activation = 'sigmoid') %>%
compile(
loss = 'binary_crossentropy',
optimizer = 'rmsprop',
metrics = metric_binary_accuracy
)
# 训练
model %>% fit(x_train, y_train, epochs = 20, batch_size = 128)
网友评论