Você está na página 1de 11

16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

FUNDAMENTOS DE MACHINE LEARNING

CICLO 5 – OTIMIZAÇÃO DOS ALGORITMOS

HIPERPARÂMETROS E AVALIAÇÃO DE MODELOS   


Os modelos estudados nos ciclos anteriores possuem, em sua maioria,
parâmetros que podem ser ajustados para que o modelo em questão apresente os melhores
resultados para um dado problema. Vamos, então, definir o que são parâmetros e hiperparâmetros
para que seja possível compreender como podemos, através de técnicas auxiliares de otimização,
melhorar o desempenho dos modelos de dados. Além disso, vamos abordar como utilizar os dados
disponíveis para estimar o desempenho do modelo de forma que este esteja mais próximo da
realidade.

PARÂMETROS VERSUS HIPERPARÂMETROS   


Os parâmetros, bem como os hiperparâmetros são partes fundamentais de
qualquer modelo de aprendizado de máquina. Sendo assim, conceituá-los é importante para o
entendimento dos modelos, de fato, nos ciclos anteriores já trabalhamos com ambos de maneira
transparente, aguardando o momento da diferenciação. Sendo assim, os parâmetros são os valores
ajustados diretamente pelo algoritmo de aprendizado, ou seja, pelo cerne da técnica em si, por
exemplo, os coeficientes de regressão, a escolha de atributos e corte nas árvores de decisão, os
vetores de suporte nas SVM’s e assim por diante.

Já os hiperparâmetros são valores estabelecidos previamente ao início do processo de


aprendizado, ou seja, são valores definidos a priori pelo usuário ou, então, de maneira default
(valores padrão de referência), os quais são, via de regra, constantes durante o processo de
treinamento, por exemplo, o passo de aprendizado na regra do gradiente, o valor de   o qual
determina a margem das SVM’s com relação ao limite de separação de classes ou mesmo a
quantidade de atributos testados em cada iteração das árvores de decisão.

Cada modelo de aprendizado possui seu conjunto próprio de parâmetros e hiperparâmetros e assim
sendo deve observar atentamente cada um dos hiperparâmetros para que se possa estabelecer
valores que promovam, pelo menos satisfatoriamente, um resultado adequado ao problema. Em
geral, os modelos de aprendizado já oferecem valores aos hiperparâmetros que atinjam um
resultado na direção certa, entretanto os valores-padrão não podem ser considerados “balas de
prata”.

Sugerimos, agora, que você dê uma pausa na sua leitura e reflita sobre sua
aprendizagem realizando a questão a seguir.

Com relação aos parâmetros e hiperparâmetros é possível afirmar que:

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 1/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Os hiperparâmetros não podem ser definidos pelo usuário, eles são fixos através do
estado da arte da técnica escolhida, já os parâmetros podem ser alterados pelo usuário.

Os parâmetros e hiperparâmetros são alterados automaticamente pelo algoritmo de


aprendizado de máquina escolhido, entretanto, os hiperparâmetros podem ser manipulados
pelo usuário.

Os parâmetros são determinados diretamente pela aplicação da regra de aprendizado a


partir da técnica escolhida, ou seja, são determinados automaticamente pelo algoritmo, já os
hiperparâmetros são aqueles que guiam o algoritmo e devem ser estabelecidos antes de se
iniciar o treinamento.

Os parâmetros devem seguir os mesmos valores dos hiperparâmetros, com a diferença


apenas que os algoritmos alteram os hiperparâmetros, enquanto que os parâmetros se
mantém inalterados.

Os hiperparâmetros são aqueles que guiam o algoritmo de aprendizado e são definidos


pelo usuário, já os parâmetros podem ser alterados pelo usuário somente após o
treinamento.

AVALIAÇÃO DE MODELOS
Segundo Norvig e Russell (2014) quando treinamos modelo de aprendizado, independente de suas
características, temos um conjunto de dados de treinamento e um conjunto de teste, e
estabelecemos seus hiperparâmetros, os resultados obtidos no treinamento podem não ser
satisfatórios no teste, ou seja, podem resultar em overffitting (super-treinamento) do modelo, que
acontece quando o este “memoriza” os dados de treinamento ao invés de aprender a generalização
do domínio do problema, ou então, resulta em underfitting (sub-treiamento) do modelo, que
acontece quando o este não abstrai informações suficientes do domínio de dados.

