Qual é a maneira mais apropriada de criar um conjunto de espera: remover alguns assuntos ou remover algumas observações de cada assunto?

11

Eu tenho um conjunto de dados com 26 recursos e 31000 linhas. É o conjunto de dados de 38 indivíduos. É para um sistema biométrico. Então, eu quero ser capaz de identificar assuntos.

Para ter um conjunto de testes, eu sei que tenho que remover alguns valores.

Então, o que é melhor fazer e por quê?

  1. (a) mantenha 30 sujeitos como conjunto de treinamento e remova 8 sujeitos como conjunto de testes

  2. (b) mantenha os 38 sujeitos, mas remova algumas linhas de cada um. Então, no final, terminarei com um conjunto de treinamento: 24800 linhas de 38 indivíduos E um conjunto de testes: 6200 linhas de 38 indivíduos

Aizzaac
fonte
1
Se você deseja identificar assuntos, como é possível remover assuntos "inteiros" para um conjunto de testes? O modelo treinado em 30 sujeitos somente será capaz de identificar esses 30 indivíduos, não os 8 sujeitos que nunca viu. Seu esclarecimento sobre "sistema biométrico" pode tornar a maioria das respostas existentes não aplicáveis.
Ameba diz Reinstate Monica
1
Seria útil esclarecer: (1) o objetivo preciso , qual é a variável de resultado que você está tentando prever (2) quais dados você possui e possivelmente (3) qual abordagem você usa.
Matthew Gunn
Depois de treinar o sistema, como ele seria implantado? O objetivo é usá-lo em pessoas que não estão no conjunto de treinamento? Os novos dados serão dos mesmos 38 indivíduos? Estou tentando entender como o sistema deve ser usado e se você está no caso (1) ou no caso (2) da resposta do @ AmiTavory.
Matthew Gunn
@amoeba Não tenho muita experiência :( Fiz a pergunta porque é recomendável dividir dados (treinamento, validação e teste). Portanto, é para remover alguns assuntos ou algumas observações de cada um OU usar um conjunto de dados disponível on-line. 1) Eu quero ser capaz de identificar assuntos. A quem os recursos pertencem. 2) Estou usando EEG (para séries temporais). 3) Estou usando dobra estratificada. Mas é porque eu tenho uma precisão mais alta do que com o kfold. Eu só conhecia o k-fold, estratificado e deixado de fora. Como sempre pensei, era para compensar o desequilíbrio nos dados. Mas estou aberto a sugestões.
Aizzaac
@MatthewGunn Acho que não seria possível usá-lo com pessoas que não estão no conjunto de dados. Isso seria muito difícil, mas muito interessante se conseguido. Então, eu diria que o caso 1.
Aizzaac 14/10

Respostas:

9

Acho que a resposta de Matthew Gunn está correta, mas parece-me que o currículo "em termos de registro" pode abranger dois conceitos diferentes:

  1. Os registros são particionados aleatoriamente em dobras, independentemente do assunto ou da hora.

  2. Os registros são particionados em dobras com base no tempo, sem dobras usadas para treinamento que contém dados após o início da dobra de teste.

No primeiro caso, qualquer natureza de série temporal de seus dados está sendo comprometida, pois seu conjunto de treinamento pode incluir dados de antes e depois do seu conjunto de testes. O princípio do Treino / Teste é que os dados do Treinamento representam dados conhecidos no presente e os dados do Teste representam dados ainda não vistos (talvez literalmente no futuro).

Talvez a autocorrelação de séries temporais comprometa a opção 2. Talvez o elemento temporal do modelo não seja realmente importante e, portanto, as observações "passadas" e "futuras" provavelmente serão as mesmas. Nesses casos, nem o nº 1 nem o nº 2 são o caminho a percorrer.

Se houver apenas sazonalidade e não tendências, parece aceitável incluir "o futuro" no treinamento de alguns sujeitos, a fim de prever novos sujeitos (que serão afetados pela mesma sazonalidade). Se houver tendências, o treinamento sobre o futuro deve aprender algo sobre o futuro que você realmente não saberia ao usar o modelo na produção.

No exemplo do OP, parece que o assunto é bom. Mas se as tendências e as preocupações com séries temporais fizerem parte do modelo, eu tentaria usar o particionamento por assunto e por tempo para que você treinasse um conjunto de assuntos antes de um ponto específico no tempo e depois testasse os outros assuntos depois naquele momento específico.

