Стратифицированная перекрестная валидация в k-кратном порядке в R - PullRequest
0 голосов
/ 17 апреля 2020

Предположим, у меня есть мультиклассовый набор данных (радужная оболочка, например). Я хочу выполнить стратифицированное 10-кратное резюме, чтобы проверить производительность модели. Я нашел функцию в пакете splitstackchange, которая называется stratified, которая дает мне стратифицированную складку в зависимости от пропорции данных, которые я хочу. Так что, если мне нужен тестовый фолд, это будет 0,1 из строк данных.

#One Fold
library(splitstackchange)
stratified(iris,c("Species"),0.1)

Я хочу знать, как реализовать эту функцию или любую другую форму стратифицированного резюме в 10-кратном l oop , Я не мог взломать логику c за ней. Здесь я приведу воспроизводимый пример.

    library(splitstackshape)
    data=iris
    names(data)[ncol(data)]=c("Y")
    nFolds=10

    for (i in 1:nFolds){
      testing=stratified(data,c("Y"),0.1,keep.rownames=TRUE)
      rn=testing$rn
      testing=testing[,-"rn"]
      row.names(testing)=rn
      trainingRows=setdiff(1:nrow(data),as.numeric(row.names(testing)))
      training=data[trainingRows,]
      names(training)[ncol(training)]="Y"
    }

1 Ответ

0 голосов
/ 17 апреля 2020

Используйте Caret пакет для n-кратного резюме. Я бы предложил эту очень информативную ссылку на каретку.

Вам многие нашли следующее решение полезным.

library(tidyverse)
library(splitstackshape)
library(caret)
library(randomForest)

data=iris

## split data into train and test using stratified sampling
d <- rownames_to_column(data, var = "id") %>% mutate_at(vars(id), as.integer)
training <- d %>% stratified(., group = "Species", size = 0.90)
dim(training)

## proportion check
prop.table(table(training$Species)) 

testing <- d[-training$id, ]
dim(testing)
prop.table(table(testing$Species)) 


## Modelling

set.seed(123)

tControl <- trainControl(
  method = "cv", #cross validation
  number = 10, #10 folds
  search = "random" #auto hyperparameter selection
)


trRf <- train(
  Species ~ ., #formulae
  data = training[,-1], #data without id field
  method = "rf", # random forest model
  trControl = tControl # train control from previous step.
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...