1
resposta

StratifiedShuffleSplit vs train_test_split com stratify

Boa noite galera,

Estou iniciando agora nos cursos de Machine Learning (literalmente hoje rs), e estou com dúvida na diferença entre as duas separações mencionadas no título.

No curso de introdução a classificação com SKLearn o instrutor fez o uso do model.train_test_split(x, y, stratify= y) e pelo que entendi da explicação dele o parâmetro stratify seria para dividir com a mesma proporção de resultado as entradas de treino e teste

Assim, qual a diferença no uso do validador = StratifiedShuffleSplit(n_splits=1, test_size=0.1,random_state=0) mostrado nesse curso para o anterior?

1 resposta

Segundo a documentação os dois têm ideias parecidas, dividir os dados, porém utilizações diferentes.

O train_test_split é utilizado de forma ”mais simples” para dividir os dados em dois grupos, um para ser usado como treino e outro como validação, sendo essa que essa separação pode ou não ser estratificada, ou seja, dividida proporcionalmente. Ele é mais utilizado em momentos iniciais, quando queremos ter uma noção inicial do modelo.

Já o StratifiedShuffleSplit é utilizado quando estamos aplicando o cross-validation, ou validação cruzada, que seria uma etapa mais avançada de validação do modelo, onde em vez de separar o conjunto de dados apenas em um conjunto de treino e teste, os dados são separados em vários grupos menores, onde serão feitas várias rodadas de treino e teste variando esses grupos entre os dados de treino e de teste.

Exemplificando, vamos supor que utilize o StratifiedShuffleSplit em um conjunto de dados, ele vai separar os dados em 3 grupos, por exemplo, A,B,e C, mantendo entre eles a ideia de estratificação. Serão feitas N rodadas de treino e teste, onde uma hora os dados de treino serão os grupos A e B e o de teste será o C. E assim vai alternando. O cross-validation é uma técnica que ajuda a diminuir o overfitting e a perda de informações importantes ao se separar os dados em treino e teste, onde algum relacionamento importante tenha ficado apenas no grupo de teste.

Em resumo, a diferença mesmo entre as duas técnicas , aqui apenas uma conclusão minha, é que o StratifiedShuffleSplit aplica N vezes o train_test_split. Se n_splits = 1 então basicamente terão o mesmo resultado, desde que o random_state seja o mesmo.

links da documentação: https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedShuffleSplit.html

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software