Wayne
fonte
1
tt
1
Eu diria que o aplicativo decide qual é a divisão apropriada. Por exemplo, mesmo com séries temporais, pode ser a tarefa predizer a variável dependente para medições posteriores de assuntos desconhecidos, o que significaria que a divisão deve ser feita tanto em termos de assuntos quanto de tempo.
cbeleites descontente com SX 14/10
3
@ cbeleites: Concordo. Foi o que fiz em um projeto recente: divida os dados em assuntos de treinamento e teste e use apenas dados anteriores a alguma data para treinamento e dados após essa data para teste, portanto estávamos testando assuntos que nunca visto, durante um período de tempo que ainda não tínhamos visto. Você deseja empilhar o baralho contra você - sem exagerar - se quiser realmente saber o desempenho do seu modelo na prática.
Wayne
16

Uma distinção crítica é se você deseja:

  1. [Caso mais comum]: construa uma estimativa de desempenho em novos assuntos (extraídos da mesma população que seus dados).
  2. Construa uma estimativa de desempenho em novas observações dos mesmos assuntos da sua amostra.

O caso muito mais comum é o número do caso (1). Por exemplo, quão bem você prevê ataques cardíacos para alguém que entra na sala de emergência? E se você estiver no caso (1), certamente deve fazer (a) validação cruzada por assunto em vez de (b) validação cruzada por registro. A validação em nível de registro no caso (1) provavelmente levará a estimativas absurdamente altas e falsas de desempenho em novos assuntos.

Não entendo exatamente o que você está tentando fazer (e talvez seja um auto-estudo, para que a pergunta não seja totalmente realista). Não sei em que caso você está. Se você estiver no caso muito menos comum (2), a validação sábia dos registros pode estar ok.

Um tema geral nas estatísticas é pensar cuidadosamente sobre o que é independente e o que está correlacionado. De um modo geral, uma observação independente tende a ser um assunto diferente. Se você deseja prever o desempenho de novos assuntos, deve testar os assuntos em que não treinou!

Por que validação cruzada por assunto e não por registro?

Em cenários típicos, observações repetidas do mesmo indivíduo são correlacionadas entre si, mesmo após o condicionamento dos recursos. Portanto, com a validação cruzada em registros, o seu conjunto de testes não é independente do seu conjunto de treinamento! No caso extremo de correlação perfeita, você teria exatamente as mesmas observações no conjunto de treinamento e no conjunto de testes! Você estaria treinando no set de teste! O desempenho medido na validação cruzada não seria preditivo de desempenho em novos assuntos.

Por exemplo, este artigo recente chama a validação cruzada em registros, `` Voodoo Machine Learning ".

O que fazer com tão poucos assuntos ...

k=n

Para maximizar os dados para o treinamento, algo que você pode fazer é deixar de fora um assunto para validação cruzada. Cada iteração, teste em um assunto diferente e treine em todos os outros.

n=38

Matthew Gunn
fonte
Eu sei que o conjunto de dados deve ser dividido em 3: treinamento, validação e teste. Na validação cruzada, "treinamento e validação" são usados. O conjunto de espera é o "teste". Você está sugerindo: para treinamento e validação, use 37 sujeitos e teste em 1 sujeito? E que eu posso fazer qualquer tipo de validação cruzada: dobra em k, estratificada, etc?
Aizzaac
1
A OP fez uma edição dizendo que "é para um sistema biométrico. Então, eu quero poder identificar assuntos". Se eu entendi corretamente o que isso significa, isso implica que apenas o CV em registro faz sentido, porque o objetivo é prever a identificação do sujeito com base em uma amostra.
Ameba diz Reinstate Monica
@amoeba Somente se novos dados vierem dos mesmos 38 indivíduos. Por exemplo. se o sistema disser se as impressões digitais correspondem ou não, e será implantado na porta da frente da minha casa (ou seja, deve-se identificar estranhos como estranhos), o treinamento e o teste dos mesmos assuntos seriam problemáticos (você gostaria de saber com que frequência concede entrada a pessoas que nunca viu antes, nunca treinou). Concordo que embora "É por um sistema biométrico" levanta questões ...
Matthew Gunn
3

