Je viens de commencer à utiliser R et je ne sais pas comment incorporer mon ensemble de données avec l'exemple de code suivant:
sample(x, size, replace = FALSE, prob = NULL)
J'ai un ensemble de données que je dois mettre dans un ensemble de formation (75%) et de test (25%). Je ne sais pas quelles informations je suis censé mettre dans le x et la taille? X est-il le fichier de l'ensemble de données et taille combien d'échantillons j'ai?
x
peut être l'index (ligne / col nos. dire) de votredata
.size
peut être0.75*nrow(data)
. Essayezsample(1:10, 4, replace = FALSE, prob = NULL)
de voir ce qu'il fait.Réponses:
Il existe de nombreuses approches pour réaliser le partitionnement des données. Pour une approche plus complète, jetez un œil à la
createDataPartition
fonction dans lecaTools
package.Voici un exemple simple:
la source
mtcars[!train_ind]
et même si cela n'a pas échoué, cela n'a pas fonctionné comme prévu. Comment pourrais-je sous-ensemble utiliser le!
?!
sont utilisés pour la logique (TRUE/FALSE
) et non pour les index. Si vous voulez utiliser un sous-ensemble!
, essayez quelque chose comme mtcars [!seq_len(nrow(mtcars)) %in% train_ind
,] (non testé).createDataPartition
danscaret
et noncaTools
?Cela peut être facilement fait par:
En utilisant le package caTools :
la source
sample = sample.split(data[,1], SplitRatio = .75)
Devrait supprimer la nécessité de nommer une colonne.J'utiliserais
dplyr
pour cela, c'est super simple. Il nécessite une variable id dans votre ensemble de données, ce qui est une bonne idée de toute façon, non seulement pour créer des ensembles, mais aussi pour la traçabilité pendant votre projet. Ajoutez-le s'il ne contient pas déjà.la source
C'est presque le même code, mais en plus beau look
la source
la source
Je vais diviser 'a' en train (70%) et tester (30%)
terminé
la source
Ma solution est fondamentalement la même que celle de Dickoa mais un peu plus facile à interpréter:
la source
Juste une manière plus brève et simple d'utiliser l'impressionnante bibliothèque de dplyr :
la source
Default[-train_index,]
pour la dernière ligne.Si vous tapez:
If lancera un menu d'aide pour expliquer ce que signifient les paramètres de la fonction exemple.
Je ne suis pas un expert, mais voici un code que j'ai:
Cela vous donnera 75% de train et 25% de test.
la source
Après avoir parcouru toutes les différentes méthodes publiées ici, je n'ai vu personne utiliser
TRUE/FALSE
pour sélectionner et désélectionner des données. J'ai donc pensé partager une méthode utilisant cette technique.Explication
Il existe plusieurs façons de sélectionner des données à partir de R, le plus souvent les gens utilisent des indices positifs / négatifs pour sélectionner / désélectionner respectivement. Cependant, les mêmes fonctionnalités peuvent être obtenues en utilisant
TRUE/FALSE
pour sélectionner / désélectionner.Prenons l'exemple suivant.
la source
Ma solution mélange les lignes, puis prend les premiers 75% des lignes comme train et les derniers 25% comme test. Super simples!
la source
Je peux suggérer d'utiliser le package rsample:
la source
scorecard
package a une fonction utile pour cela, où vous pouvez spécifier le ratio et la graineLes données de test et de train sont stockées dans une liste et sont accessibles en appelant
dt_list$train
etdt_list$test
la source
Ci-dessous une fonction qui crée un
list
des sous-échantillons de la même taille qui n'est pas exactement ce que vous vouliez mais qui pourrait s'avérer utile pour d'autres. Dans mon cas, pour créer plusieurs arbres de classification sur des échantillons plus petits pour tester le surajustement:Exemple :
la source
Utiliser le package caTools dans l'exemple de code R sera le suivant: -
la source
Utilisez la base R. La fonction
runif
génère des valeurs uniformément réparties de 0 à 1. En variant la valeur de coupure (train.size dans l'exemple ci-dessous), vous aurez toujours approximativement le même pourcentage d'enregistrements aléatoires en dessous de la valeur de coupure.la source
En supposant que df est votre trame de données et que vous souhaitez créer 75% de train et 25% de test
Puis pour créer un train et tester des trames de données
la source
La
sample.split()
fonction ajoutera une colonne supplémentaire 'split1' à dataframe et 2/3 des lignes auront cette valeur comme TRUE et d'autres comme FALSE.Maintenant les lignes où split1 est TRUE seront copiées dans train et les autres lignes seront copiées pour tester trame de données.la source
Je suis tombé sur celui-ci, cela peut aussi aider.
la source
Nous pouvons diviser les données en un rapport particulier ici, il s'agit de 80% de train et de 20% dans un jeu de données de test.
la source
Méfiez-vous du
sample
fractionnement si vous recherchez des résultats reproductibles. Si vos données changent même légèrement, la répartition variera même si vous utilisezset.seed
. Par exemple, imaginez que la liste triée des identifiants dans vos données contient tous les nombres entre 1 et 10. Si vous venez de supprimer une observation, disons 4, l'échantillonnage par emplacement donnerait des résultats différents car maintenant 5 à 10 tous les lieux ont été déplacés.Une méthode alternative consiste à utiliser une fonction de hachage pour mapper les identifiants en certains nombres pseudo aléatoires, puis à échantillonner sur le mod de ces nombres. Cet échantillon est plus stable car l'affectation est désormais déterminée par le hachage de chaque observation, et non par sa position relative.
Par exemple:
[1] 9999
[1] 5 000
[1] 2653
[1] 5057
[1] 5057
la taille de l'échantillon n'est pas exactement de 5000 car l'assignation est probabiliste, mais elle ne devrait pas poser de problème dans les grands échantillons grâce à la loi des grands nombres.
Voir également: http://blog.richardweiss.org/2016/12/25/hash-splits.html et /crypto/20742/statistical-properties-of-hash-functions-when -calculer-modulo
la source
la source
Il existe un moyen très simple de sélectionner un certain nombre de lignes à l'aide de l'index R pour les lignes et les colonnes. Cela vous permet de diviser proprement l'ensemble de données en fonction d'un certain nombre de lignes - disons les premiers 80% de vos données.
Dans R, toutes les lignes et colonnes sont indexées, donc DataSetName [1,1] est la valeur affectée à la première colonne et à la première ligne de "DataSetName". Je peux sélectionner des lignes en utilisant [x,] et des colonnes en utilisant [, x]
Par exemple: si j'ai un ensemble de données nommé "data" avec 100 lignes, je peux afficher les 80 premières lignes en utilisant
De la même manière, je peux sélectionner ces lignes et les sous-ensembles en utilisant:
Maintenant, mes données sont divisées en deux parties sans possibilité de rééchantillonnage. Rapide et facile.
la source