Exercício 3

Data de entrega 10/4 em aula

Use os dados Sonar, Mines vs Rocks dataset do UCI Machine Learning Repository. Use o arquivo sonar.all-data .

  1. Discuta se é preciso normalizar os dados ou não. Se for preciso faça a normalizaçao.
  2. Faça um PCA para redução da dimensionalidade. Quantas dimensões manter?

Voce vai verificar qual dentre os algoritmos abaixo é o melhor para classificar os dados.

  1. Verifique que algoritmo tem a melhor acuracia media. Vamos usar o desenho experimental discutido em classe, de um k-fold para medir a acuracia media e um k-fold interno para escolher os hiperparametros (para cada conjunto de folds de treino). O algoritmo experimental esta descrito abaixo. Use 5-fold tanto para a avaliacao externa (para calcular a acuracia media) quanto para o loop interno (para escolher os hiperparametros.
  2. Verifique se há diferenca entre usar ou nao a reducao de dimensionalidade discutida acima para cada algoritmo - ou seja reducao de dimensionalidade ajuda um SVM linear, etc?
  3. Verificque para os dados originais se há muita diferenca entre escolha dos melhores hiperparametros entre os diferentes folds, para cada um dos algoritmos acima.
  4. divida os dados em k folds
    usando o fold i como teste e os outros como treino (-i)
        para todos os valores dos hiperparametros
           divida o treino (-i) em q folds
           usando o fold j para teste e os outros (-j) para treino
              treine o classificador com (-j) e com os valores dos hiperparametros
              calcule a acuracia do classificador em j
           calcule a acuracia media para esse conjunto de hiperparametros
        h_i e o conjunto de hiperparametros com maior acuracia media
        treine (-i) com h_i e meca a acuracia a_i
    reporte a acuracia media entre os a_i
    
    ou em python
    out=0
    for TR,TE in kfold(DADOS,k):
        maxacc=0
        for H in hipergrid():
            accur=0
            for TR2,TE2 in kfold(TR,q):
                classific=train(TR2,H)
                accur+=test(classific,TE2)
            if accur>maxacc:
                maxacc=accur
                maxhiper=H
        class2=train(TR,maxhiper)
        out+=test(class2,TE)
    print out/k
    
    onde:

    É tambem possivel trocar a ordem dos dois "for" de dentro

        for TR2,TE2 in kfold(TR,q):
             for H in hipergrid():
    

    ATENCAO. No SkitLearn, o kfold correto e o StratifiedKFold