Como comparar estatisticamente dois algoritmos em três conjuntos de dados na seleção e classificação de recursos?


8

Antecedentes do problema: Como parte da minha pesquisa, escrevi dois algoritmos que podem selecionar um conjunto de recursos de um conjunto de dados (dados de expressão gênica de pacientes com câncer). Esses recursos são então testados para ver quão bem eles podem classificar uma amostra invisível como câncer ou não-câncer. Para cada execução do algoritmo, uma solução (um conjunto de recursos) é gerada e testada em Z amostras não vistas. Precisão percentual da solução é calculada assim: (correct classifications / Z) * 100.

Eu tenho dois algoritmos: algoritmo X e algoritmo Y

Eu tenho três conjuntos de dados separados (cânceres diferentes): conjunto de dados A, conjunto de dados B e conjunto de dados C. Esses conjuntos de dados são muito diferentes entre si. Eles não têm o mesmo número de amostras ou o mesmo número de medidas (recursos) por amostra.

Eu executei cada algoritmo 10 vezes em cada conjunto de dados. Portanto, o algoritmo X possui 10 resultados do conjunto de dados A, 10 do conjunto de dados B e 10 do conjunto de dados C. No geral, o algoritmo X possui 30 resultados.

Meu problema: gostaria de ver se o desempenho combinado do algoritmo X em todos os três conjuntos de dados é estatisticamente significativamente diferente do desempenho combinado do algoritmo Y.

É possível combinar resultados do algoritmo X de cada conjunto de dados em um único conjunto de resultados? Dessa forma, eu teria 30 resultados padronizados para o algoritmo X e 30 resultados padronizados para o algoritmo Y. Em seguida, posso usar o teste t para verificar se há uma diferença significativa entre os dois métodos.

Editar - Estes são algoritmos evolutivos, portanto, eles retornam uma solução ligeiramente diferente cada vez que são executados. No entanto, se houver um recurso em uma amostra que, quando presente, puder classificá-lo fortemente como sendo câncer ou não-câncer, esse recurso será selecionado quase sempre que o algoritmo for executado.

Recebo resultados ligeiramente diferentes para cada uma das 10 execuções devido aos seguintes motivos:

  • Esses algoritmos são semeados aleatoriamente.
  • Eu uso a validação aleatória de subamostragem repetida (10 repetições).
  • Os conjuntos de dados que eu uso (microarray de DNA e Proteomics) são muito difíceis de trabalhar, no sentido de que existem muitas ótimas locais nas quais o algoritmo pode ficar preso.
  • Há muitas interações entre recursos e entre subconjuntos que eu gostaria de detectar.
  • Treino 50 cromossomos e eles não se restringem a um determinado comprimento. Eles são livres para crescer e encolher (embora a pressão de seleção os guie em comprimentos mais curtos). Isso também introduz alguma variação no resultado final.

Dito isto, o algoritmo quase sempre seleciona um subconjunto específico de recursos!

Aqui está uma amostra dos meus resultados (apenas quatro em cada dez são mostradas aqui):

Conjunto de dados / executar o algoritmo X Algoritmo Y
A 1 90,91 90,91
A 2 90,91 95,45
A 3 90,91 90,91
A 4 90,91 90,91

B 1 100 100
B 2 100 100
B 3 95,65 100
B 4 95,65 86,96

C 1 90,32 87,10
C 2 70,97 80,65
C 3 96,77 83,87
C 4 80,65 83,87

Como você pode ver, reuni resultados para dois algoritmos de três conjuntos de dados. Posso fazer o teste de Kruskal-Wallis com esses dados, mas será válido? Eu pergunto isso porque:

  • Não tenho certeza se as precisões em diferentes conjuntos de dados são comensuráveis. Se não estiverem, reuni-los como eu fiz não teria sentido e qualquer teste estatístico feito neles também não teria sentido.
  • Quando você reúne precisão assim, o resultado geral é suscetível a discrepâncias. O excelente desempenho de um algoritmo em um conjunto de dados pode mascarar seu desempenho médio em outro conjunto de dados.

