Metodologias para aprendizado de maquina
validação cruzada
todo teste estatístico assume que os dados de cada conjunto são independentes.
e se não forem -> o p-valor calculado pelo teste vai ser menor que o que deveria
2 algoritmos: teste McNemar https://pt.wikipedia.org/wiki/Teste_de_McNemar
3 ou mais algoritmos: teste Q de Cochran https://pt.wikipedia.org/wiki/Teste_Q
bem fraco - nunca vi sendo usado em artigos
por exemplo rode o 10-folds, calcule a acurácia de cada fold, e vc tem 10 números. (pareados)
e porque não um 30-fold? n é maior, menor o p-valor!!
mas há o problema de independência, quanto mais folds, “menos independentes” são os resultados entre si(?)
a “solução” aceita é 5x2 cv: 5 repetições de um 2-folds (1/2 para treino 1/2 para teste),
10 números pareados.
cada banco de dado resulta em 1 numero (obtido talvez com cv repetida mas isso não importa).
Wilcoxon pareado e o vencedor é o que tiver maior mediana
Friedman + post hoc
p=0.05 significa que eu estou aceitando uma taxa de falso positivo de 0,05 (eu vou estar errado 1/20 vezes cada vez que eu disse que a diferença é real).
se eu tenho 6 algoritmos, e fizer todas as comparações para a par, eu vou ter 15 comparações (6!/(4! 2!))
Cada comparação tem 0.95 probabilidade de estar certa.
Qual a probabilidade das 15 comparações estarem certas:
P(certa1 e certa2 .. e certa15)
se cada comparação é independente (e elas não são)
P(certa1)* P(certa2) … P(certa15)
0.95^{15} = 0.46329
Probabilidade de estar errada = probabilidade de algum falso positivo = 1-0.46329 = 0.53671
Se eu fizer as 15 comparações e usar p=0.05 em cada uma delas, no final eu tenho > 50% de ter algum falso positivo.
Eu preciso baixar o p-valor de cada comparação para que no final eu só tenha uma taxa de falso positivo de 0.05.
Numa aproximação, o valor que eu devo usar em cada comparação é de 0.05/15 (número de comparações)
um outro jeito de pensar é que eu devo multiplicar cada p-valor interno por 15 (e limitar a 1.0). Se algum desses p-valor for menor que 0.05 eu aceito aquela comparação como estatisticamente significante
vc ajusta os p-valores obtidos nas comparações par a par
esse ajuste acima é chamado de Bonferroni.
mas ele tem varias pressuposições erradas (independencia das comparacoes, etc). Ele acaba sendo muito mais fraco que “deveria”
ha outras técnicas de p-value adjust
R: https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/p.adjust
python: https://www.statsmodels.org/dev/generated/statsmodels.stats.multitest.multipletests.html
eu uso o Holm na maioria das vezes.
Técnica 1: faça as comparações par a par usando Wilcoxon, e use um ajuste de p-valor como o Holm.
ha uma outra família de testes post-hoc que computam uma diferença global, se uma comparação tem uma diferença maior que essa diferença critica, a comparação é significativa
Uma técnica global famosa para dados não paramétricos é o Nemenyi, para dados paramétricos um teste famoso é o Tukey range test (ou Tukey HSD e outros nomes).
Técnica 2: use Frideman e Nemenyi (esta é a técnica mais tradicional proposta por Demsar.
5x2cv Thomas G Dietterich. Approximate statistical tests for com- paring supervised classification learning algorithms. Neural computation, 10(7):1895–1923, 1998.
Demsar: Demsar, Janez. “Statistical comparisons of classifiers over multiple data sets.” The Journal of Machine Learning Research 7 (2006): 1-30.
extensoes: Garcia, Salvador, and Francisco Herrera. “An Extension on” Statistical Comparisons of Classifiers over Multiple Data Sets” for all Pairwise Comparisons.” Journal of machine learning research 9.12 (2008). e García S. and Herrera, F. (2010) Advanced Nonparametric Tests for Multiple Comparison in the Design of Experiments in Computational Intelligence and Data Mining: Experimental Analysis of Power. Information Sciences, 180, 2044-2064.
implementacao: R https://cran.r-project.org/web/packages/PMCMRplus/index.html, e https://github.com/b0rxa/scmamp python https://github.com/sherbold/autorank
bayesian non-parametric (2 clasificadores) Benavoli, Alessio, et al. “Time for a change: a tutorial for comparing multiple classifiers through Bayesian analysis.” The Journal of Machine Learning Research 18.1 (2017): 2653-2688.
implementacao https://github.com/BayesianTestsML/tutorial