Acabei de começar a usar o R e não sei como incorporar meu conjunto de dados com o seguinte código de exemplo:
sample(x, size, replace = FALSE, prob = NULL)
Eu tenho um conjunto de dados que preciso colocar em um conjunto de treinamento (75%) e teste (25%). Não tenho certeza de quais informações devo colocar no tamanho x? X é o arquivo do conjunto de dados e tamanho quantas amostras tenho?
x
pode ser o índice (linha / coluna, digamos) do seudata
.size
pode ser0.75*nrow(data)
. Tentesample(1:10, 4, replace = FALSE, prob = NULL)
ver o que faz.Respostas:
Existem inúmeras abordagens para obter o particionamento de dados. Para uma abordagem mais completa, dê uma olhada na
createDataPartition
função nocaTools
pacote.Aqui está um exemplo simples:
fonte
mtcars[!train_ind]
e, embora não tenha falhado, não funcionou como esperado. Como eu poderia definir um subconjunto usando o!
?!
são usados paraTRUE/FALSE
índices lógicos ( ) e não. Se você deseja usar um subconjunto!
, tente algo como mtcars [!seq_len(nrow(mtcars)) %in% train_ind
,] (não testado).createDataPartition
dentrocaret
e nãocaTools
?Isso pode ser feito facilmente por:
Usando o pacote caTools :
fonte
sample = sample.split(data[,1], SplitRatio = .75)
Deve remover a necessidade de nomear uma coluna.Eu usaria
dplyr
para isso, torna super simples. Requer uma variável de ID no seu conjunto de dados, o que é uma boa ideia, não apenas para a criação de conjuntos, mas também para a rastreabilidade durante o seu projeto. Adicione-o se ainda não o contiver.fonte
É quase o mesmo código, mas com uma aparência mais agradável
fonte
fonte
Vou dividir 'a' no trem (70%) e testar (30%)
feito
fonte
Minha solução é basicamente a mesma que a de dickoa, mas um pouco mais fácil de interpretar:
fonte
Apenas uma maneira mais breve e simples usando a incrível biblioteca dplyr :
fonte
Default[-train_index,]
para a última linha.Se você digitar:
Se abrirá um menu de ajuda para explicar o que significam os parâmetros da função de amostra.
Eu não sou um especialista, mas aqui está um código que tenho:
Isso lhe dará 75% de treinamento e 25% de teste.
fonte
Depois de examinar todos os diferentes métodos publicados aqui, não vi ninguém utilizar
TRUE/FALSE
para selecionar e desmarcar dados. Então, pensei em compartilhar um método utilizando essa técnica.Explicação
Existem várias maneiras de selecionar dados de R, geralmente as pessoas usam índices positivos / negativos para selecionar / desmarcar respectivamente. No entanto, as mesmas funcionalidades podem ser alcançadas usando
TRUE/FALSE
para selecionar / desmarcar.Considere o seguinte exemplo.
fonte
Minha solução embaralha as linhas e pega os primeiros 75% das linhas como trem e os últimos 25% como teste. Super simples!
fonte
Eu posso sugerir o uso do pacote rsample:
fonte
scorecard
pacote tem uma função útil para isso, onde você pode especificar a proporção e a sementeOs dados de teste e trem são armazenados em uma lista e podem ser acessados chamando
dt_list$train
edt_list$test
fonte
Abaixo de uma função que cria uma
list
subamostra do mesmo tamanho que não é exatamente o que você deseja, mas pode ser útil para outras pessoas. No meu caso, para criar várias árvores de classificação em amostras menores para testar o overfitting:Exemplo:
fonte
O uso do pacote caTools no código de exemplo R será o seguinte: -
fonte
Use a base R. A função
runif
gera valores uniformemente distribuídos de 0 a 1. Por variando o valor de corte (train.size no exemplo abaixo), você sempre terá aproximadamente a mesma porcentagem de registros aleatórios abaixo do valor de corte.fonte
Supondo que df seja seu quadro de dados e que você queira criar 75% de treinamento e 25% de teste
Em seguida, crie um trem e teste os quadros de dados
fonte
A
sample.split()
função adicionará uma coluna extra 'split1' ao quadro de dados e 2/3 das linhas terão esse valor como TRUE e outros como FALSE. Agora, as linhas em que split1 é TRUE serão copiadas no trem e outras linhas serão copiadas para teste. quadro de dados.fonte
Encontrei este aqui, também pode ajudar.
fonte
Podemos dividir os dados em uma proporção específica, pois são 80% de trem e 20% em um conjunto de dados de teste.
fonte
Cuidado
sample
para dividir se você procura resultados reproduzíveis. Se seus dados mudarem um pouco, a divisão variará mesmo que você useset.seed
. Por exemplo, imagine que a lista ordenada de IDs em seus dados seja todos os números entre 1 e 10. Se você acabou de fazer uma observação, digamos 4, a amostragem por local produziria resultados diferentes, porque agora 5 a 10 todos os locais foram movidos.Um método alternativo é usar uma função hash para mapear IDs em alguns números pseudo-aleatórios e, em seguida, fazer uma amostra no mod desses números. Essa amostra é mais estável porque a atribuição agora é determinada pelo hash de cada observação e não por sua posição relativa.
Por exemplo:
[1] 9999
[1] 5000
[1] 2653
[1] 5057
[1] 5057
O tamanho da amostra não é exatamente 5000, porque a atribuição é probabilística, mas não deve ser um problema em amostras grandes, graças à lei de grandes números.
Consulte também: http://blog.richardweiss.org/2016/12/25/hash-splits.html e /crypto/20742/statistical-properties-of-hash-functions-when -calculating-module
fonte
fonte
Existe uma maneira muito simples de selecionar um número de linhas usando o índice R para linhas e colunas. Isso permite que você divida LIMPEZA o conjunto de dados, com um número de linhas - digamos, o primeiro 80% dos seus dados.
Em R, todas as linhas e colunas são indexadas para que DataSetName [1,1] seja o valor atribuído à primeira coluna e à primeira linha de "DataSetName". Posso selecionar linhas usando [x,] e colunas usando [, x]
Por exemplo: Se eu tiver um conjunto de dados convenientemente chamado de "dados" com 100 linhas, posso visualizar as primeiras 80 linhas usando
Da mesma maneira, posso selecionar essas linhas e subconjuntá-las usando:
Agora, meus dados estão divididos em duas partes, sem a possibilidade de reamostragem. Rápido e fácil.
fonte