Skip to main content
 首页 » 编程设计

R 神经网络包对于数百万条记录来说太慢

2025年05月04日48over140

我正在尝试使用 R 包神经网络训练用于流失预测的神经网络。这是代码:

data <- read.csv('C:/PredictChurn.csv')  
maxs <- apply(data, 2, max)  
mins <- apply(data, 2, min) 
scaled_temp <- as.data.frame(scale(data, center = mins, scale = maxs - mins)) 
scaled <- data 
scaled[, -c(1)] <- scaled_temp[, -c(1)] 
index <- sample(1:nrow(data),round(0.75*nrow(data))) 
train_ <- scaled[index,] 
test_ <- scaled[-index,] 
library(neuralnet) 
n <- names(train_[, -c(1)]) 
f <- as.formula(paste("CHURNED_F ~", paste(n[!n %in% "CHURNED_F"], collapse = " + "))) 
nn <- neuralnet(f,data=train_,hidden=c(5),linear.output=F) 

它按其应有的方式工作,但是当使用完整数据集(数百万行的范围内)进行训练时,它花费的时间太长。所以我知道 R 默认情况下是单线程的,所以我尝试研究如何将工作并行化到所有核心。是否有可能并行执行此功能?我尝试了各种软件包但没有成功。

有人能做到吗? 它不一定是神经网络包,任何可以让我训练神经网络的解决方案都可以。

谢谢

请您参考如下方法:

我对这个包有很好的体验Rmpi ,它可能也适用于您的情况。

library(Rmpi) 

简单来说,其用法如下:

nproc = 4  # could be automatically determined 
# Specify one master and nproc-1 slaves 
Rmpi:: mpi.spawn.Rslaves(nslaves=nproc-1) 
# Execute function "func_to_be_parallelized" on multiple CPUs; pass two variables to function 
my_fast_results = Rmpi::mpi.parLapply(var1_passed_to_func, 
                                      func_to_be_parallelized, 
                                      var2_passed_to_func) 
# Close slaves 
Rmpi::mpi.close.Rslaves(dellog=T)