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?
fonte
Respostas:
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:
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.confint
calcula 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:
orientado para a aplicação, mostra como interpretamos as variáveis selecionadas e que existem "alterações" conhecidas em seleções que são equivalentes por razões químicas.
Beleites e Salzer: Avaliando e melhorando a estabilidade de modelos quimiométricos em situações de pequeno tamanho de amostra, Anal Bioanal Chem, 2008, 390, 1261-1271.
discute intervalos de confiança binomial para taxa de acertos etc., por que não conseguimos calculá-la. Em vez disso, usamos a variação observada durante a validação cruzada repetida. A discussão sobre estimativa do palpite para o tamanho efetivo da amostra precisa ser tomada com cautela, hoje em dia eu diria que é algo entre enganoso e errado (acho que é a ciência que está se movendo :-)).
FIG. 11 mostra os resultados do teste independente (validação cruzada externa com separação por amostra) de 40 modelos diferentes para a mesma amostra. A estimativa interna correspondente do AG foi de 97,5% das previsões corretas (um modelo errou todos os espectros da amostra, os demais modelos estavam corretos para todos os espectros - não mostrados no artigo). Esse é o problema de sobreajuste que mencionei acima.
Neste artigo recente , Beleites, Neugebauer, Bocklitz, Krafft e Popp: Planejamento do tamanho da amostra para modelos de classificação, Anal Chem Acta, 2013, 760, 25 - 33. ilustramos os problemas com a estimativa do erro de classificação com poucos pacientes / amostras independentes. Também ilustra como estimar o número necessário de pacientes, se você não puder realizar testes emparelhados.
fonte
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.
fonte