Pode ser feito individualmente ou em duplas.
data para entrega: até meia note de 7/5 (5a feira)
Vamos fazer a busca dos melhores hiperparametros para uma SVM para Regressão num banco de dados em particular.
Xtreino.npy e Xteste5.npy são os dados de treino e teste, e ytreino5.npy e yteste5.npy as saidas correspondentes do dados.
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:
Para cada conjunto de hiperparametros, treine o SVM no conjunto de treino ( Xtreino e ytreino), e meça o erro absoluto médio (MAE) no conjunto de teste (Xteste e yteste).
random search
grid search
Bayesian optimization
PSO
simulated aneeling
CMA-ES
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 MAE 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 MAE para esses valores.
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”. Ou utilize algum outro pacote de otimização bayesiana.
Use 125 chamadas para a função.
Reporte os melhores valores dos hiperparametros e o MAE para esses valores.
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 MAE para esses valores
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 MAE para esses valores.
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 MAE para esses valores.
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.
cuidado ao usar o sklearn.model_selection.GridSearchCV e o equivalente ao random search do Sklearn - o default dessas funções é usar uma cross-validacao interna (veja o parametro cv dessas funções). Teoricamente nós estamos usando uma validacao cruzada, mas ela nao é o k-fold que o sklearn usa - a nossa validaçao cruzada é apenas a separação entre o conjunto de treino e o conjunto de teste.
o CMA, a otimização baesiana, o PSO e possivelmente o simulated annealing, so 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 usad 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\).
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 (eu não sei porque - CMA nao precisa de um ponto, ele precisa de varios pontos iniciais) e ao que parece uma desvio padrão unico 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. Nesse caso, as 3 variavies (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 um range de 1.0 e o sigma0, segundo a sugestão do pacote, seria 0.25.
voce nao precisa usar esse pacotes que eu mencionei. pode usar qualquer outro. O sklearn tem um de otimizacao bayesiana mas cuidado com a cros validaçao automatica deles. Ha outros pacotes.