k-NN、SVM和RF模型使用R中的插入符号包花费的时间太长

k-NN、SVM和RF模型使用R中的插入符号包花费的时间太长,r,model,r-caret,R,Model,R Caret,我有一个数据框架,在五列上有大约120万次观察,样本如下: plate_x plate_z release_speed release_spin_rate Whiff 1 0.16 3.92 91.7 2195 0 2 0.21 3.37 91.2 2161 0 3 -1.25 3.26 94.0 223

我有一个数据框架,在五列上有大约120万次观察,样本如下:

   plate_x plate_z release_speed release_spin_rate Whiff
1     0.16    3.92          91.7              2195     0
2     0.21    3.37          91.2              2161     0
3    -1.25    3.26          94.0              2233     0
4    -0.86    2.17          94.2              2220     0
5    -0.07    1.89          93.4              2217     0
6    -0.47    3.42          91.3              2215     0
7     0.50    4.25          92.5              2276     0
8    -0.65    3.01          91.3              2256     0
9    -0.27    3.26          91.5              2179     0
10    0.63    3.89          92.2              2175     0
11    0.35    2.90          95.3              2412     0
12   -0.60    3.84          85.8              2097     0
13   -0.68    2.18          95.7              2493     0
14   -0.24    3.79          94.4              2058     1
15    0.26    4.50          95.6              2533     0
16   -0.62    2.68          95.1              2006     0
17    0.60    3.34          94.2              2026     0
18   -0.69    1.83          95.0              2671     0
19   -0.84    1.81          94.0              2475     0
20   -1.23    3.91          86.9              2211     0
当我运行LDA时,大约需要5分钟,而推车大约需要10-15分钟。 使用80%的列车/20%的测试,使用以下代码:

validation_index <- createDataPartition(dataset$Whiff, p=0.80, list=FALSE)
validation <- dataset[-validation_index,]
dataset <- dataset[validation_index,]

validation\u index您可以在
caret
包中并行处理,这可以大大加快速度,具体取决于您有多少内核

例如,在开始训练之前,首先设置核心数

注:
|>
是从R 4.1.0开始作为基础管道新增的。如果没有此版本,则只需嵌套
makePSOCKcluster(detectCores())
或使用
magrittr
中的
%%
管道操作符即可

library(doParallel)

cl <- parallel::detectCores() |>
  parallel::makePSOCKcluster()

# this will use all cores, consider doing length(cl) - some number
doParallel::registerDoParallel(cl, cores = length(cl))
库(双并行)
氯
parallel::makePSOCKcluster()
这将使用所有的核,考虑长度(CL)-一些数字。
双平行::寄存器双平行(cl,芯=长度(cl))

您将在
caret::trainControl
的文档中看到,参数
allowParallel
默认为
TRUE

,所以我运行这个,然后以与前面相同的方式运行模型?或者我是否需要调整先前的代码以考虑并行。设置此设置后,作为一个测试运行一个
序列
。当它运行时,检查您的计算机的CPU使用情况,它应该会出现峰值,因为许多内核都在朝着这个方向发展。您每次为knn、svm和rf安装大约100个模型。。所以第一个问题是,这是卡里吗?
library(doParallel)

cl <- parallel::detectCores() |>
  parallel::makePSOCKcluster()

# this will use all cores, consider doing length(cl) - some number
doParallel::registerDoParallel(cl, cores = length(cl))