2016-11-23 10 views
4

Hadley Wickham proposeddplyrパッケージを使用してブートストラップを実行できる可能性があること、彼の提案はwas improved、次にimplemented in broom packageです。 k倍のクロスバリデーションを実装することも可能でしょうか?dplyrのk倍交差検証?

私は(電車グループを選択)最初のステップは、非常に単純であることを推測する:

crossvalidate <- function (df, k = 5) { 
    n <- nrow(df) 
    idx <- sample(rep_len(1:k, n)) 
    attr(df, "indices") <- lapply(1:k, function(i) which(idx != i)) 
    attr(df, "drop") <- TRUE 
    attr(df, "group_sizes") <- nrow(df) - unclass(table(idx)) 
    attr(df, "biggest_group_size") <- max(attr(df, "group_sizes")) 
    attr(df, "labels") <- data.frame(replicate = 1:k) 
    attr(df, "vars") <- list(quote(replicate)) 
    class(df) <- c("grouped_df", "tbl_df", "tbl", "data.frame") 
    df 
} 

しかし、インデックスを使用して何とか可能であれば何とか私は学ぶためにどこでもattr(, "indices")の任意のドキュメントを見つけることができません"他の"テストグループインデックスを選択するために選択されたもの。あなたはなにか考えはありますか?

+4

をhttps://github.com/hadley/ modelr)、 'crossv_kfold'関数を持つHadleyのパッケージです。 – Axeman

答えて

1

https://rpubs.com/dgrtwo/cv-modelr - そこにあなたがdplyrパッケージ使用したk分割交差検定の例があります(あなたは[ `modelr`]を見ている必要があり

library(ISLR) 
library(dplyr) 
library(purrr) 
library(modelr) 
library(broom) 
library(tidyr) 
library(ISLR) 

set.seed(1) 

models <- Smarket %>% 
    select(Today, Lag1:Lag5) %>% 
    crossv_kfold(k = 20) %>% 
    mutate(model = map(train, ~ lm(Today ~ ., data = .))) 

predictions <- models %>% 
    unnest(map2(model, test, ~ augment(.x, newdata = .y))) 

predictions %>% 
    summarize(MSE = mean((Today - .fitted)^2), 
      MSEIntercept = mean((Today - mean(Today))^2)) 
関連する問題