r - 使用插入符号在大型数据集上训练模型时如何提高计算时间性能
问题描述
我正在使用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)
即使使用parallel
,train()
前面代码中定义的过程也没有完成。我的 Windows 系统、intel core i3 和 6GB RAM 的计算机无法在3 天内完成此培训。计算机打开了 3 天,但模型没有训练,我停止了它。
也许我做错了什么,这让我train()
很慢。我想知道是否有任何方法可以提升我定义的训练方法。8
另外,如果只有变量,我不知道为什么要花太多时间。
拜托,你能帮我解决这个问题吗?我一直在寻找解决这个问题的方法,但没有成功。欢迎任何关于如何改进我的训练方法的建议。此外,一些解决方案提到h2o
可以使用,但我不知道如何将我的SVM
方案设置到该架构中。
非常感谢您的帮助。
解决方案
推荐阅读
- android - 如何使用 latlngbounds 限制谷歌地图并仍然获取用户位置?
- angular - 带有远程url返回值的角度4打开对话框
- python - python中的多个'In'运算符
- python-3.x - 如何评价(刮掉的)句子的质量?
- android - DocumentFile.renameTo 通过图库共享文件时使用旧文件名
- python - 我得到了,Python 语法错误,找不到它
- mysql - 如何使用 SQL 有选择地从包含多个值的列中删除特定值,每个值用逗号分隔?
- c++ - 使用动态分配删除元素的链表中的内存泄漏
- python - 处理帧时的 Slate 元素引用异常
- z3 - Z3 的 qe 策略返回的公式的正常形式