Como dividir aleatoriamente uma matriz de dados e o vetor de rótulo correspondente em um X_train, X_test, X_val, y_train, y_test, y_val com o Sklearn? Tanto quanto eu sei, sklearn.cross_validation.train_test_split
só é capaz de se dividir em dois, não em três ...
machine-learning
scikit-learn
Hendrik
fonte
fonte
train_test_split
, você está fazendo isso na divisão 80/20 anterior. Portanto, seu valor é 20% de 80%. As proporções divididas não são muito diretas dessa maneira.Há uma ótima resposta para essa pergunta no SO que usa numpy e pandas.
O comando (veja a resposta para a discussão):
produz uma divisão de 60%, 20%, 20% para os conjuntos de treinamento, validação e teste.
fonte
.6
significado 60% ... mas o que.8
significa?np.split
se dividirá em 60% do comprimento da matriz aleatória e, em seguida, 80% do comprimento (que é um 20% adicional de dados), deixando assim 20% dos dados restantes. Isto é devido à definição da função. Você pode testar / jogar comx = np.arange(10.0)
np.split(x, [ int(len(x)*0.6), int(len(x)*0.8)])
Na maioria das vezes, você não os dividirá uma vez, mas em um primeiro passo você dividirá seus dados em um conjunto de treinamento e teste. Posteriormente, você realizará uma pesquisa de parâmetros incorporando splings mais complexos, como validação cruzada com o algoritmo 'split k-fold' ou 'leave-one-out (LOO)'.
fonte
Você pode usar
train_test_split
duas vezes. Eu acho que isso é mais direto.Desta forma,
train
,val
,test
conjunto será de 60%, 20%, 20% do conjunto de dados, respectivamente.fonte
A melhor resposta acima não menciona que, ao separar duas vezes,
train_test_split
sem alterar os tamanhos das partições, você não fornecerá a partição inicialmente pretendida:Em seguida, a parte dos conjuntos de validação e teste no x_remain muda e pode ser contada como
Nesta ocasião, todas as partições iniciais são salvas.
fonte
Aqui está outra abordagem (assume igual divisão de três vias):
Isso pode ser mais conciso, mas eu o mantive detalhado para fins de explicação.
fonte
Dada
train_frac=0.8
, essa função cria uma divisão de 80% / 10% / 10%:fonte
Adicionando à resposta de @ hh32 , respeitando as proporções predefinidas, como (75, 15, 10):
fonte
Extensão da resposta do @ hh32 com proporções preservadas.
Como o conjunto de dados restante é reduzido após a primeira divisão, novas proporções com relação ao conjunto de dados reduzido devem ser calculadas resolvendo a equação:
fonte