Realmente depende de como você visualiza a configuração que deseja emular com a divisão de trem / teste. Para tornar as coisas concretas, digamos que cada linha descreva a qualidade do sono de um sujeito em uma única noite.

  1. É possível que, no futuro, cada sujeito chegue primeiro a um laboratório do sono e forneça a qualidade do sono por algumas noites. Depois disso, você precisará prever a qualidade do sono das noites futuras para esses assuntos . Nesse caso, você usaria sua opção b). Em sklearn, você poderia usarsklearn.model_selection.StratifiedShuffleSplit

  2. É possível que, no futuro, algumas pessoas cheguem primeiro a um laboratório do sono e forneçam a qualidade do sono por algumas noites. Depois disso, você precisará prever a qualidade do sono de futuras noites para outros assuntos . Nesse caso, você usaria sua opção a). Em sklearn, você poderia usarsklearn.cross_validation.LeavePLabelOut

Ami Tavory
fonte
1
Realisticamente, a questão é quase certamente o seu caso (2) e a opção (a), ou seja, a validação cruzada em termos de assuntos, é o que é apropriado.
Matthew Gunn
1
@MatthewGunn Você está certo. O caso 2 é muito mais comum. Devo dizer que me deparei com casos da vida real em que eu era a escolha certa.
Ami Tavory
1
Interessante. Eu pude ver (1) a razão de prever novas observações para uma grande base de clientes estabelecida. Ponto tomado. Talvez eu esteja reagindo tão fortemente porque li recentemente este artigo sobre o uso indevido generalizado da validação cruzada em registros na área médica.
Matthew Gunn
O que você acha disso: eu uso os 38 indivíduos com qualquer tipo de validação cruzada; e para testar se meu modelo pode ser usado com assuntos diferentes; Eu uso um conjunto de dados online? Eu acho que a idéia de um conjunto estendido é ter um "novo" conjunto de dados para testar o modelo.
Aizzaac
3

Para enfatizar, presumo que o aplicativo seja prever assuntos desconhecidos. Isso significa (independentemente de você ter séries temporais ou medições repetidas inerentemente não ordenadas) que a divisão precisa ser feita para que indivíduos desconhecidos sejam testados => divisão a)

Considerando que você tem apenas 38 assuntos, você deve pensar um pouco na validação de reamostragem. Da minha experiência trabalhando com tamanhos de amostra igualmente pequenos (embora com mais recursos), aqui estão algumas recomendações em poucas palavras:

  • Opte por validação cruzada iterada ou fora do bootstrap no assunto. Eles permitem avaliar a estabilidade de seus modelos, o que é crucial em problemas de tamanho de amostra pequeno. Os resultados podem até ser usados ​​para um modelo agregado, caso a instabilidade seja um problema.

  • Você não deixe-um-sujeito fora. Ele não permite medir a estabilidade do modelo, nem reduzi-la. Além disso, há situações em que ele está sujeito a um grande viés pessimista devido ao pequeno tamanho da amostra (em oposição ao viés pessimista mínimo esperado).

  • Se você estiver usando os valores típicos de mérito da classificação, como precisão, sensibilidade, especificidade etc., e a tarefa é classificar corretamente os assuntos: lembre-se de que o problema crucial é medir o desempenho, porque a incerteza dos resultados do teste depende do número absoluto de casos de teste. Como exemplo, a observação de 17 previsões corretas em 17 indivíduos verdadeiramente positivos corresponde a um intervalo de confiança de 95% para a sensibilidade que varia de cerca de 80% a 100%.
    Em outras palavras, você não poderá fazer a otimização do modelo orientado a dados com base nisso.

  • Isso também significa que você não precisa configurar uma divisão de três conjuntos (validação cruzada aninhada), porque você desperdiçaria recursos em comparações estatisticamente sem sentido aqui - é quase garantido que sua otimização falhará (embora você não note isso se você não verifique a estabilidade).

  • O mesmo cálculo para o intervalo de confiança binomial para os 5 (3) sujeitos de teste / otimização / validação propostos rende 95% ci para todos os valores corretos de até 50% (30%), portanto, com base nos resultados perfeitos do teste, seu intervalo de confiança ainda incluiria 50 / 50 adivinhar!

Alguns trabalhos que escrevemos sobre esses assuntos:

cbeleites descontentes com o SX
fonte