Também não posso usar o teste t neste caso, porque:

  • Comensurabilidade - o teste t só faz sentido quando as diferenças nos conjuntos de dados são proporcionais.
  • O teste t requer que as diferenças entre os dois algoritmos comparados sejam distribuídas normalmente, não há como garantir (pelo menos que eu saiba) essa condição no meu caso.
  • O teste t é afetado por valores discrepantes que distorcem as estatísticas do teste e diminuem o poder do teste aumentando o erro padrão estimado.

O que você acha? Como posso fazer uma comparação entre o algoritmo X & Y neste caso?


Seus algoritmos envolvem algum tipo de aleatoriedade ou por que mais você os executa 10 vezes cada em cada conjunto de dados?
Stephan Kolassa

Sim! Eles são algoritmos evolutivos (algoritmos estocásticos). Então, cada vez que produzem um resultado diferente. No entanto, se houver características fortes (genes / valor único de uma amostra), elas serão selecionadas com mais frequência. O objetivo do algoritmo é selecionar os genes que estão fortemente correlacionados a uma classe específica (por exemplo, câncer de ovário), para que possam ser utilizados no diagnóstico / previsão precoce de câncer no futuro.
revolusions

Respostas:


8

A menos que seus algoritmos tenham grandes diferenças de desempenho e você tenha um grande número de casos de teste, não será possível detectar diferenças apenas olhando para o desempenho.

No entanto, você pode fazer uso de design apaired:

  • executar todos os três algoritmos exatamente na mesma divisão de trem / teste de um conjunto de dados e
  • não agregue os resultados do teste em% correto, mas mantenha-os no nível do caso de teste único como corretos ou errados.

Para a comparação, dê uma olhada no teste de McNemar . A idéia por trás da exploração de um design emparelhado aqui é que todos os casos em que ambos os algoritmos estavam certos e aqueles que estavam errados não ajudam a distinguir os algoritmos. Mas se um algoritmo é melhor que o outro, deve haver muitos casos em que o melhor algoritmo acertou, mas não o pior, e poucos que foram previstos corretamente pelo método pior, mas errados pelo melhor.

Além disso, Cawley e Talbot: Sobre o ajuste excessivo na seleção de modelos e o viés de seleção subsequente na avaliação de desempenho, JMLR, 2010, 1, 2079-2107. é altamente relevante.

Devido aos aspectos aleatórios dos seus algoritmos, você também desejará verificar a mesma divisão do mesmo conjunto de dados várias vezes. A partir disso, é possível estimar a variação entre diferentes execuções que são iguais. Pode ser difícil julgar quão diferentes são os conjuntos de variáveis ​​selecionados. Mas se seu objetivo final for o desempenho preditivo, você também poderá usar a variação entre as previsões do mesmo caso de teste durante diferentes execuções para medir a estabilidade dos modelos resultantes.

Você também desejará verificar (como indicado acima) a variação devido a diferentes divisões do conjunto de dados e colocá-lo em relação à primeira variação.

Geralmente, supõe-se que frações (como% de amostras reconhecidas corretamente) sejam distribuídas binomialmente , em certos casos é possível uma aproximação normal, mas as letras pequenas para isso quase nunca são encontradas em campos com amplas matrizes de dados. Isso tem como consequência que os intervalos de confiança são enormes para um pequeno número de casos de teste. Em R, binom::binom.confintcalcula os intervalos de confiança para a proporção verdadeira dada não. de testes e não. de sucessos.

Finalmente, minha experiência com otimização genética para dados espectroscópicos (minha tese Diplom em alemão) sugere que você verifique também os erros de treinamento. Os GAs tendem a se ajustar muito rapidamente, chegando a erros de treinamento muito baixos. Baixos erros de treinamento não são apenas super otimistas, mas também têm a conseqüência de que o GA não pode diferenciar muitos modelos que parecem igualmente perfeitos. (Você pode ter menos problemas com isso se o GA internamente também subamostra aleatoriamente treinar e conjuntos de testes internos).

