R编程中如何实现具有并行计算的随机森林?

2021年3月19日18:26:43 发表评论 876 次浏览

随机森林

R编程

基本上是套袋技术。从名称可以清楚地了解到, 该算法基本上创建了具有许多树木的森林。它是一种监督分类算法

在一般情况下, 如果我们在森林中有更多的树木, 则它对所有人都具有最佳的美学吸引力, 被视为最佳森林。随机森林分类器中的情况也是如此, 树的数量越多, 准确度越好, 因此它是一个更好的模型。在随机森林中, 将不会使用你在决策树中使用的相同方法, 即熵和信息增益。在随机森林中, 我们从训练集中绘制随机引导样本。

随机森林的优势:

  • 非常适合处理大型数据集。
  • 学习速度快, 准确性高。
  • 可以一次处理大量变量。
  • 过度拟合在该算法中不是问题。

随机森林的缺点:

  • 复杂性是一个主要问题。由于该算法创建了许多树并将其输出合并以产生最佳输出, 因此需要更多的计算时间和资源。
  • 通常, 训练随机森林模型的时间段较长, 因为它会生成大量树木。

并行运算

并行计算基本上是指在同一实例中使用两个或多个内核(或处理器)来解决一个存在的问题。这里的主要目标是将任务分解为较小的子任务, 并同时完成它们。

一个简单的数学示例将清除并行计算背后的基本思想:

假设我们有以下表达式来求值:

Z= 7a + 8b + 2c + 3d

其中a = 1, b = 2, c = 9, d = 5

没有并行计算的正常过程将是:

第1步:输入变量的值。

Z = (7*1) + (8*2) + (2*9) + (3*5)

第2步:计算表达式:

Z = 7 + (8*2) + (2*9) + (3*5)

第三步:

Z = 7 + 16 + (2*9) + (3*5)

步骤4:

Z = 7 + 16 + 18 + (3*5)

步骤5:

Z = 7 + 16 + 18 + 15

步骤6:

Z = 56

在并行计算的情况下, 相同的表达式评估如下:

第1步:输入变量的值。

Z = (7*1) + (8*2) + (2*9) + (3*5)

第2步:计算表达式:

Z = 7 + 16 + 18 + 15

第三步:

Z = 56

因此, 我们可以看到上面的区别, 在第二种情况下, 表达式的计算要快得多。

因此, 我已经获取了雷达数据的数据集。它总共包含35个属性。第35个属性是目标变量" g"或" b"。该目标变量主要表示电离层中的自由电子。 " g"代表良好, "雷达"返回是指电离层中某种类型的结构的证据, " b"代表"不良", 是指没有返回的。它们的信号通过电离层。因此, 基本上, 这是一个二进制分类任务。让我们从编码部分开始。

加载所需的库:

library (caret)
library (randomForest)
library (doParallel)

读取数据集:

datafile<- read.csv ( "C:/Users/prana/Downloads/lsbinphere.data.csv" )
datafile

将目标变量转换为标签为0和1的因子变量。还请检查是否缺少值。

datafile$target0]  
  
set.seed (100)

由于没有缺失值, 因此我们有一个干净的数据集。因此, 转到模型构建部分。将数据集分成80:20的比例, 分别是训练集和测试集。

Trainingindex<- createDataPartition (datafile$target, p=0.8, list= FALSE )
trainingset<-datafile[Trainingindex, ]
testingset<-datafile[-Trainingindex, ]

无需并行计算即可实现随机森林

现在, 我们将正常构建模型并记录相同的时间:

start.time<- proc.time ()
  
model<- train (target~., data=trainingset, method= 'rf' )
  
stop.time<- proc.time ()
  
run.time<-stop.time -start.time
  
print (run.time)

输出如下:

user  system   elapsed
13.05   0.20     13.62

并行计算实现随机森林

现在使用并行计算概念构建模型, 将do Parallel库加载到R中(此处我们已经在开始时加载了它, 因此无需再次加载)。我们可以看到功能makePSOCKcluster()它创建一组并行运行并通过套接字通信的R副本。的stopCluster()在cl中停止集群中的引擎节点。我们还将记录通过这种方法建立模型所花费的时间。

cl<- makePSOCKcluster (5)
  
registerDoParallel (cl)
  
start.time<- proc.time ()
  
model<- train (target~., data=trainingset, method= 'rf' )
  
stop.time<- proc.time ()
  
run.time<-stop.time -start.time
  
print (run.time)
  
stopCluster (cl)

输出如下:

user  system   elapsed
0.56    0.02      6.19

时差比较表

因此, 现在制定一张表格, 向我们展示这两种方法的时间。

R编程中具有并行计算的随机森林1

因此, 从上表可以得出结论, 使用并行计算, 建模过程为2.200323(= 13.62 / 6.19)比普通方法快十倍。


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: