Comment diviser les données en formation/ensembles de test échantillon à l'aide de la fonction
J'ai juste commencé à l'aide de R et je ne suis pas sûr de savoir comment intégrer mon dataset avec l'exemple de code suivant:
sample(x, size, replace = FALSE, prob = NULL)
J'ai un jeu de données que j'ai besoin de mettre dans une formation (75%) et de test (25%) ensemble.
Je ne suis pas sûr que les informations que je suis censé mettre dans le x et la taille?
Soit x l'ensemble de données de fichier et la taille que le nombre d'échantillons que j'ai?
x
peut être l'indice (ligne/col de la nsa. dire) de votredata
.size
peut être0.75*nrow(data)
. Essayezsample(1:10, 4, replace = FALSE, prob = NULL)
pour voir ce qu'il fait.
Vous devez vous connecter pour publier un commentaire.
Il existe de nombreuses approches pour atteindre le partitionnement des données. Pour une approche plus complète de prendre un coup d'oeil à la
createDataPartition
fonction dans lecaTools
paquet.Voici un exemple simple:
mtcars[!train_ind]
et alors qu'il n'a pas manqué, il ne fonctionne pas comme prévu. Comment pourrais-je sous-ensemble à l'aide de la!
?TRUE/FALSE
) et pas d'indices. Si vous souhaitez sous-ensemble à l'aide de!
, essayez quelque chose comme mtcars[!seq_len(nrow(mtcars)) %in% train_ind
, ] (pas testé).-train_ind
est de ne pas faire ce qu'il prétend. Le moins fait un elementwise négation des numéros plutôt que de choisir pour ces indicestrain
pas choisi partrain_ind
. Pas sûr de savoir comment cela a 93 upvotes depuis la formation et le test n'est pas séparée des ensembles de mtcars. Gaspillé demi-heure sur ce et a dû trouver une autre solution. C'est peut-être un héritage particulier artefact qui est changé depuis?Il peut être fait facilement par:
En utilisant caTools package:
C'est presque le même code, mais en plus joli look
Je voudrais utiliser
dplyr
pour cela, le rend super simple. Il nécessite une variable id de votre jeu 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é au cours de votre projet. Ajouter si elle ne contient pas déjà.Je vais split 'a' en train(70%) et de test(30%)
fait
Ma solution est essentiellement la même que dickoa mais un peu plus facile à interpréter:
Juste un plus bref et de manière simple à l'aide génial dplyr bibliothèque:
Default[-train_index,]
pour la dernière ligne.Si vous tapez:
Si lancera un menu d'aide à expliquer ce que les paramètres de l'exemple de la fonction moyenne.
Je ne suis pas un expert, mais voici un code que j'ai:
Cela vous donnera 75% de train et de 25% de test.
Après en regardant à travers toutes les différentes méthodes de posté ici, je n'ai vu personne utiliser
TRUE/FALSE
pour sélectionner et désélectionner des données. J'ai donc pensé que je voudrais partager une méthode utilisant cette technique.Explication
Il y a plusieurs façons de sélectionner des données à partir de R, le plus souvent les gens utilisent positif/négatif indices pour sélectionner/désélectionner respectivement. Cependant, les mêmes fonctionnalités peuvent être obtenues en utilisant des
TRUE/FALSE
pour sélectionner/désélectionner.Considérons l'exemple suivant.
Ma solution mélange les lignes, puis prend le premier de 75% des lignes que le train et le dernier 25% en tant que test. Super simples!
scorecard
paquet a une fonction utile pour qui, où vous pouvez spécifier le ratio et de grainesLe tester et former les données sont stockées dans une liste et peut être accessible en appelant
dt_list$train
etdt_list$test
Ci-dessous une fonction qui créer un
list
de sous-échantillons de même taille qui n'est pas exactement ce que tu voulais, mais pourrait s'avérer utile pour les autres. Dans mon cas, de créer plusieurs arbres de classification sur de plus petits échantillons pour tester le surajustement :Exemple :
Utilisation caTools paquet dans la R
exemple de code sera comme suit:-
Utilisation de la base de R. la Fonction
runif
génère uniformément distribué des valeurs de 0 à 1.By de coupure variable valeur (train.taille dans l'exemple ci-dessous), vous aurez toujours environ le même pourcentage d'enregistrements aléatoires au-dessous de la valeur limite.Je peux suggérer à l'aide de la réchantillon package:
La
sample.split()
fonction ajouter une colonne supplémentaire 'split1" pour dataframe et 2/3 des lignes auront cette valeur en tant que VRAI et les autres comme des FAUX.Maintenant les lignes où split1 est VRAI sera copié dans le train et d'autres lignes seront copiés pour tester dataframe.En supposant df est votre bloc de données, et que vous souhaitez créer 75% train et 25% test
Puis de créer un train et test des trames de données
Je suis tombé sur celui-ci, il peut aider trop.
Méfiez-vous des
sample
pour partager si vous recherchez des résultats reproductibles. Si vos données changent, même légèrement, la scission aura varier, même si vous utilisezset.seed
. Imaginez, par exemple, la liste triée des Identifiants de données vous est tous les nombres entre 1 et 10. Si vous venez de tomber une observation, dire 4, l'échantillonnage par emplacement donnerait un des résultats différents car maintenant 5 à 10 tous les déplacés des lieux.Une méthode alternative consiste à utiliser une fonction de hachage pour les Id de mappage dans certains pseudo-aléatoire de nombres, et l'échantillon sur le mod de ces numéros. Cet échantillon est plus stable, car l'affectation est aujourd'hui déterminée par la valeur de hachage de chaque observation, et non pas par sa position relative.
Par exemple:
[1] 9999
[1] 5000
[1] 2653
[1] 5057
[1] 5057
la taille de l'échantillon n'est pas exactement 5000 parce que l'affectation est probabiliste, mais il ne devrait pas être un problème dans des échantillons de grande taille grâce à la loi des grands nombres.
Voir aussi: http://blog.richardweiss.org/2016/12/25/hash-splits.html
et https://crypto.stackexchange.com/questions/20742/statistical-properties-of-hash-functions-when-calculating-modulo
Nous pouvons diviser les données d'un rapport ici, il est de 80% train et à 20% dans un ensemble de données de test.
Il y a un moyen très simple de sélectionner un certain nombre de lignes à l'aide de la R index pour les lignes et les colonnes. Cela vous permet d'PROPREMENT diviser l'ensemble de données d'un certain nombre de lignes à - dire le 1er 80% de vos données.
Dans la R de toutes les lignes et les colonnes sont indexées donc DataSetName[1,1] est la valeur attribuée à la première colonne et la première ligne de "DataSetName". Je peux sélectionner les lignes à l'aide de [x] et de colonnes à l'aide de [x]
Par exemple: Si j'ai un ensemble de données, idéalement nommé "data" avec 100 lignes, je peux afficher le premier 80 lignes à l'aide de
De la même façon, je peux sélectionner les lignes et sous-ensemble d'entre eux en utilisant:
Maintenant, j'ai mes données divisé en deux parties, sans que la possibilité de rééchantillonnage. Rapide et facile.