validación validacion test studio prueba partición para independientes estrategias entrenamiento datos cruzada conjuntos r sample

test - validacion cruzada en r studio



Cómo dividir datos en conjuntos de entrenamiento/prueba usando la función de muestra (13)

Debajo de una función que crea una list de submuestras del mismo tamaño que no es exactamente lo que quería, pero podría ser útil para otros. En mi caso, para crear múltiples árboles de clasificación en muestras más pequeñas para probar el sobreajuste:

df_split <- function (df, number){ sizedf <- length(df[,1]) bound <- sizedf/number list <- list() for (i in 1:number){ list[i] <- list(df[((i*bound+1)-bound):(i*bound),]) } return(list) }

Ejemplo:

x <- matrix(c(1:10), ncol=1) x # [,1] # [1,] 1 # [2,] 2 # [3,] 3 # [4,] 4 # [5,] 5 # [6,] 6 # [7,] 7 # [8,] 8 # [9,] 9 #[10,] 10 x.split <- df_split(x,5) x.split # [[1]] # [1] 1 2 # [[2]] # [1] 3 4 # [[3]] # [1] 5 6 # [[4]] # [1] 7 8 # [[5]] # [1] 9 10

Acabo de empezar a usar R y no estoy seguro de cómo incorporar mi conjunto de datos con el siguiente código de muestra:

sample(x, size, replace = FALSE, prob = NULL)

Tengo un conjunto de datos que tengo que poner en un conjunto de entrenamiento (75%) y pruebas (25%). No estoy seguro de qué información debo poner en la x y el tamaño? ¿Es x el archivo del conjunto de datos y el tamaño de la cantidad de muestras que tengo?


El paquete de uso de caTools en el código de muestra R será el siguiente:

data split = sample.split(data$DependentcoloumnName, SplitRatio = 0.6) training_set = subset(data, split == TRUE) test_set = subset(data, split == FALSE)


Este es casi el mismo código, pero en un aspecto más agradable

bound <- floor((nrow(df)/4)*3) #define % of training and test set df <- df[sample(nrow(df)), ] #sample rows df.train <- df[1:bound, ] #get training set df.test <- df[(bound+1):nrow(df), ] #get test set


Existen numerosos enfoques para lograr la partición de datos. Para un enfoque más completo, eche un vistazo a la función createDataPartition en el paquete caret .

Aquí hay un ejemplo simple:

data(mtcars) ## 75% of the sample size smp_size <- floor(0.75 * nrow(mtcars)) ## set the seed to make your partition reproducible set.seed(123) train_ind <- sample(seq_len(nrow(mtcars)), size = smp_size) train <- mtcars[train_ind, ] test <- mtcars[-train_ind, ]


Mi solución es básicamente la misma que dickoa pero un poco más fácil de interpretar:

data(mtcars) n = nrow(mtcars) trainIndex = sample(1:n, size = round(0.7*n), replace=FALSE) train = mtcars[trainIndex ,] test = mtcars[-trainIndex ,]


Se puede hacer fácilmente por:

set.seed(101) # Set Seed so that same sample can be reproduced in future also # Now Selecting 75% of data as sample from total ''n'' rows of the data sample <- sample.int(n = nrow(data), size = floor(.75*nrow(data)), replace = F) train <- data[sample, ] test <- data[-sample, ]

Al usar el paquete caTools :

require(caTools) set.seed(101) sample = sample.split(data$anycolumn, SplitRatio = .75) train = subset(data, sample == TRUE) test = subset(data, sample == FALSE)


Si escribe:

?sample

Si se abrirá un menú de ayuda para explicar qué significan los parámetros de la función de muestra.

No soy un experto, pero aquí hay un código que tengo:

data <- data.frame(matrix(rnorm(400), nrow=100))<br> splitdata <- split(data[1:nrow(data),],sample(rep(1:4,as.integer(nrow(data)/4))))<br> test <- splitdata[[1]]<br> train <- rbind(splitdata[[1]],splitdata[[2]],splitdata[[3]])<br>

Esto le dará un 75% de tren y un 25% de prueba.


Solo una manera más breve y simple usando la increíble biblioteca dplyr :

library(dplyr) set.seed(275) #to get repeatable data data.train <- sample_frac(Default, 0.7) train_index <- as.numeric(rownames(data.train)) data.test <- Default[-train.index, ]


Use base R. Function runif genera valores uniformemente distribuidos de 0 a 1. Al variar el valor de corte (tamaño de tren en el ejemplo a continuación), siempre tendrá aproximadamente el mismo porcentaje de registros aleatorios por debajo del valor de corte.

data(mtcars) set.seed(123) #desired proportion of records in training set train.size<-.7 #true/false vector of values above/below the cutoff above train.ind<-runif(nrow(mtcars))<train.size #train train.df<-mtcars[train.ind,] #test test.df<-mtcars[!train.ind,]


Voy a dividir ''a'' en tren (70%) y probar (30%)

a # original data frame library(dplyr) train<-sample_frac(a, 0.7) sid<-as.numeric(rownames(train)) # because rownames() returns character test<-a[-sid,]

hecho


dplyr para esto, lo hace super simple. Requiere una variable de identificación en su conjunto de datos, que es una buena idea de todos modos, no solo para la creación de conjuntos, sino también para la trazabilidad durante su proyecto. Agréguelo si ya no lo contiene.

mtcars$id <- 1:nrow(mtcars) train <- mtcars %>% dplyr::sample_frac(.75) test <- dplyr::anti_join(mtcars, train, by = ''id'')


library(caret) intrain<-createDataPartition(y=sub_train$classe,p=0.7,list=FALSE) training<-m_train[intrain,] testing<-m_train[-intrain,]


require(caTools) set.seed(101) #This is used to create same samples everytime split1=sample.split(data$anycol,SplitRatio=2/3) train=subset(data,split1==TRUE) test=subset(data,split1==FALSE)

La función sample.split() agregará una columna adicional ''split1'' a dataframe y 2/3 de las filas tendrán este valor como TRUE y otras como FALSE. Ahora las filas donde split1 es TRUE se copiarán en trenes y otras filas se copiará para probar el marco de datos.