Artigos em inglês:


Obrigado por uma excelente análise! Vou experimentar um design emparelhado. Você está no local sobre excesso de montagem. A próxima fase da minha pesquisa se concentrará em evitar o excesso de ajuste durante o treinamento. Isso é realmente importante, pois meu objetivo final é produzir um algoritmo totalmente automatizado para que os oncologistas possam usar para o diagnóstico precoce de cânceres. Estou realmente interessado em ler o seu artigo, mas receio não saber ler alemão. Informe-me se houver uma versão em inglês. Obrigado novamente por sua contribuição detalhada.
revolusions

@revolusions: A informação está um pouco espalhada por alguns jornais. Mas adicionei uma lista com 2 sobre a seleção de variáveis ​​do GA e uma sobre incerteza na medição das taxas de erro de classificação. Se você tiver dúvidas (ou não tiver acesso aos documentos), envie-me um e-mail.
cbeleites infeliz com SX

Obrigado! Consegui fazer o download do último artigo, mas não consigo obter os dois primeiros. Amanhã tentarei no meu computador da universidade e avisarei se conseguir fazer o download deles.
revolusions

1

Você está executando a seleção de featuer com o GA 10 vezes e toda vez que obtém uma saída diferente !!

Primeiro, se você começar pela mesma semente, sempre deverá obter o mesmo subconjunto de artistas selecionados. No entanto, se você estiver usando uma semente aleatória, provavelmente também deverá obter quase os mesmos recursos selecionados. Um motivo para obter o mesmo artista selecionado é indicado em sua postagem. Além disso, para uma comparação justa, você pode usar as mesmas sementes nas séries de A para os experimentos de B.

Segundo, você pode usar a validação cruzada ou a inicialização para comparação. Dessa forma, você obtém uma comparação mais representativa. Nesse caso, existe uma fonte de variação, ou seja, amostras de treinamento aleatório que parecem mais fortes que as sementes aleatórias. Assim, a comparação pode revelar qual o algorthim é realmente melhor.

Finalmente, você pode usar o teste t conforme proposto ou usar diretamente alguns testes não paramétricos como o teste de Kruskal-Wallis.


Muito obrigado pela sua resposta! Gostaria de esclarecer algumas coisas e, talvez, obter sua opinião mais uma vez, pois ainda estou confuso sobre a comparação, espero que você possa ajudar! Você disse: <blockquote> Além disso, para uma comparação justa, você pode usar as mesmas sementes nas execuções de A para os experimentos de B </blockquote> Esse é um ponto muito bom, obrigado. Editei minha pergunta para abordar os pontos que você levantou. Vai ser ótimo se você puder dar uma olhada e me informar o que pensa.
revolusions

Você pode fazer uma comparação separada entre classificadores para cada conjunto de dados. Inicialmente, verifique a média e o desvio padrão. Se para todos os conjuntos de dados, um classificador é superior ao outro. Então, terminamos. Caso contrário, você pode usar uma ideia de "conjunto". Verifique a nova amostra, se ela pertence ao conjunto de dados A, use o melhor classificador e assim por diante. No entanto, pode haver algum teste estatístico com base na exibição emparelhada que eu não conheço neste caso.
soufanom 07/02

Obrigado novamente por sua contribuição. Eu fiz o que você sugeriu e não há um vencedor claro. Por isso, decidi juntar tudo e ver se haveria um vencedor. Essa ideia de "conjunto" parece interessante. Existe algum lugar onde eu possa ler mais sobre isso? Obrigado pela ajuda.
revolusions

Mais uma coisa, considere comparar sensibilidade e especificidade. Para a fonte conjunto, verificar o livro fixo no meu posto stats.stackexchange.com/questions/47075/...
soufanom
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.