Nesse sentido, para evitar ao máximo esses efeitos podemos usar uma parte do conjunto de
treinamento como validador do modelo, chamado de conjunto de validação, isto é, uma espécie de
pré-teste que vai dizer se o modelo foi eficaz ou não. Tal abordagem é especialmente interessante
quando não temos o conjunto de teste facilmente disponível ou quando não conhecemos a priori a
variável target deste. Além disso, caso não haja conjunto de teste disponível é possível separar uma
parte do conjunto de dados para tal fim. Entretanto, ao diminuir o conjunto de treinamento, damos
ao modelo menos dados na fase de treinamento impactando negativamente os resultados a
depender da divisão que faremos entre conjunto de treinamento e conjunto de validação.

A estratégia, denominada Cross-Validation (CV), é usada como solução ao problema de divisão


treinamento/validação dividindo o conjunto de treinamento em  parte iguais (k-folds) sem
reposição e atuando da seguinte maneira:

O modelo é treinado, usando k-1 partes como um conjunto único.


A k parte restante é usada como validação do modelo treinado.
O processo é repetido de forma que todas as k partes sejam usadas, em algum momento,
como conjunto de validação.

Esse processo é chamado de k-fold cross validation e é ilustrado na Figura 1, na qual vemos que o
conjunto de dados (All Data) está dividido em treinamento (verde) e teste (azul), e
subsequentemente, o 5-fold cross-validation é aplicado ao conjunto de dados, gerando 5 partes,
treinando, assim, o modelo 5 vezes (splits) no qual, em cada vez, uma das partes é usada como
validação (pré-teste). É importante ressaltar que, a cada treinamento realizado o modelo é
reiniciado, isto é, o modelo volta para os parâmetros iniciais, uma vez que queremos mitigar
qualquer influência da partição dos dados na avaliação do modelo em questão.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 2/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Ao observar a Figura 36, podemos notar que o resultado geral do modelo é a média da métrica de
desempenho escolhida para o modelo, obtida em cada treinamento do k-fold cross-validation. Além
disso, é possível obter o desvio-padrão, indicando, assim, qualquer variabilidade sobre a média.
Além da figura, ao analisar o Código 1, vemos que ele apresenta o uso da função cross_validate do
scikit-learn para realizar a tarefa do k-fold cross-validation, num conjunto de dados que divide
instâncias à partir de informações sobre imagens de tumores em mamas de pacientes em benigno
e maligno (breast cancer dataset), usando RandomForest. A função em questão (linha 12) recebe o
classificador, as entradas  e os targets , seguido da quantidade de divisões (k-folds) que serão
feitos. Após a sua execução, os resultados são retornados em scores e as acurácias apresentadas
individualmente, e também sua média e desvio-padrão (linhas 19 e 20). Sendo assim, é possível ter
uma ideia do desempenho do modelo, independentemente, do conjunto de dados escolhido para
treinamento e teste.

Fonte: Scikit-learn [s.d.].


Figura 36 Representação gráfica do k-fold cross-validation.

 
 

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 3/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Código 1 Código-fonte que demonstra o uso do cross-validation num c

1. from sklearn.model_selection import cross_validate


2. from sklearn.datasets import load_breast_cancer
3. from sklearn.ensemble import RandomForestClassifier

4. # Carregamento do dataset breast cancer


5. bc_dataset = load_breast_cancer()
6. # Acessando os dados de entrada (X) e o target (y)
7. X = bc_dataset.data
8. y = bc_dataset.target

9. # Criando o classificador Random Forest


10. clf = RandomForestClassifier()

11. # Chamando a função para realizar o 10-fold cross-validation


12. scores = cross_validate(clf, X, y, cv=10)

13. # Informações retornadas pelo cross-validation


14. print('Score Keys: {}'.format(sorted(scores.keys())))

15. # Apresentando a acurácia em cada rodada do 10-fold cross-va


