O uso dos mesmos dados para seleção de recurso e validação cruzada é tendencioso ou não?


8

Temos um pequeno conjunto de dados (cerca de 250 amostras * 100 recursos) no qual queremos criar um classificador binário após selecionar o melhor subconjunto de recursos. Digamos que particionemos os dados em:

Treinamento, Validação e Teste

Para a seleção de recursos, aplicamos um modelo de wrapper com base na seleção de recursos que otimizam o desempenho dos classificadores X, Y e Z, separadamente. Nesta etapa de pré-processamento, usamos dados de treinamento para treinar os classificadores e dados de validação para avaliar cada subconjunto de recursos candidatos.

No final, queremos comparar os diferentes classificadores (X, Y e Z). Obviamente, podemos usar a parte de teste dos dados para uma comparação e avaliação justas. No entanto, no meu caso, os dados de teste seriam realmente pequenos (cerca de 10 a 20 amostras) e, portanto, desejo aplicar a validação cruzada para avaliar os modelos.

A distribuição dos exemplos positivos e negativos é altamente desequilibrada (cerca de 8: 2). Portanto, uma validação cruzada pode nos levar a avaliar o desempenho. Para superar isso, planejamos ter a parte de teste (10-20 amostras) como um segundo método de comparação e validar a validação cruzada.

Em resumo, estamos particionando dados em treinamento, validação e teste. As peças de treinamento e validação devem ser usadas para a seleção de recursos. Em seguida, a validação cruzada sobre os mesmos dados deve ser aplicada para estimar os modelos. Finalmente, o teste é usado para validar a validação cruzada, devido ao desequilíbrio dos dados.

A questão é: se usarmos os mesmos dados (treinamento + validação) usados ​​na seleção dos recursos que otimizam o desempenho dos classificadores X, Y e Z, podemos aplicar a validação cruzada sobre os mesmos dados (treinamento + validação) usados ​​na seleção de recursos medir o desempenho final e comparar os classificadores?

Não sei se essa configuração pode levar a uma medida de validação cruzada tendenciosa e resultar em comparação injustificada ou não.


4
Crossvalidated.com lida exatamente com esse tipo de perguntas. Sugiro que este Q seja movido para lá.
Roman Luštrik

Uma sugestão é aplicar a inicialização (apenas do treinamento + validação) nos dados em vez da validação cruzada. Isso resolveria o problema de viés indicado na pergunta? Ainda não tenho certeza !!
Soufanom 17/10/12

3
Sim, é tendencioso - pesquise Qs na tag de seleção de recursos deste site, especialmente neste , ou até na página da Wikipedia sobre CV .

1
Acordado. Você pode aplicar o design a conjuntos de dados simulados aleatoriamente e estimar a polarização existente. Mas eu recomendaria o LOOCV como uma resposta sugere.
Steve P

Respostas:


5

Eu acho que é tendencioso. Que tal aplicar o FS na partição N-1 e testar na última partição. e combine os recursos de todas as dobras de alguma maneira (união / interseção / ou alguma maneira específica do problema).


Deixar uma parte para teste foi explicada no post. Além disso, conforme a validação cruzada explicada é necessária para comparar os modelos. Portanto, não é possível aplicá-lo à seleção de recursos, a menos que utilizemos a idéia de validação cruzada aninhada. No entanto, o conjunto de dados é muito pequeno e é difícil aplicar a validação cruzada aninhada.
soufanom 17/10/12

6

A resposta simples é que você deve fazer a seleção de recursos em um conjunto de dados diferente do que você treina (você já está fazendo isso, então não mude isso) --- o efeito de não fazer isso é que você superestima seus dados de treinamento. Você também não deve fazer a seleção de recursos no seu conjunto de testes, pois isso aumentará as estimativas do desempenho de seus modelos (acho que você já percebeu isso também, mas achei um pouco difícil entender a pergunta com precisão).

Se você já dividiu seu conjunto de testes em treinamento, validação e teste, não há razão específica para fazer a validação cruzada, a menos que você tenha tão poucos dados que seu conjunto de testes seja pequeno demais para tirar conclusões fortes. Muitos pesquisadores não gostam da validação cruzada porque, se usados ​​para impulsionar o desenvolvimento de modelos (com o que eu quero dizer, você ajusta as coisas, executa a validação cruzada para ver como elas funcionam, depois as ajusta mais algumas etc.), você efetivamente tem acesso ao seu teste dados e isso pode levar você a superestimar seu desempenho em dados verdadeiramente invisíveis. Se seus dados são tão pequenos que você não tem escolha a não ser fazer a validação cruzada, a maneira correta de fazer isso com conjuntos de treinamento, desenvolvimento e teste é dividir explicitamente seus dados em três partes para cada dobra - a maioria deve ser usada para treinamento, alguns para desenvolvimento (seleção de recursos no seu caso, além de outros parâmetros livres que precisam de ajuste) e, finalmente, você deve testar na parte de teste. Em seguida, você pode obter a média das pontuações nessas partes de teste para obter uma estimativa do desempenho do modelo: no entanto, como eu disse, tenha cuidado para que, se essas pontuações forem usadas para guiá-lo para as abordagens que você deseja usar para o seu problema, não espere obter a mesma pontuação em dados invisíveis que você obteve da validação cruzada.


