2013-08-21 2 views
1

R에서 Random Forest Regression을 수행하려고하는데 몇 가지 문제가 발생하여 대부분 해결되었지만이 마지막 문제는 해결할 수 없습니다. 읽고 싶은 파일 목록이 있는데 문제가되지 않습니다 (for 루프를 사용합니다).for 루프 수식에 변수 이름을 추가하십시오.

library(randomForest) 
set.seed(51) 

file<- c("file1","file2","file3") 
targets<- c("X1.ts","ts2","ts3") 

for (i in 1:length(file)){ 
d_names<-paste("C:\\location\folder\",drugs[i],".txt",sep="") 
dataset<- read.table(d_names, header=TRUE, row.names=1) 
ind<-sample(2,nrow(dataset), replace=TRUE) 

#TRAINING DATASET1 PREDICTING DATASET2 
train_one.rf<- randomForest(dataset[ind==1,][[1]] ~ .-targets[i], data=dataset[ind==1,], prob=c(0.7,0.3)) 
dset2.pred<- predict(train_one.rf, newdata=dataset[ind==2,]) 

#TRAINING DATASET2 PREDICTING DATASET1 
train_two.rf<- randomForest(dataset[ind==2,][[1]] ~ .-targets[i], data=dataset[ind==2,], prob=c(0.7,0.3)) 
dset1.pred<- predict(train_two.rf, newdata=dataset[ind==1,]) 

} 

랜덤 포레스트의 본질은 예상하고 싶은 컬럼을 제외하고 데이터를 모델링해야한다는 것입니다. 그래서 사용해야 할 수있는 :

dataset[ind==1,][[1]] ~ .-target[i] 

그것은 대상 [i]는 i가 임의 숲의 각 실행에 대해 (대상에서) 컬럼의 이름을 추가 할입니다. 나는 그것을 변수에 할당하고 또한 루프 변수를 또한 하위 변수로 사용하려고 시도했지만 아무 소용이 없다. R의 수식 부분에는 내가 가진 것보다 좀 더 우아한 지식이 필요하다고 생각합니다. 미리

Thnaks,

Jcrow

+0

대상은 무엇입니까? 모든 데이터에서이 열이 동일한 열입니까? – Metrics

+0

목표는 읽은 각 파일에서 정의하는 열입니다. 열 이름을 읽는 것 같지만 프로세스를 자동화하려면 각 파일을 읽고 열 이름을 해당 파일과 연관시켜야합니다. – Jcrow06

+0

멀리까지 알다시피, 당신은 각 파일을 읽고 있으며 각 파일에서 대상의 첫 번째 요소를 사용한 다음 대상의 두 번째 요소를 사용한 다음 대상의 세 번째 요소를 올바르게 사용하고 있습니까? 아래 코드는 각 파일과 대상의 첫 번째 요소에 대한 코드입니다. 각 파일의 각 요소를 원하면 다음 코드를 쉽게 수정할 수 있습니다. 그러나, 내가하기 전에 이것이 당신이 찾고있는 것이라면 알려주시겠습니까? – Metrics

답변

1

여기 DATA2 DATA1과 같은 두 개의 데이터 세트에 깨진 mtcars 데이터를 사용하는 솔루션이다.

data1<-mtcars[1:15,] 
data2<-mtcars[16:nrow(mtcars),] 
mydata<-list(data1,data2) 

targets<-list("mpg~.","cyl~.") 

Map(function(x) Map(function(y) randomForest(as.formula(y),data=x,importance=TRUE,proximity=TRUE), targets),mydata) 

[[1]] 
[[1]][[1]] 

Call: 
randomForest(formula = as.formula(y), data = x, importance = TRUE,  proximity = TRUE) 
       Type of random forest: regression 
        Number of trees: 500 
No. of variables tried at each split: 3 

      Mean of squared residuals: 4.637522 
        % Var explained: 63.98 

[[1]][[2]] 

Call: 
randomForest(formula = as.formula(y), data = x, importance = TRUE,  proximity = TRUE) 
       Type of random forest: regression 
        Number of trees: 500 
No. of variables tried at each split: 3 

      Mean of squared residuals: 0.2455641 
        % Var explained: 89.04 


[[2]] 
[[2]][[1]] 

Call: 
randomForest(formula = as.formula(y), data = x, importance = TRUE,  proximity = TRUE) 
       Type of random forest: regression 
        Number of trees: 500 
No. of variables tried at each split: 3 

      Mean of squared residuals: 10.90303 
        % Var explained: 78.93 

[[2]][[2]] 

Call: 
randomForest(formula = as.formula(y), data = x, importance = TRUE,  proximity = TRUE) 
       Type of random forest: regression 
        Number of trees: 500 
No. of variables tried at each split: 3 

      Mean of squared residuals: 0.1623937 
        % Var explained: 95.69 


Warning messages: 
1: In randomForest.default(m, y, ...) : 
    The response has five or fewer unique values. Are you sure you want to do regression? 
2: In randomForest.default(m, y, ...) : 
    The response has five or fewer unique values. Are you sure you want to do regression? 

참고 (단 R for loop 여기 없다) 외측 Map 기능을 MyData의 다른 요소들에 대한 회귀 분석을 반복하는 반면 내부 Map 함수 대상 다른 요소 회귀를 반복한다.

관련 문제