首页 > 解决方案 > 使用插入符号在大型数据集上训练模型时如何提高计算时间性能

问题描述

我正在使用caret函数train()来开发支持向量机模型。我的数据集Matrix有相当多的行255099和很少的列/变量(8包括响应/目标变量)。目标变量具有10组并且是一个因素。我的问题是关于训练模型的速度。接下来包括我的数据集Matrix,以及我用于模型的代码。我也使用parallel过以使速度更快但无法正常工作。

#Libraries
library(rsample)
library(caret)
library(dplyr)
#Original dataframe
set.seed(1854)
Matrix <- data.frame(Var1=rnorm(255099,mean = 20,sd=1),
                     Var2=rnorm(255099,mean = 30,sd=10),
                     Var3=rnorm(255099,mean = 15,sd=11),
                     Var4=rnorm(255099,mean = 50,sd=12),
                     Var5=rnorm(255099,mean = 100,sd=20),
                     Var6=rnorm(255099,mean = 180,sd=30),
                     Var7=rnorm(255099,mean = 200,sd=50),
                     Target=sample(1:10,255099,prob = c(0.15,0.1,0.1,
                                                           0.15,0.1,0.14,
                                                           0.10,0.05,0.06,
                                                           0.05),replace = T))
#Format target variable
Matrix %>% mutate(Target=as.factor(Target)) -> Matrix
# Create training and test sets
set.seed(1854)
strat <- initial_split(Matrix, prop = 0.7,
                             strata = 'Target')
traindf <- training(strat)
testdf <- testing(strat)
#SVM model
#Enable parallel computing
cl <- makePSOCKcluster(7)
registerDoParallel(cl)
#SVM radial basis kernel
set.seed(1854) # for reproducibility
svmmod <- caret::train(
  Target ~ .,
  data = traindf,
  method = "svmRadial",
  preProcess = c("center", "scale"),
  trControl = trainControl(method = "cv", number = 10),
  tuneLength = 10
)
#Stop parallel
stopCluster(cl)

即使使用paralleltrain()前面代码中定义的过程也没有完成。我的 Windows 系统、intel core i3 和 6GB RAM 的计算机无法在3 天内完成此培训。计算机打开了 3 天,但模型没有训练,我停止了它。

也许我做错了什么,这让我train()很慢。我想知道是否有任何方法可以提升我定义的训练方法。8另外,如果只有变量,我不知道为什么要花太多时间。

拜托,你能帮我解决这个问题吗?我一直在寻找解决这个问题的方法,但没有成功。欢迎任何关于如何改进我的训练方法的建议。此外,一些解决方案提到h2o可以使用,但我不知道如何将我的SVM方案设置到该架构中。

非常感谢您的帮助。

标签: rmachine-learningr-careth2o

解决方案


推荐阅读