R语言 使用并行计算的随机森林

R语言 使用并行计算的随机森林

R编程中的随机森林基本上是一种分袋技术。从这个名字我们可以清楚地解释,这个算法基本上是用大量的树来创建森林。它是一种有监督的分类算法。

在一般情况下,如果我们在一个森林里有更多的树,它就会给所有人带来最好的美感,并被算作是最好的森林。在随机森林分类器中也是如此,树的数量越多,准确率就越高,因此它被认为是一个更好的模型。在随机森林中,你在决策树中使用的相同方法,即熵和信息增益不会被使用。在随机森林中,我们从训练集中抽取随机引导样本。

随机森林的优点

  • 有利于处理大数据集。
  • 学习速度快,并提供高精确度。
  • 可以同时处理大量的变量。
  • 过度拟合在这个算法中不是一个问题。

随机森林的劣势

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

并行计算

并行计算基本上是指在同一实例中使用两个或更多的核心(或处理器)来获得一个现有问题的解决方案。这里的主要目标是将任务分解成更小的子任务,并同时完成。

一个简单的数学例子将清楚地说明并行计算背后的基本理念。

假设我们有下面的表达式需要评估。

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

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

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

第1步: 输入变量的值。

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

第2步: 对表达式进行评估。

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

第3步

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

第4步

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

第5步

Z = 7 + 16 + 18 + 15
R

第6步

Z = 56
R

在并行计算的情况下,同样的表达式评估将如下。

第1步: 输入变量的值。

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

第2步: 对表达式进行评估。

Z = 7 + 16 + 18 + 15
R

第3步

Z = 56
R

所以我们可以看到上面的区别,在第二种情况下,表达式的评估要快得多。

所以,我采取了一个雷达数据集。它总共由35个属性组成。第35个属性是目标变量,即 “g “或 “b”。这个目标变量主要代表电离层中的自由电子。”g “代表好的 “雷达回波是那些显示电离层中某种类型结构的证据,”b “代表坏的 “回波是那些没有的;它们的信号通过电离层。所以基本上,这是一个二进制分类任务。让我们从编码部分开始。

加载所需的库

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

读取数据集

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

将目标变量转换为标签为0和1的因子变量,同时检查是否有缺失的值。

datafile$target0]  
  
set.seed(100)
R

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

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

无并行计算的随机森林的实现

现在,我们将正常建立一个模型,并记录所需的时间。

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

输出

user  system   elapsed
13.05   0.20     13.62
R

用并行计算实现随机森林

现在用并行计算的概念建立模型,在R中加载do Parallel库(这里我们已经在开始时加载了它,所以不需要再加载)。我们可以看到函数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)
R

输出

user  system   elapsed
0.56    0.02      6.19
R

时间差的比较表

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

在R编程中使用并行计算的随机森林

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册