2016-01-08 11 views
3

Я бегу параллельно cv.glmnet от glmnet пакет на более чем 1000 наборов данных. В каждом прогоне я устанавливал семя, чтобы результаты были воспроизводимыми. Я заметил, что мои результаты различаются. Дело в том, что когда я запускаю код в тот же день, результаты одинаковы. Но на следующий день они различаются.Установить семя с помощью cv.glmnet paralleled дает разные результаты в R

Вот мой код:

model <- function(path, file, wyniki, faktor = 0.75) { 

    set.seed(2) 

    dane <- read.csv(file) 

    n <- nrow(dane) 
    podzial <- 1:floor(faktor*n) 


    ########## GLMNET ############ 
    nFolds <- 3 

    train_sparse <- dane[podzial,] 
    test_sparse <- dane[-podzial,] 

    # fit with cross-validation 
    tryCatch({ 
    wart <- c(rep(0,6), "nie") 
    model <- cv.glmnet(train_sparse[,-1], train_sparse[,1], nfolds=nFolds, standardize=FALSE) 

    pred <- predict(model, test_sparse[,-1], type = "response",s=model$lambda.min) 

    # fetch of AUC value 
    aucp1 <- roc(test_sparse[,1],pred)$auc 

    }, error = function(e) print("error")) 

    results <- data.frame(auc = aucp1, n = nrow(dane)) 
    write.table(results, wyniki, sep=',', append=TRUE,row.names =FALSE,col.names=FALSE) 


} 

path <- path_to_files 
files <- list.files(sciezka, full.names = TRUE, recursive = TRUE) 
wyniki <- "wyniki_adex__samplingfalse_decl_201512.csv" 

library('doSNOW') 
library('parallel') 

#liczba watkow 
threads <- 5 

#rejestrujemy liczbe watkow 
cl <- makeCluster(threads, outfile="") 
registerDoSNOW(cl) 

message("Loading packages on threads...") 
clusterEvalQ(cl,library(pROC)) 
clusterEvalQ(cl,library(ROCR)) 
clusterEvalQ(cl,library(glmnet)) 
clusterEvalQ(cl,library(stringi)) 

message("Modelling...") 
foreach(i=1:length(pliki)) %dopar% { 
    print(i) 
    model(path, files[i], wyniki) 
} 

Кто-нибудь знает, что является причиной? Я запускаю CentOS Linux release 7.0.1406 (Core)/Red Hat 4.8.2-16

ответ

0

Нашел ответ в документации cv.glmnet функции:

Отметим также, что результаты cv.glmnet являются случайными, так как фоны выбираются случайным образом.

Решение состоит в том, чтобы вручную установить складки таким образом, чтобы не выбраны случайным образом:

nFolds <- 3 
foldid <- sample(rep(seq(nFolds), length.out = nrow(train_sparse)) 
model <- cv.glmnet(x = as.matrix(x = train_sparse[,-1], 
        y = train_sparse[,1], 
        nfolds = nFolds, 
        foldid = foldid, 
        standardize = FALSE)