4o Exercício de casa - Versao 2

Jacques Wainer

Versão 2: troquei a data de entrega e uma discussão sobre o uniformizacao dos hiperparametros, o CMA-ES e o simulated annealing

Pode ser feito individualmente ou em grupos de ate 3 pessoas.

data para entrega: até meia note de 3/5 (2a feira)

Objetivo

Vamos fazer a busca dos melhores hiperparametros para uma SVM para Regressão num banco de dados em particular.

X.npy são os dados de entrada, e y.npy são os valores de saída correspondentes.

SVM Regressor

O sklearn.svm.SVR do sklearn implementa o regressor SVM e tem vários hiperparametros. Vamos usar o kernel “rbf”. Neste caso há 3 hiperparametros que se considera como os mais importantes, : C, gamma, e epsilon

Vamos fazer a busca no range:

Medida de erro

5-fold cross-validation é o processo de dividir o conjunto de dados em 5 conjuntos de tamanhos iguais, e treinar o regressor em 4 desses conjuntos e testar no conjunto restante. Mede-se então a média do desempenho do regressor nas 5 rodadas.

Para cada conjunto de hiperparametros, use 5-fold cross-validation para computar a média da raiz quadrada do erro quadrado medio (RMSE) do SVM.

Algoritmos de otimização

Use um random search de 125 combinações dos hiperparametros. Voce pode usar o sklearn.modelselection.RandomizedSearchCV do sklearn, ou o random search do hyperopt (ver abaixo a otimização bayesiana), ou voce pode implementar a busca voce mesmo

Reporte os melhores valores dos hiperparametros e o RMSE para esses valores.

Faça um grid search de 5 x 5 x 5 em cada uma dos atributos acima. Note que os hiperparametros C e gamma são um grid linear no expoente.

Vc pode usar o GridSearchCV do sklearn ou implementar o seu proprio código.

Reporte os melhores valores dos hiperparametros e o RMSE para esses valores.

3) Otimização bayesiana

Voce pode utilizar o pacote hyperopt para fazer a otimização bayesiana dos hiperparametros. Essa implementação usa um regressor (TPE) para modelar a distribuição de probabilidades que é muito mais rápido que a implementação padrão utilizando “processos gaussianos”.

Um outro pacote é o scikit-optimize

Use 125 chamadas para a função.

Reporte os melhores valores dos hiperparametros e o RMSE para esses valores.

4) PSO

Utilize o PSO para resolver a busca de hiperparametros. Voce pode utilizar implementações como pyswarm ou psopy ou qualquer outra.

Utilize 11 partículas por 11 interações (para ser justo com os outros algoritmos acima) . Utilizes os valores default (da sua implementação) para os hiperparametros do PSO.

Reporte os melhores valores dos hiperparametros e o RMSE para esses valores

5) Simulated annealing

Utilize um pacote como simannel para fazer a busca usando simulated annealing. Utilize 125 passos na simulação. Voce pode usar o valor default para o cooling schedule.

Reporte os melhores valores dos hiperparametros e o RMSE para esses valores.

6) CMA-ES

Utilize o pacote pycma ou alguma outra implementação do CMA-ES. Utilize 125 chamadas da função. Reporte os melhores valores dos hiperparametros e o RMSE para esses valores.

Optunity

Parece que o pacote Optunity implementa todos os algoritmos acima menos o SA. O pacote parece que esta parado desde 2016 e portanto isso pode ser um problema. Use este pacote ou use os pacotes específicos para cada algoritmo.

Alguns pontos

uniformizacão dos hiperparametros

O CMA-ES, a otimização baesiana, o PSO e possivelmente o simulated annealing, só deve funcionar bem se as variável é “linear” ou “uniforme” No caso do C e gamma, o hiperparametro é “exponencial” ou seja a busca é linear/uniforme no expoente do parametro. Assim voce deve usar como variavies log_2 C log_2 gamma e o epsilon. Assim se x_1 x_2 e x_3 sao as 3 dimensões da variavel a ser otimizada, dentro da sua função (que vc passa para os otimizadores) voce usará C = 2^{x_1}, gamma = 2^{x_2} e epsilon = x_3.

Mas o CMA-ES (e talvez os outros tambem) tambem espera que as variáveis tenham o mesmo intervalo. Nesse caso que chamaremos de uniformização dos hiperparametros, é importante que as 3 variáveis tenham o mesmo intevalo de 0 a 1.

Nesse caso, as 3 variávies (log C, log gamma, e epsilon) tem que ter o mesmo intervalo de valores. O log C vai de -5.0 a 15.0, um range de 20. O intervalo de log gamma é por volta de 20 e o de epsilon é por volta de 1. Assim se voce usar as variáveis y_1 = x_1/20, y_2 = x_2/20 e y_3 = x_3. Essas variáveis tem todas um range de 0 a 1.

CMA-ES

O pacote de CMA-ES que eu recomendei é mais dificil de usar que eu esperava. Em particular a função de minimização pede um ponto inicial o x0 e um desvio padrão único o sigma0 (e não um por dimensão).

Quanto ao xo use um ponto aleatório.

O site sugere que o desvio padrão sigma0 seja 1/4 do intervalo/range de valor para as variáveis. Se os hiperparametros estao uniformizados, eles tem um intervalo de 1, e portanto o sigma0 deve ser 0.25.

Simulated annealing

O simulated annealing simannel exige que voce crie uma subclasse da classe Annealer. Nessa subclasse voce precisa definir 2 metodos: energy e o move.

O energy é o valor da nossa funçao sendo minimizada (que é o 5-fold CV RMSE do SVR).

O move define o proximo ponto dado o estado atual. A melhor solução me parece é usar

A otimização ainda pede alguns parametros Tmax Tmin e steps (seção “Annealing parameters”)