Performance 平均进程速度正在变慢

Performance 平均进程速度正在变慢,performance,r,process,Performance,R,Process,我的英语不好。所以我请求你的耐心和编辑 我分析了韩国的人口普查数据。我使用“adaboost”作为分析方法,每个城市都实施了adaboost。目标变量、自变量、公式、选项、观测次数等,各城市之间都是一样的。没有区别。我制作了一个宏,一个接一个地为城市实现adaboost。在开始分析下一个城市之前,宏将删除除自身以外的所有对象 我发现,随着时间的推移,平均处理速度越来越慢。我的意思是,城市1-30所需的平均时间约为10分钟,而城市80-100所需的平均时间为25分钟。所以我终止了R会话并重新打开。

我的英语不好。所以我请求你的耐心和编辑

我分析了韩国的人口普查数据。我使用“adaboost”作为分析方法,每个城市都实施了adaboost。目标变量、自变量、公式、选项、观测次数等,各城市之间都是一样的。没有区别。我制作了一个宏,一个接一个地为城市实现adaboost。在开始分析下一个城市之前,宏将删除除自身以外的所有对象

我发现,随着时间的推移,平均处理速度越来越慢。我的意思是,城市1-30所需的平均时间约为10分钟,而城市80-100所需的平均时间为25分钟。所以我终止了R会话并重新打开。我从第80个城市重新运行宏,然后80-100个城市的平均时间减少到10分钟

为什么会发生这种情况?我怎样才能解决这个问题?我需要你的帮助。提前谢谢


r代码和宏如下所示。”sgg'宏变量表示城市代码。目标变量有六类。因此,我使用“一个其他”方法进行多类分类

memory.limit(size=4095)

library(gbm)
library(gtools)

dbset<-strmacro(sgg,sampnum,
 expr=
 {
 setwd("C:\\Users\\Kim\\Desktop\\JQ\\");
 db.sgg<-read.table('sgg.TXT', header=TRUE);
 db.sgg<-subset(db.sgg, AGE>=10)

 N<-nrow(db.sgg);
 if(N>=sampnum)
  {
  db.sgg<-db.sgg[sample(1:N, sampnum),]
  };

 db.sgg$SEX<-factor(letters[db.sgg$SEX])

 ordered(db.sgg$AREA);

 db.sgg$josagu_attri_mod2<-factor(letters[db.sgg$josagu_attri_mod])
 db.sgg$geocheo_type_mod2<-factor(letters[db.sgg$geocheo_type_mod])
 db.sgg$dandok_type_mod2<-factor(letters[db.sgg$dandok_type_mod])

 colnames(db.sgg)[10:15]<-c('FLC3.1','FLC3.3','FLC3.4','FLC3.5','FLC3.6','FLC3.7');
 }
 );

train<-strmacro(i, sgg,
expr={
   res.sgg.i<-gbm(FLC3.i~SEX+AREA+AGE+josagu_attri_mod2+geocheo_type_mod2+dandok_type_mod2,
    data=db.sgg, distribution='adaboost', n.trees=3000,shrinkage = 0.005,
    cv.folds=5, keep.data=TRUE,
    bag.fraction=0.7, interaction.depth=3);
   BI.sgg.i<-gbm.perf(res.sgg.i, method='cv');
   PRED.sgg.i<-predict.gbm(res.sgg.i, db.sgg, BI.sgg.i);
    }
    );


clean<-strmacro(sgg,
    expr={
        rm(BI.sgg.1);rm(BI.sgg.3);rm(BI.sgg.4);rm(BI.sgg.5);rm(BI.sgg.6);rm(BI.sgg.7);
        rm(res.sgg.1);rm(res.sgg.3);rm(res.sgg.4);rm(res.sgg.5);rm(res.sgg.6);rm(res.sgg.7);
        rm(PRED.sgg.1);rm(PRED.sgg.3);rm(PRED.sgg.4);rm(PRED.sgg.5);rm(PRED.sgg.6);rm(PRED.sgg.7);
        rm(db.sgg);
        }
        );

all<-strmacro(sgg,num,
    expr={
      dbset(sgg,num);
      train(1,sgg);train(3,sgg);train(4,sgg);train(5,sgg);train(6,sgg);train(7,sgg);
      clean(sgg);
        }
    );

all(11010,3000)
all(11020,3000)
all(11030,3000)

我的理解是R是以写时拷贝的方式实现的

例如:

X <- 1:1000
y <- x      # no copy made. x & y share the reference
y[1] <- 8   # now a copy is made.

X内存问题?您可能必须使用交换文件进行更大的分析。在此过程中,您可以将每个城市的结果保存为单独的文件,并从内存中删除这些数据。请提供一个可复制的示例,否则我们将猜测到底出了什么问题。@James什么是交换文件?我如何使用它?交换文件是操作系统用来提供大于已安装RAM的虚拟内存的文件。它可以自动使用,但比RAM慢。问题的解决方案是安装更多RAM或使用SSD来承载交换文件。
X <- 1:1000
y <- x      # no copy made. x & y share the reference
y[1] <- 8   # now a copy is made.
y <- list()
y$this <- 1:5
y$that <- 6:10  # now every thing was recopied.
y <- vector("list", 2)
y[[1]] <- 1:5
y[[2]] <- 6:10