Acabo de comenzar 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 necesito 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 cuántas muestras tengo?
x
puede ser el índice (fila / col nos. decir) de sudata
.size
puede ser0.75*nrow(data)
. Intentasample(1:10, 4, replace = FALSE, prob = NULL)
ver qué hace.Respuestas:
Existen numerosos enfoques para lograr la partición de datos. Para un enfoque más completo, eche un vistazo a la
createDataPartition
función en elcaTools
paquete.Aquí hay un ejemplo simple:
fuente
mtcars[!train_ind]
y aunque no falló, no funcionó como se esperaba. ¿Cómo podría subconjunto usando el!
?!
se usan para lógico (TRUE/FALSE
) y no para índices. Si desea usar un subconjunto!
, intente algo como mtcars [!seq_len(nrow(mtcars)) %in% train_ind
,] (no probado).createDataPartition
adentrocaret
y nocaTools
?Se puede hacer fácilmente mediante:
Al usar el paquete caTools :
fuente
sample = sample.split(data[,1], SplitRatio = .75)
Debe eliminar la necesidad de nombrar una columna.Lo usaría
dplyr
para esto, lo hace súper simple. Requiere una variable de identificación en su conjunto de datos, lo cual es una buena idea de todos modos, no solo para crear conjuntos sino también para la trazabilidad durante su proyecto. Agréguelo si aún no lo contiene.fuente
Este es casi el mismo código, pero en un aspecto más agradable
fuente
fuente
Dividiré 'a' en tren (70%) y prueba (30%)
hecho
fuente
Mi solución es básicamente la misma que la de dickoa pero un poco más fácil de interpretar:
fuente
Solo una manera más breve y simple usando la impresionante biblioteca dplyr :
fuente
Default[-train_index,]
para la última línea?Si escribes:
If lanzará 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:
Esto te dará un 75% de entrenamiento y un 25% de prueba.
fuente
Después de revisar todos los diferentes métodos publicados aquí, no vi a nadie utilizar
TRUE/FALSE
para seleccionar y anular la selección de datos. Así que pensé en compartir un método utilizando esa técnica.Explicación
Existen múltiples formas de seleccionar datos de R, la mayoría de las personas usan índices positivos / negativos para seleccionar / deseleccionar respectivamente. Sin embargo, se pueden lograr las mismas funcionalidades usando
TRUE/FALSE
para seleccionar / deseleccionar.Considere el siguiente ejemplo.
fuente
Mi solución baraja las filas, luego toma el primer 75% de las filas como tren y el último 25% como prueba. Súper simples!
fuente
Puedo sugerirle que use el paquete rsample:
fuente
scorecard
El paquete tiene una función útil para eso, donde puede especificar la relación y la semillaLos datos de prueba y tren se almacenan en una lista y se puede acceder llamando
dt_list$train
ydt_list$test
fuente
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 resultar útil para otros. En mi caso, para crear múltiples árboles de clasificación en muestras más pequeñas para probar el sobreajuste:Ejemplo:
fuente
El uso del paquete caTools en el código de muestra R será el siguiente: -
fuente
Use la función base R.
runif
genera valores distribuidos uniformemente de 0 a 1. Al variar el valor de corte (train.size en el ejemplo a continuación), siempre tendrá aproximadamente el mismo porcentaje de registros aleatorios por debajo del valor de corte.fuente
Suponiendo que df es su marco de datos, y que desea crear 75% de entrenamiento y 25% de prueba
Luego para crear un tren y probar marcos de datos
fuente
La
sample.split()
función agregará una columna adicional 'split1' al marco de datos 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 el tren y otras filas se copiarán para probar marco de datos.fuente
Me topé con este, también puede ayudar.
fuente
Podemos dividir los datos en una proporción particular aquí, es 80% de entrenamiento y 20% en un conjunto de datos de prueba.
fuente
Tenga cuidado
sample
con la división si busca resultados reproducibles. Si sus datos cambian aunque sea ligeramente, la división variará incluso si la usaset.seed
. Por ejemplo, imagine que la lista ordenada de ID en sus datos es todos los números entre 1 y 10. Si acaba de dejar una observación, digamos 4, el muestreo por ubicación produciría resultados diferentes porque ahora 5 a 10 todos los lugares movidos.Un método alternativo es usar una función hash para asignar ID a algunos números pseudoaleatorios y luego muestrear el mod de estos números. Esta muestra es más estable porque la asignación ahora está determinada por el hash de cada observación, y no por su posición relativa.
Por ejemplo:
[1] 9999
[1] 5000
[1] 2653
[1] 5057
[1] 5057
el tamaño de la muestra no es exactamente 5000 porque la asignación es probabilística, pero no debería ser un problema en muestras grandes gracias a la ley de los números grandes.
Ver también: http://blog.richardweiss.org/2016/12/25/hash-splits.html y /crypto/20742/statistical-properties-of-hash-functions-when -cálculo-módulo
fuente
fuente
Hay una manera muy simple de seleccionar varias filas usando el índice R para filas y columnas. Esto le permite dividir LIMPIA el conjunto de datos dado un número de filas, digamos el primer 80% de sus datos.
En R, todas las filas y columnas están indexadas, por lo que DataSetName [1,1] es el valor asignado a la primera columna y la primera fila de "DataSetName". Puedo seleccionar filas usando [x,] y columnas usando [, x]
Por ejemplo: si tengo un conjunto de datos convenientemente llamado "datos" con 100 filas, puedo ver las primeras 80 filas usando
De la misma manera, puedo seleccionar estas filas y subconjunto usando:
Ahora tengo mis datos divididos en dos partes sin posibilidad de remuestreo. Rapido y Facil.
fuente