16. for i, v in enumerate(scores['test_score']):
17. print('Accuracy at {}: {}'.format(i+1, v))

18. # Apresentando a acurácia média e seu desvio-padrão


19. print('Accuracy mean: {}'.format(scores['test_score'].mean(
20. print('Accuracy standard deviation: {}'.format(scores['test_

É chegado o momento de você analisar o quanto aprendeu, para isso, realize a


questão a seguir:

Com relação ao Cross-Validation é possível afirmar que:

Tal técnica visa super utilizar o conjunto de dados de forma a mitigar qualquer viés
promovido pela divisão do conjunto de dados em treinamento e teste, sendo assim, em
algum momento, cada uma das instâncias é usada como treinamento ou teste.

Tal técnica visa super utilizar os dados de forma a descobrir quais são os principais
vieses na construção do modelo de classificação.

Tal técnica visa super utilizar o conjunto de dados, dividindo-os em k grupos (k-folds), e
treinando diferentes modelos com técnicas diversas em cada uma das rodadas.

Tal técnica deve ser utilizada apenas em conjunto de dados extremamente volumosos e
com expressiva quantidade de atributos.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 4/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Tal técnica é voltada apenas para problemas de classificação, não sendo possível utilizá-
la em problemas de regressão.

TÉCNICAS DE GRID SEARCH E RANDOM SEARCH   


Agora que já abordamos uma maneira de verificar com mais confiança o
desempenho de um dado modelo, podemos avaliar e explorar como os hiperparâmetros podem
colaborar com tal desempenho. Lembrando que, hiperparâmetros são determinados pelo usuário
antes do processo de treinamento ocorrer e não são alterados pelas regras de aprendizado que
incidem apenas sobre os parâmetros.

Cada vez que criamos modelos para realização de tarefas de aprendizado de máquina, temos que
estabelecer os valores dos hiperparâmetros. Nesse sentido, a questão levantada para todo usuário
que constrói modelos de aprendizado é:

Qual o conjunto de valores ideais para os hiperparâmetros de maneira que se


obtenha o melhor desempenho do modelo?

A maneira mais imediata e simples de responder essa questão é através do mecanismo de treinar-
validar o modelo em questão com diferentes valores de parâmetros no mecanismo do cross-
validatiton. Por exemplo, seja um problema de classificação qualquer, e desejamos criar um
classificador baseado em Support Vector Machines (SVM). Sabendo que uma SVM possui o
hiperparâmetro C, o qual modula a regularização do modelo em questão, bem como o 
hiperparâmetro kernel, o qual estabelece a função usada pelo modelo no processo de aprendizado,
poderíamos construir diferentes classificadores SVM, variando os hiperparâmetros citados:

Sendo assim, construiríamos modelos com pares de hiperparâmetros e , com valores


supracitados
e assim,
sucessivamente, totalizando 15 modelos treinados e validados usando k-fold cross-validation.

A essa técnica damos o nome de Grid Search, mais especificamente: Exaustive Grid Search, uma
vez que essa técnica visa combinar todas as possibilidades de valores especificados e verificar o
desempenho de cada modelo criando, assim, um mapa para verificarmos quais hiperparâmetros
promoveram o melhor desempenho do modelo em questão.

O Código 2 apresenta o uso de uma Exaustive Grid Search, por meio do Scikit-Learn para
determinar os melhores valores dos hiperparâmetros e para um classificador SVM no
conjunto de dados breast cancer, observamos que na linha 13 fazemos o classificar SVM é criado, e
na linha 15 são demonstrados todos os hiperparâmetros disponíveis com seus respectivos valores-
padrão. Além disso, a linha 17 indica o dicionário contendo os hiperparâmetros, como também os
respectivos valores que deverão ser verificados junto ao cross validation. Já  na linha 19 , o objeto
que realizará o processo de Exaustive Grid Search é criado a partir do classificado SVC e dos
parâmetros de busca da linha 17. Na linha 21 faz-se o processo de grid search, chamando o
método fit. Por fim,  as linhas 23 e 24 apresentam o melhor desempenho obtido, bem como os
hiperparâmetros que proporcionaram tal desempenho.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 5/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Código 2 Código-fonte que demonstra o uso do GridSearch para otimiza

1. import pprint
2. from sklearn.model_selection import GridSearchCV
3. from sklearn.datasets import load_breast_cancer
4. from sklearn.svm import SVC

5. # Carregamento do dataset breast cancer

6. bc_dataset = load_breast_cancer()
7. # Acessando os dados de entrada (X) e o target (y)
8. X = bc_dataset.data
9. y = bc_dataset.target

10. # Criando um pretty printer

11. pp = pprint.PrettyPrinter(indent=4)

12. # Criando o classificador Support Vector Machines

13. clf_svc = SVC()

14. # Hiperparâmetros disponíveis para a SVC

15. pp.pprint(‘Suppor Vector Classifier parameters: {}’.format

16. # Estabelecendo valores de busca para os hiperparâmetros

17. params_svc = {‘C’: [1, 10, 50, 250, 1000], ‘kernel’: [‘linea

18. # Criando o busca de parâmetros

19. grid_cv = GridSearchCV(clf_svc, params_svc, cv=10, verbose=2


20. # Criando o busca de parâmetros
21. grid_cv.fit(X, y)

22. pp.pprint(grid_cv.cv_results_)

23. pp.pprint(‘Best Score: {}’.format(grid_cv.best_score_))

24. pp.pprint(‘Best Parameters: {}’.format(grid_cv.best_params_

Esse método de busca de hiperparâmetros, no qual todas as possibilidades são testadas, apesar de
mostrar-se eficaz, dependendo da quantidade e natureza dos hiperparâmetros, bem como do
tamanho do conjunto de dados, pode se tornar computacionalmente caro e impraticável.

Seguindo esse raciocínio, uma estratégia mais eficiente é necessária. É possível realizar uma busca
aleatória dentro do espaço determinado de hiperparâmetros, chamada de Random Search (Bergstra

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 6/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

e Bengio, 2012), esta técnica permite que estabeleçamos um intervalo válido para os
hiperparâmetros e uma busca aleatória é realizada tentando encontrar a melhor combinação de
parâmetros.

No Código 3 temos um código que, faz uso da busca aleatória de parâmetros, por meio do Scikit-
learn. Assim,  é possível perceber que na linha 18: os parâmetros C e gamma são gerados através
de uma função que gera um valor a partir do intervalo estabelecido de maneira logarítmica-
uniforme. Essa abordagem acelera a busca de parâmetros, fazendo com que mais hiperparâmetros
e seus respectivos valores possam ser explorados.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 7/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Código 3 Código-fonte que demonstra o uso do Random Search para otim

1. import pprint
2. from sklearn.model_selection import RandomizedSearchCV
3. from sklearn.datasets import load_breast_cancer
4. from sklearn.svm import SVC
5. from sklearn.utils.fixes import loguniform

6. # Carregamento do dataset breast cancer

7. bc_dataset = load_breast_cancer()
8. # Acessando os dados de entrada (X) e o target (y)
9. X = bc_dataset.data
10. y = bc_dataset.target

11. # Criando um pretty printer

12. pp = pprint.PrettyPrinter(indent=4)

13. # Criando o classificador Support Vector Machines

14. clf_svc = SVC()

15. # Hiperparâmetros disponíveis para a SVC

16. pp.pprint(‘Suppor Vector Classifier parameters: {}’.format

17. # Estabelecendo valores de busca para os hiperparâmetros

18. params_svc = {‘C’: loguniform(1e0, 1e3),


19. ‘gamma’: loguniform(1e-4, 1e-3),
20. ‘kernel’: [‘rbf’],
21. ‘class_weight’:[‘balanced’, None]}

22. # Criando o busca de parâmetros

23. rd_cv = RandomizedSearchCV(clf_svc, params_svc, cv=10, verbo

24. rd_cv.fit(X, y)

25. pp.pprint(rd_cv.cv_results_)

26. pp.pprint(‘Best Score: {}’.format(rd_cv.best_score_))


27. pp.pprint(‘Best Parameters: {}’.format(rd_cv.best_params_))

INDICAÇÕES DE LEITURAS? SIM, VAMOS ÀS NOSSAS ÚLTIMAS


INDICAÇÕES...

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 8/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Sugerimos a leitura da documentação do Scikit-learn sobre otimização de


hiperparâmetros, bem como um comparativo entre Exaustive Grid Search e Random
Grid Search, intitulado: “Comparando pesquisa aleatória e pesquisa em grade para
estimativa de hiperparâmetros”, disponível no site scikit-learn.

Desejamos uma boa leitura e ressaltamos que a busca por conhecimento deve ser
constante em sua vida; assim, se tornará um excelente profissional!

Depois de ler as indicações de leitura, qual tal agora assistir ao vídeo complementar deste ciclo, o
qual consta o passo a passo sobre a optimização de modelos através da busca de hiperparâmetros.

Após ter lido e assistido ao vídeo complementar, aproveite a oportunidade e responda à


pergunta a seguir, para verificar seu nível de aprendizado neste ciclo.

Com relação às técnicas de busca de hiperparâmetros é possível afirmar que:

Tanto a busca exaustiva (exaustive) quanto a busca aleatória (random) têm por objetivo
determinar um conjunto de valores para os hiperparâmetros determinados que promovam o
melhor desempenho por parte do modelo.

Apenas a busca exaustiva é capaz de trabalhar com múltiplos hiperparâmetros, uma vez
que ela vai testar o modelo com todas as combinações.

A busca aleatória tenta, por meio da escolha aleatória de valores, influenciar o algoritmo
em questão no ajuste dos parâmetros.

As técnicas de busca, sejam exaustivas sejam aleatórias, devem usar todos os


parâmetros disponíveis para a técnica escolhida.

A busca exaustiva deve ser aplicada em situações, nas quais todos os parâmetros do
modelo sejam conhecidos, já a busca aleatória permite que os parâmetros possam ser
parcialmente conhecidos.

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 9/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

Por fim, veja o vídeo de encerramento proposto para esta disciplina, leia as considerações,
responda às questões on-line e participe do Fórum deste ciclo.

CONSIDERAÇÕES   
Neste ciclo, vimos como podemos aumentar o grau de confiança no desempenho
dos modelos de aprendizado, por meio da aplicação da técnica de k-fold cross-validation, podendo,
assim, analisar com mais assertividade um dado algoritmo proposto para um problema de
classificação ou regressão. Além disso, podemos compreender como os hiperparâmetros impactam
no desempenho de um algoritmo e como usar estratégias para estabelecer bons valores para eles.

INTERATIVIDADE NO FÓRUM   

OBJETIVO
Compreender os principais hiperparâmetros dos modelos
estudados nesta disciplina.

DESCRIÇÃO DA INTERATIVIDADE
Escolha qualquer um dos modelos de aprendizado supervisionado de classificação que
vimos nessa disciplina, a seguir, identifique seus hiperparâmetros, refletindo e elencando
quais hiperparâmetros podem ser explorados para gerar melhores resultados.

Disponibilize sua resposta no Fórum, justificando suas escolhas, aproveite também para
analisar outras respostas e interagir com seus colegas.

PONTUAÇÃO
A atividade vale de 0 a 1,0 ponto.

CRITÉRIOS DE AVALIAÇÃO
Na avaliação desta tarefa serão utilizados os seguintes critérios:

Uso das funções adequadas da biblioteca Scikit-learn.


Manipulação correta da base de dados.
Capacidade de usar técnicas de busca de hiperparâmetros.

Acesse o Fórum

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 10/11
16/12/2020 Ciclo 5 – Otimização dos Algoritmos – Fundamentos de Machine Learning

QUESTÕES ON-LINE   
Responda as Questões on-line disponibilizadas na Sala
de Aula Virtual.

PONTUAÇÃO
De 0 a 0,5 ponto.

© 2020 Fundamentos de Machine Learning | Claretiano

https://mdm.claretiano.edu.br/funmaclea-g04120-2020-02-grad-ead/2019/12/10/ciclo-5-otimizacao-dos-algoritmos/ 11/11

Você também pode gostar