finally you should test on the test portion. You can then average scores across these test portions to get an estimate of model performance Para entender o desempenho de um classificador, ele deve ser usado em dados de teste que não foram vistos ou usados ​​antes. Da maneira como eu vejo, se você tomar alguma decisão com base no desempenho do algoritmo em alguns conjuntos de dados, esse conjunto de dados é de treinamento ou de validação cruzada, em nenhuma circunstância deve ser chamado de conjunto de dados de teste.
1026 Ivan

Observe que eu não disse que você deveria fazer a seleção de recursos nos dados de teste - para cada dobra, você cria partes de treinamento, desenvolvimento e teste. Você treina em seu treinamento, define parâmetros livres e faz a seleção de recursos em seu desenvolvimento e aplica modelos finais aprendidos aos dados de teste. Como discuti acima, essa prática não é ideal, mas você não está usando explicitamente os dados de teste para definir parâmetros (para cada dobra, os dados de teste ficam cegos até que os modelos sejam corrigidos, você apenas se desloca entre as dobras)

Acho que concordamos com a mesma coisa, só queria esclarecer a distinção entre dados de teste e C / V. A seleção de modelos é semelhante à seleção de parâmetros, portanto, é melhor que os dados de teste sejam deixados de lado e não sejam utilizados. Feito isso, você poderá relatar com segurança o desempenho esperado do modelo escolhido em qualquer novo dado invisível.
Ivan

1

Você tentou LOOCV? Eu acho que é possível treinar quando você tem muito menos dados de treinamento. Para responder à sua pergunta, isso não forneceria os melhores resultados simplesmente porque poderia se superestimar e fornecer resultados enganosos, de modo que o seu classificador não funcionaria muito bem em outros dados, que ele não viu.


LOOCV no final é apenas um tipo de validação cruzada. Precisamos de uma solução para o problema em que temos dados pequenos, queremos selecionar bons recursos e, finalmente, ter uma medida representativa para avaliar o desempenho.
soufanom 17/10/12

0

Você pode fazer o seguinte para comparar o desempenho dos classificadores

Leve seu conjunto de treinamento e treine-o em todos os conjuntos de recursos possíveis. Para cada conjunto de recursos, minimize os parâmetros e construa o modelo para que ele se encaixe bem no conjunto de treinamento. Agora, depois que os modelos forem criados para todos os conjuntos de recursos, ou seja, você tiver um modelo para cada conjunto de recursos, valide os modelos (criados em diferentes conjuntos de recursos) no conjunto de validação e selecione esse modelo (criado para um subconjunto específico de conjunto de recursos) ) que fornece o erro mínimo no conjunto de validação. Dessa forma, você garante que o modelo construído se encaixe bem, não apenas no conjunto de treinamento, mas também no conjunto de validação.

Agora, pegue esse modelo construído e teste-o no conjunto de testes. Isso mostrará o desempenho do classificador quando for executado em um conjunto de dados que não foi usado para treinamento nem para validação. Além disso, você selecionou o conjunto de recursos que se ajusta ao conjunto de treinamento e também ao conjunto de validação.


1
Para o modelo de wrapper da seleção de recursos, os conjuntos de dados de treinamento e validação devem ser suportados. No modelo de wrapper, estamos treinando e testando um classificador, considerando um subconjunto de recursos candidato. Portanto, dar apenas um conjunto de treinamento para esse modelo não é suficiente. A questão é: se os mesmos dados usados ​​para a seleção de recursos são usados ​​para comparação, mas usando CV, ainda estamos tendenciosos e em que grau?
soufanom 14/10/12

0

Se possível, é melhor reter alguns dados para validação cruzada adicional. Por exemplo, você pode usá-lo para validar seus algoritmos criando curvas de aprendizado. Essas curvas devem ser construídas no conjunto de dados que não foi usado antes.

Mesmo se você quiser simplesmente selecionar um algoritmo que ofereça a maior pontuação de F1, você precisará usar um conjunto extra de dados de validação cruzada para fazer isso. O conjunto de testes deve ser reservado para relatar a precisão final da sua solução (desempenho esperado do classificador escolhido em dados não vistos).


Sua resposta é declarada na minha pergunta como uma técnica que eu conheço. A questão é usar os mesmos dados para seleção de recursos e validação cruzada !!
soufanom 16/10/12

@soufanom Escrevi que você precisa de um conjunto extra de dados de validação cruzada para selecionar o classificador com melhor desempenho, caso contrário, seus resultados não serão confiáveis. Como você pode julgar o desempenho de um modelo executando-o em um conjunto de dados que foi usado para treinar o modelo ou selecionar parâmetros. IMHO, a única maneira confiável de julgar o desempenho de qualquer classificador é executá-lo em dados não vistos anteriormente. Espero que isso responda à sua pergunta; caso contrário, refine-o e adicione mais informações.
1026 Ivan

0

Pode ser extremamente grosseiro, consulte o capítulo de validação de modelo em "Elementos de aprendizagem estatística". Ele pode fazer a precisão da cv do modelo acima de 70%, enquanto a taxa de erro real de qualquer modelo deve ser de 50% (os recursos são independentes da classe )

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.