2016-11-10 5 views
-1

Итак, моя задача - разбить блок данных из 506 наблюдений на десять различных образцов учебных и тестовых наборов (с заменой). Я делаю это, поэтому могу проделать это через модель и увидеть средний MSE более десяти образцов. До сих пор, у меня есть следующие идиотски сложный цикл:R возьмите десять уникальных образцов и перейдете на тренировочные/тестовые наборы?

temp_train<- setNames(lapply(1:10, function(x) {x <-homeprices[sample(1:nrow(homeprices), 
.8*n, replace = FALSE), ]; x }), paste0("tr_sample.", 1:10)) 
for (i in 1:length(temp_train)) { 
    assign(paste0("df_train_", i), as.data.frame(temp_train[i])) 
    name<-assign(paste('df_train_', i, sep=''), x[i]) 
    temp_test<- setNames(homeprices[-name], paste0("te_sample.", 1:10)) 
    alpha<-assign(paste0("df_test_", i), as.data.frame(temp_test[i])) 
} 

Этот цикл дает сказать df_test_2, который представляет собой кадр данных 506 наблюдений одной переменной. Он ДОЛЖЕН быть файлом данных из 102 obvs из 13 переменных, а именно 102 наблюдений, которые НЕ находятся в df_train_2. Итак, мой вопрос - это лучший способ сделать это, что на самом деле работает? Я бы предпочел не устанавливать какие-либо пакеты, если это возможно, так как я хочу получить представление о базе r.

+0

Похоже, вы хотите 10 разных разделов ваших данных, каждая из которых составляет примерно 80/20 поезда/теста? Можете ли вы быстро подтвердить, что это правильно? – joran

+0

Да, это правильно! – CapnShanty

ответ

1

Общая (и эффективная) стратегия для обработки этого типа задач в базе R заключается не в создании каждого отдельного кадра данных, а в простом создании набора индексов, которые определяют раздел.

Например,

x <- replicate(n = 10,expr = {sample(506,404)}) 

создает матрицу, где каждые из десяти столбцов заполняются строки индексов случайного выбора из 404 строк (80% или около 506). Затем вы будете прокручивать свою модель и использовать столбцы x, чтобы выбрать подмножество обучения ваших данных, которое вы передадите своей модели. Отрицательное индексирование тех же индексов даст соответствующие 20% для тестирования.

Таким образом, у вас нет тонн копий фреймов данных.