Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 2 Sumário Unidade 1: Introdução – Aprendizagem de Máquina .......................................................... 4 1.1 Considerações Iniciais ................................................................................................... 4 1.2 Introdução: O que é Aprendizagem de Máquina (AM)? ........................................... 4 1.3 Tipos de Aprendizagem de Máquina (AM) .................................................................. 5 1.3.1 Aprendizagem Supervisionada .............................................................................. 5 1.3.2 Aprendizagem não Supervisionada ...................................................................... 6 1.3.3 Aprendizagem por Reforço ..................................................................................... 7 1.3.4 Aprendizagem Profunda (ou Deep Learning) ...................................................... 8 1.4 Roteiro .............................................................................................................................. 10 1.4.1 Pré-requisitos .......................................................................................................... 10 1.4.2 Assuntos abordados no módulo ......................................................................... 11 1.4.3 Recursos usados no módulo ............................................................................... 12 1.4.4 Ecossistema de programação interativa Python: Anaconda e Jupyter Notebook ............................................................................................................................ 12 1.5 Considerações Finais ................................................................................................... 13 Unidade 2: Atividades de Aprendizagem Supervisionada ............................................... 13 2.1 Considerações Iniciais ................................................................................................. 13 2.2 Estudo de caso ............................................................................................................... 13 2.3 Atividades ........................................................................................................................ 14 2.3.1 Importação dos dados ........................................................................................... 14 2.3.2 Transformação dos dados .................................................................................... 14 2.3.3 Treinamento ............................................................................................................. 15 2.3.4 Teste .......................................................................................................................... 18 2.3.5 Curvas de Aprendizagem ...................................................................................... 19 2.3.6 Validação .................................................................................................................. 22 2.4 Considerações Finais ................................................................................................... 23 Unidade 3: Aprendizagem Supervisionada - Classificação ............................................. 23 3.1 Considerações Iniciais ................................................................................................. 23 3.2 O Algoritmo K-Nearest Neighbor (KNN) .................................................................... 24 3.2.1 Analisando o algoritmo KNN ................................................................................ 25 3.2.2 Regressão com o algoritmo KNN ........................................................................ 26 3.2.3 Vantagens, desvantagens e hiperparâmetros ................................................... 27 3.3 Árvores de Decisão ....................................................................................................... 28 3.3.1 Construindo classificadores baseados em Árvores de Decisão .................. 28 3.3.2 Analisando Árvores de Decisão........................................................................... 29 3.3.3 Importância dos Atributos .................................................................................... 30 3.3.4 Vantagens, desvantagens e hiperparâmetros ................................................... 31 3 3.4 Support Vector Machines (SVM) ................................................................................. 31 3.4.1 Modelos lineares e atributos não lineares ......................................................... 31 3.4.2 O papel dos hiperparâmetros ................................................................................... 33 3.4.3 Vantagens, desvantagens e hiperparâmetros....................................................... 35 3.5 Considerações Finais ................................................................................................... 35 Unidade 4: Aprendizagem Supervisionada – Regressão ................................................. 36 4.1 Considerações Iniciais ................................................................................................. 36 4.2 Regressão Linear Simples ........................................................................................... 36 4.2.1 Métrica dos Mínimos quadrados (Minimum Squares Error – MSE).............. 37 4.2.2 Estudo de Caso: Extensão do gelo marinho e mudanças climáticas .......... 38 4.3 Regressão Linear Múltipla e Regressão Polinomial ............................................... 39 4.3.1 Estudo de caso: Previsão do preço de imóveis ............................................... 40 4.3.2 Predições e Modelos esparsos ............................................................................ 42 4.4 Regressão Logística...................................................................................................... 43 4.4.1 Estimando probabilidades .................................................................................... 44 4.4.2 Limites de Decisão ................................................................................................. 44 4.4.2 Regressão Softmax ................................................................................................ 46 4.5 Considerações Finais ................................................................................................... 46 Unidade 5: Aprendizagem Profunda (Deep Learning) ...................................................... 47 5.1 Considerações Iniciais ................................................................................................. 47 5.2 Perceptrons e o modelo de redes neurais artificiais .............................................. 47 5.3 Configuração das redes neurais artificiais ............................................................... 49 5.4 Redes neurais profundas ............................................................................................. 53 5.4.1 Bibliotecas para Deep Learning ........................................................................... 53 5.4.2 Estudo de caso: construção de um classificador de imagens ..................... 54 5.4.3 Criação de rede neural profunda baseada em API Sequencial ..................... 55 5.4.4 Ajuste dos Hiperparâmetros ................................................................................. 57 5.4.5 Uso da rede neural para fazer predições ........................................................... 57 5.5 Considerações Finais ................................................................................................... 58 Referências ................................................................................................................................ 594 Unidade 1: Introdução – Aprendizagem de Máquina 1.1 Considerações Iniciais Neste primeiro capítulo, além de introduzir o que é e qual a importância da Aprendizagem de Máquina (AM), iniciaremos os estudos sobre os conceitos fundamentais dessa área fascinante. A AM tem desempenhado papel significativo na construção de sistemas que podem “aprender” com base nos dados e na experiência do usuário. Nas últimas décadas ela tem sido usada para construir aplicações que revolucionaram a forma como interagimos com o mundo, como os assistentes pessoais digitais (Amazon Alexa, Apple Siri e Microsoft Cortana). Este primeiro capítulo está estruturado da seguinte forma: na Seção 1.2 vamos introduzir o que é Aprendizagem de Máquina; na Seção 1.3 estudaremos os principais tipos de AM; na Seção 1.4 vamos apresentar o roteiro deste módulo, ou seja, quais assuntos serão estudados na sequência deste capítulo e nos capítulos seguintes; por fim, a Seção 1.5 faz as considerações finais do capítulo. 1.2 Introdução: O que é Aprendizagem de Máquina (AM)? A Aprendizagem de Máquina (ou Machine Learning) é uma área da Inteligência Artificial (IA) que visa criar artefatos de software que usam experiências do passado para tomar decisões futuras, ou seja, é um tipo de software que “aprende” com base em um conjunto de dados históricos. Seu objetivo fundamental é generalizar ou induzir uma regra desconhecida a partir de exemplos de aplicação da regra. Um exemplo clássico de aprendizagem de máquina é a filtragem de spam. O filtro de spam usado na caixa de entrada do seu e-mail é um programa de aprendizagem de máquina que, com base em inúmeros exemplos de e-mails de spam sinalizados por usuários, e exemplos de e-mails regulares (que não são spam), podem aprender a sinalizar um spam. Arthur Samuel (Emporia, Kansas, EUA, 1901-1990), um cientista da computação que foi o pioneiro no estudo da inteligência artificial, disse que a aprendizagem de máquina é o "estudo que dá aos computadores a capacidade de aprender sem serem programados explicitamente". Ao longo dos anos 1950 e 1960, Samuel desenvolveu programas que jogavam damas. Embora as regras das damas sejam simples, estratégias complexas são necessárias para derrotar oponentes habilidosos. Samuel nunca programou explicitamente essas estratégias, mas por meio da experiência de jogar milhares de partidas, o programa aprendeu comportamentos complexos que lhe permitiram vencer muitos oponentes humanos. Uma citação popular do cientista da computação Tom Mitchell (Blossburg, Pensilvânia, EUA, 1951-) define a aprendizagem de máquina mais formalmente: "Pode-se dizer que um programa aprende com a experiência 'E' em relação a alguma classe de tarefas 'T' e medida de desempenho 'P', se seu desempenho nas tarefas em 'T', medido por 'P', melhora com a experiência 'E' " Por exemplo, suponha que você tenha uma coleção de fotos. Cada imagem representa um cachorro ou um gato. Uma tarefa pode ser classificar as fotos em coleções separadas de fotos de cães e gatos. Um programa poderia aprender a realizar essa tarefa observando as imagens que já foram classificadas e poderia avaliar seu desempenho calculando a porcentagem de imagens classificadas corretamente. Nós usaremos a definição de aprendizagem de máquina de Tom Mitchell para organizar o conteúdo desta disciplina. Neste capítulo, discutiremos os tipos de experiência, incluindo aprendizagem supervisionada e aprendizagem não supervisionada. A seguir, discutiremos tarefas comuns que podem ser realizadas por sistemas de aprendizagem de máquina. Nos próximos capítulos, discutiremos as 5 medidas de desempenho que podem ser usadas para avaliar sistemas de aprendizagem de máquina. 1.3 Tipos de Aprendizagem de Máquina (AM) Como descrevemos na seção anterior, uma das primeiras aplicações de AM que se tornou verdadeiramente popular, que melhorou a vida de centenas de milhões de pessoas e conquistou o mundo nos anos 1990 foi o filtro de spam. Essa técnica foi seguida por centenas outros sistemas de AM que fornecem silenciosamente centenas de produtos e recursos que você usa regularmente, desde sistemas de recomendação até pesquisa por voz. Uma dúvida recorrente é onde a Aprendizagem de Máquina começa e onde termina? O que exatamente significa para uma máquina aprender alguma coisa? Se eu baixar uma cópia da Wikipedia, meu computador irá aprender alguma coisa? Nesta Seção, começaremos a esclarecer o que é AM e por que você pode querer usá-la. Existem vários tipos diferentes de sistemas de AM, portanto, é útil classificá-los em categorias mais generalistas, com base em alguns critérios (GERON, 2019): se eles são ou não treinados com supervisão humana (supervisionada, não supervisionada e semi-supervisionada ou aprendizagem por reforço); se eles podem ou não aprender dinamicamente de forma incremental (aprendizagem online versus aprendizagem em lote); se eles funcionam simplesmente comparando novos conjuntos de dados com conjuntos de dados conhecidos, ou detectando padrões nos dados de treinamento e construindo um modelo preditivo (aprendizagem baseada em instância versus aprendizagem baseada em modelo) Esses critérios não são exclusivos; você pode combiná-los da maneira que quiser. Por exemplo, um filtro de spam de última geração pode aprender em tempo real usando um modelo de redes neurais treinado com um conjunto de dados contendo exemplos de spam; isso o torna um sistema de aprendizagem online, baseado em um modelo supervisionado. As subseções a seguir descrevem alguns dos principais tipos de aprendizagem de máquina. 1.3.1 Aprendizagem Supervisionada Os sistemas de aprendizagem de máquina podem ser classificados de acordo com a quantidade e o tipo de supervisão que recebem durante o treinamento. Existem três categorias principais: aprendizagem supervisionada, aprendizagem não supervisionada, e aprendizagem semi-supervisionada ou por reforço. Na aprendizagem supervisionada, os dados de treinamento que você utiliza para o algoritmo incluem um atributo especial que classifica cada instância do conjunto de dados, chamado de classe ou rótulo. Uma atividade típica da aprendizagem supervisionada é a classificação. O filtro de spam é um bom exemplo disso: ele é treinado com muitos e-mails de exemplo, e cada um deles possui a sua classe (spam ou não-spam), e o sistema precisa aprender a classificar novos e-mails com base no conjunto de treinamento, como é mostrado na Figura 1.1. Outra tarefa típica da aprendizagem supervisionada é prever um valor numérico, como o preço de um carro, dado um conjunto de atributos (quilometragem, idade, marca, etc.) chamados preditores. Esse tipo de aprendizagem supervisionada é chamada de regressão. Para treinar o sistema, você precisa de um conjunto de dados com muitos exemplos de carros, incluindo os preditores e o seu rótulo, que neste caso será o preço do carro. Um exemplo genérico de regressão é mostrado na Figura 1.2. 6 Figura 1.1 – Exemplo de aprendizagem supervisionada: conjunto de dados rotulados para classificação de spam (GERON, 2019) Figura 1.2 – Problema de regressão: prever um valor, dado um atributo de entrada (podem existir também vários atributos de entrada) (GERON, 2019) 1.3.2 Aprendizagem não Supervisionada Na aprendizagem não supervisionada, os dados do conjunto de treinamento não possuem um rótulo ou classe, portanto, o sistema tenta aprender sem supervisão. Por exemplo, digamos que você tenha muitos dados sobre os usuários visitantes do seu blog. Você pode executar um algoritmo de clusterização (agrupamento) para tentar detectar grupos de visitantes semelhantes. Em nenhum momento você diz ao algoritmo a que grupo o visitante pertence: ele encontra essas conexões sem a sua ajuda. Por exemplo, pode notar que 40% dos seus visitantes são homens que gostam de históriasem quadrinhos e geralmente leem seu blog à noite, enquanto 20% são jovens amantes de ficção científica que visitam nos fins de semana. Se você usar um algoritmo de clusterização hierárquica, ele também poderá subdividir cada grupo em grupos menores. Isso pode ajudá-lo a direcionar suas postagens para cada grupo. Observe a Figura 1.3, à esquerda ela mostra o seu conjunto de dados (visitantes do blog), e à direita você pode visualizar os grupos (ou clusters) que foram identificados pelo algoritmo de clusterização. 7 Figura 1.3 – Exemplo de aprendizagem não supervisionada (GERON, 2019) Outra tarefa importante de aprendizagem não supervisionada é a detecção de anomalias; por exemplo, a detecção de transações incomuns com cartão de crédito para evitar fraudes, detecção de defeitos de fabricação ou remoção automática de valores discrepantes de um conjunto de dados antes de usá-lo em outro algoritmo de aprendizagem. Essa técnica é usada para identificar instâncias “normais” durante o treinamento, portanto aprende a reconhecê-las; então, quando analisa uma nova instância, pode dizer se ela é parecida com uma instância normal ou se provavelmente é uma anomalia, como você pode observar na Figura 1.4. Uma tarefa muito semelhante é a detecção de novidades: ela visa detectar novas instâncias que parecem diferentes de todas as outras no conjunto de treinamento. Isso requer um conjunto de treinamento desprovido de qualquer instância que você queira que o algoritmo detecte. Por exemplo, se você tem milhares de fotos de cães e 1% delas representa Chihuahuas, um algoritmo de detecção de novidade não deve tratar novas fotos de Chihuahuas como novidades. Por outro lado, algoritmos de detecção de anomalias podem considerar esses cães tão raros e tão diferente de outros cães que provavelmente os classificariam como anomalias (sem querer ofender os Chihuahuas). 1.3.3 Aprendizagem por Reforço A aprendizagem por reforço é um método bastante diferente. Nesse sistema de aprendizagem, um agente “inteligente” pode observar o ambiente, selecionar e executar ações e receber recompensas em troca, ou penalidades na forma de recompensas negativas, como mostra a Figura 1.5. Em seguida, ele deve aprender por si próprio qual é a melhor estratégia, chamada de política, para obter a maior recompensa ao longo do tempo. Uma política define qual ação o agente deve escolher quando estiver em uma determinada situação. Por exemplo, muitos robôs são criados com base em algoritmos de aprendizagem por reforço para aprender a andar. O programa AlphaGo da DeepMind também é um bom exemplo de aprendizagem por reforço: ele chegou às manchetes em maio de 2017 quando venceu o campeão mundial Ke Jie no jogo Go. Ele aprendeu sua política vitoriosa analisando milhões de jogos e depois jogando muitas vezes contra si mesmo, sendo que a aprendizagem foi desativada durante os jogos contra o campeão, assim, o AlphaGo estava apenas aplicando a política que havia aprendido anteriormente (GERON, 2019). 8 Figura 1.4 – Exemplo genérico de detecção de anomalias (GERON, 2019) Figura 1.5 – Aprendizagem por reforço (GERON, 2019) 1.3.4 Aprendizagem Profunda (ou Deep Learning) Os pássaros nos inspiraram a voar, da mesma forma que a natureza inspirou inúmeras outras invenções. Parece lógico, então, olhar para a arquitetura do cérebro em busca de inspiração sobre como construir uma máquina inteligente. Esta é a lógica que inspirou a criação 9 das redes neurais artificiais (RNA’s): uma RNA é um modelo de aprendizagem de máquina supervisionada inspirada nas redes de neurônios biológicos do nosso cérebro. No entanto, embora os aviões tenham sido inspirados por pássaros, eles não precisam bater as asas para voar. Da mesma forma, as RNA se tornaram gradualmente muito diferentes de seus primos biológicos. Alguns pesquisadores até argumentam que devemos abandonar completamente a analogia biológica (por exemplo, dizendo "unidades" em vez de "neurônios"), para não restringir nossa criatividade a sistemas biologicamente plausíveis (GERON, 2019). As RNA são o conceito central de Aprendizagem Profunda. Elas são versáteis, poderosas e escaláveis. São ideais para lidar com tarefas de aprendizagem de máquina grandes e altamente complexas, como classificar bilhões de imagens (por exemplo, Imagens do Google), fazer o reconhecimento de voz em assistentes pessoais digitais (por exemplo, Siri da Apple), recomendar os melhores vídeos para assistir a centenas de milhões de usuários todos os dias (como no YouTube) ou aprendendo a vencer o campeão mundial no jogo Go (AlphaGo da DeepMind). A arquitetura mais simples possível de uma RNA é chamada de Perceptron. Ele representa um único neurônio artificial, ligeiramente diferente de um neurônio biológico. Observe a Figura 1.6: um perceptron é formado por duas ou mais entradas numéricas (xi), cada uma delas normalmente é associada a um peso (wi); o perceptron irá somar o valor das entradas multiplicado pelo valor dos seus respectivos pesos; o valor desse somatório é a entrada de uma função de ativação, e o resultado desta função é a saída produzida pelo perceptron. Figura 1.6 – Funcionamento de um Perceptron (GERON, 2019) Um único perceptron não é capaz de solucionar problemas complexos. Para tal, assim como o cérebro humano possui várias camadas, nas quais a saída de um neurônio torna-se a entrada de outros, também é possível configurar dezenas, centenas, milhares e até milhões de neurônios artificiais em diferentes arquiteturas, formadas por inúmeras camadas. É neste contexto que surge o conceito de Aprendizagem Profunda: ela é formada por uma arquitetura de RNA que possui duas ou mais camadas “ocultas” de neurônios (aquelas que estão entre a camada de entrada e a camada de saída). Observe a Figura 1.7 em que são mostradas diferentes arquiteturas de RNA, em que são combinados diversos neurônios. Todos os modelos com duas ou mais camadas (excetuando-se as entradas e as saídas) são modelos de aprendizagem profunda. 10 Figura 1.7 – Arquiteturas de Redes Neurais Artificiais Fonte: https://www.asimovinstitute.org/the-neural-network-zoo-2016 1.4 Roteiro Nesta seção iremos apresentar o conteúdo que estudaremos em cada capítulo do módulo. 1.4.1 Pré-requisitos Os únicos conhecimentos necessários que você precisará ter para compreender o conteúdo estudado neste módulo são os conceitos básicos para tratamento de dados da linguagem de programação Python1. Os trechos de código-fonte discutidos nos próximos capítulos foram implementados e utilizam pacotes em Python 3, portanto, vamos considerar que você possui algum tipo de familiaridade com esta linguagem de programação. Além disso, é importante que você conheça alguns recursos básicos da linguagem Python que são necessários para realizar tratamentos básicos sobre os dados que serão analisados pelos algoritmos de aprendizagem de máquina. Nos exemplos práticos, discutiremos com detalhes o código-fonte apresentado, que realiza tanto o tratamento dos dados quanto a implementação dos algoritmos. Contudo, iremos nos concentrar na construção, configuração, treinamento e avaliação dos algoritmos de aprendizagem de máquina. Se você conhece pouco a linguagem Python, não se preocupe! Com o código-fonte disponível e um pouco de pesquisa, você será capaz de compreender toda a lógica de programação. 1https://www.python.org/downloads https://www.asimovinstitute.org/the-neural-network-zoo-2016 https://www.python.org/downloads/ 11 Também utilizaremos alguns pacotes específicos em Python para executar os exemplos discutidos nos próximos capítulos. São eles: NumPy2, SciPy3, pandas4, matplotlib5, seaborn6, scikit-learn7, keras8 e tensorflow9. Em cada capítuloserão utilizados alguns pacotes mais específicos sobre algumas técnicas de Inteligência Artificial, neste caso, as instruções serão fornecidas no próprio capítulo. 1.4.2 Assuntos abordados no módulo Este primeiro Capítulo é uma introdução ao conceito de Aprendizagem de Máquia (AM). Já discutimos rapidamente o que é AM e como ela ganhou relevância na construção de sistemas inteligentes, principalmente nas últimas décadas. AM é uma área bastante extensa e possui diversos tipos, como a Aprendizagem Supervisionada, Aprendizagem não Supervisionada, Aprendizagem por Reforço e Aprendizagem Profunda. Contudo, nesta disciplina iremos discutir os principais algoritmos de Aprendizagem Supervisionada, tanto a área de Classificação quanto Regressão, além do conceito de Aprendizagem Profunda, baseado na arquitetura de redes neurais artificiais. No Capítulo 2 discutiremos as principais atividades relacionadas à aprendizagem supervisionada, referentes tanto às técnicas de classificação quanto de regressão. De acordo com o tipo de resposta que buscamos, estamos visando diretamente um determinado conjunto de técnicas. Se a pergunta pode ser respondida apenas com Sim/Não, ou admite apenas um conjunto discreto de respostas, selecionadas a partir de um número finito de escolhas, estamos em frente a um problema de classificação. Por exemplo: “Dados os resultados de um teste clínico, o paciente sofre de diabetes?”. Por outro lado, se a pergunta a ser respondida é a previsão de uma quantidade com valor real, nos deparamos com um problema de regressão. Por exemplo: “A partir das características de um imóvel, qual é o seu valor de mercado?” Neste capítulo, conheceremos as atividades necessárias para executar essas técnicas: importação dos dados, tranformações dos dados, treinamento, teste e validação. No Capítulo 3 estudaremos alguns dos principais algoritmos de classificação, cujo objetivo é prever o rótulo de uma classe, que é uma escolha em uma lista predefinida de possibilidades. A classificação normalmente é dividida em classificação binária, que é o caso especial de distinguir exatamente entre duas classes, e multiclasse, que é aquela entre mais de duas classes. Você pode pensar na classificação binária como uma tentativa de responder a uma pergunta sim / não. Classificar emails como spam ou não spam é um exemplo de problema de classificação binária. Vamos conhecer três dos algoritmos de classificação mais usados, e explicaremos como eles aprendem com os dados, como fazem previsões e examinaremos os pontos fortes e fracos de cada algoritmo, sendo eles: K-Nearest Neighbor (KNN), Árvores de Decisão e Support Vector Machines (SVM). No Capítulo 4 apresentaremos a análise de regressão e algumas de suas aplicações. A regressão está relacionada a como fazer previsões sobre as quantidades do mundo real, como, por exemplo, as previsões relacionadas a perguntas do tipo: como o volume de vendas muda com as mudanças no preço? Ela pede uma resposta que pode ser expressa como uma combinação de 2http://docs.scipy.org/doc/numpy-1.10.1/user/install.html 3http://www.scipy.org/install.html 4https://pandas.pydata.org 5http://matplotlib.org/1.4.2/users/installing.html 6https://seaborn.pydata.org 7http://scikit-learn.org/stable/install.html 8https://keras.io/ 9https://www.tensorflow.org/?hl=pt-br http://docs.scipy.org/doc/numpy-1.10.1/user/install.html http://www.scipy.org/install.html https://pandas.pydata.org/ http://matplotlib.org/1.4.2/users/installing.html https://seaborn.pydata.org/ http://scikit-learn.org/stable/install.html https://keras.io/ https://www.tensorflow.org/?hl=pt-br 12 uma ou mais variáveis independentes (também chamadas de covariáveis ou preditores). O papel da regressão é construir modelos para prever as respostas dessas variáveis contínuas. Iremos aprender os conceitos de Regressão Linear Simples, Regressão Linear Múltipla, Regressão Polinomial e Regressão Logística. No Capítulo 5 conheceremos uma família de algoritmos de aprendizagem supervisionada, conhecida como redes neurais artificiais, que recentemente teve um renascimento com o nome de "aprendizagem profunda". Embora a aprendizagem profunda mostre uma grande promessa em muitas aplicações, a técnica costuma realizar ajustes com muito cuidado para que possa ser usada em um caso específico. Neste capítulo, iremos discutir algumas técnicas, como o uso de Perceptrons multicamadas (Multilayer Perceptrons – MLP’s) para classificação e regressão, que podem servir como um ponto de partida para métodos de aprendizagem profunda mais complexos. MLP’s também são conhecidos como redes neurais feed-forward, ou, às vezes, apenas redes neurais. Iremos introduzir os conceitos de Perceptrons e o modelo de redes neurais artificiais. Vamos aprender também como configur as redes neurais artificiais para realizar tarefas de aprendizagem profunda. Em todos os próximos quatro capítulos, você irá aprender os conceitos apresentados por meio de uma série de exemplos práticos implementados na linguagem de programação Python. Sempre iniciaremos o estudo por meio da análise de exemplos mais simples, e aos poucos iremos adicionar mais conceitos para que você possa entender os exemplos mais complexos. O objetivo é fornecer uma base com os conceitos fundamentais de Aprendizagem de Máquina, de forma prática, para que futuramente você possa se aprofundar nos temas de seu maior interesse, no ritmo e intensidade que você julgar necessários. 1.4.3 Recursos usados no módulo Outro tema importante são os recursos que você utilizará ao longo do módulo. Em várias aulas, solicitaremos que você importe algum arquivo ou execute algum script já pronto para agilizar o andamento dos estudos. Todos esses recursos estão compactados em uma pasta que você pode baixar no seguinte link: https://cutt.ly/xgYqlKp. Recomendamos que logo no início, você salve esse arquivo e o descompacte em alguma pasta no seu computador. Durante o módulo, sempre que solicitarmos que você utilize algum arquivo, você pode buscá-lo nessa pasta. 1.4.4 Ecossistema de programação interativa Python: Anaconda e Jupyter Notebook Os exemplos disponibilizados estão implementados em IPython10: um interpretador interativo para várias linguagens de programação, mas especialmente focado em Python. Mais precisamente, usaremos IPython por meio da plataforma Anaconda11, uma distribuição gratuita e de código aberto das linguagens de programação Python e R para computação científica (ciência de dados, aplicações de aprendizagem de máquina, processamento de dados em grande escala, análise preditiva, etc.), que visa simplificar o gerenciamento de pacotes e os desdobramentos da implementação de tal solução. Assim, você deve seguir os seguintes passos para instalar o ecossistema necessário para executar os exemplos: 1) acessar o endereço https://www.anaconda.com e instalar a versão open source (Individual Edition) da plataforma Anaconda; existem versões disponíveis para Windows, Linux e MacOS; 10https://ipython.org/install.html 11https://www.anaconda.com https://cutt.ly/xgYqlKp https://www.anaconda.com/ https://ipython.org/install.html https://www.anaconda.com/ 13 2) uma vez instalada a distribuição Anaconda, você deve executar o comando anaconda- navigator; o Anaconda Navigator é uma interface gráfica desktop incluída na distribuição do Anaconda que permite iniciar aplicativos e gerenciar facilmente bibliotecas e ambientes para ciência de dados e inteligência artificial; você deve instalar os seguintes pacotes que serão necessários ao longo dos próximos capítulos: NumPy, SciPy, pandas, matplotlib, seaborn, scikit- learn e tensorflow. 3) A partir do Anaconda Navigator, intalar o Jupyter Notebook: um ambiente open source baseado na web que permite criare compartilhar documentos Python interativos (IPython). 1.5 Considerações Finais Neste primeiro capítulo do módulo, introduzimos os principais conceitos relacionados a Aprendizagem de Máquina (AM). Você conheceu a definição de AM e estudou quais são os seus principais tipos, como a Aprendizagem Supervisionada, Aprendizagem não Supervisionada, Aprendizagem por Reforço e Aprendizagem Profunda (Deep Learning). Dentre esses tipos, discutimos que atualmente as principais técnicas para a construção de sistemas inteligentes são as técnicas supervisionadas, especialmente Deep Learning. Você conheceu o roteiro que estudaremos nos próximos capítulos, que incluem técnicas de classificação, regressão e redes neurais profundas. No próximo capítulo daremos início aos estudos sobre as atividades que devem ser executadas para a construção de modelos preditivos. Unidade 2: Atividades de Aprendizagem Supervisionada 2.1 Considerações Iniciais Neste capítulo estudaremos um tipo específico de aprendizagem de máquina: a aprendizagem supervisionada. Como desenvolvedor de soluções inteligentes, a primeira etapa que você precisa aplicar a um determinado problema é identificar a pergunta a ser respondida com base nos dados. De acordo com o tipo de resposta que buscamos, estamos visando diretamente um determinado conjunto de técnicas. Se a pergunta pode ser respondida apenas com Sim/Não, ou admite apenas um conjunto discreto de respostas, selecionadas a partir de um número finito de escolhas, estamos em frente a um problema de classificação. Por exemplo: “Dados os resultados de um teste clínico, o paciente sofre de diabetes?” Ou “Dadas as características de uma planta, é possível determinar a sua espécie?”. Por outro lado, se a pergunta a ser respondida é a previsão de uma quantidade com valor real, nos deparamos com um problema de regressão. Por exemplo: “A partir das características de um imóvel, qual é o seu valor de mercado?” Ou “Dados os registros anteriores de atividade do usuário em Apps, por quanto tempo um determinado cliente ficará conectado ao nosso App?” Nas próximas seções, conheceremos as atividades que são executadas em problemas de aprendizagem supervisionada, seja classificação ou regressão. O capítulo está estruturado da seguinte forma: na Seção 2.2 vamos introduzir o estudo de caso que será usado para compreender as atividades iniciais da aprendizagem supervisionada; na Seção 2.3 descreveremos os detalhes dessas atividades: importação dos dados, transformações dos dados, treinamento, teste e validação; por fim, a Seção 2.4 faz as considerações finais do capítulo. 2.2 Estudo de caso 14 Como exemplo neste capítulo, usamos os dados do Lending Club12 para desenvolver nossa compreensão dos conceitos das atividades de aprendizagem supervisionada. O Lending Club é uma empresa que oferece empréstimos bancários financiados por outras pessoas. Nesse sentido, ele atua como um hub que conecta os mutuários aos investidores. O mutuário solicita um empréstimo de determinado valor e a empresa avalia o risco da operação. Se o pedido for aceito, ele pode ou não ser totalmente coberto. Vamos nos concentrar na previsão que responderá se o empréstimo será totalmente financiado, com base na pontuação e nas informações relacionadas. Usaremos o conjunto de dados parcial do período 2007–2011. Especificando um pouco mais o problema, com base nas informações fornecidas pelo cliente que solicita um empréstimo, queremos prever se ele será concedido até um determinado limite. Os atributos que usamos neste problema estão relacionados a alguns dos detalhes do pedido de empréstimo, como o valor do empréstimo aplicado ao mutuário, o pagamento mensal a ser feito pelo mutuário se o empréstimo for aceito, a renda anual do mutuário, a taxa de juros do empréstimo, entre outros. Nesse caso, podemos prever os empréstimos aceitos sem sucesso. Um pedido de empréstimo é mal sucedido se o valor financiado (coluna funded_amnt) ou o valor financiado pelos investidores (coluna funded_amnt_inv) fica muito aquém do valor do empréstimo solicitado (coluna loan_amnt). Isso pode ser determinado pela seguinte fórmula: 2.3 Atividades 2.3.1 Importação dos dados A primeira atividade em um processo de aprendizagem supervisionada será importar os dados de que precisamos para treinar o algoritmo. Eles podem estar armazenados em diferentes formatos, sendo os arquivos do tipo CSV um dos mais comuns. A Figura 2.1 mostra o código para ler o arquivo com os dados do nosso estudo de caso. Figura 2.1 – Importação dos dados 2.3.2 Transformação dos dados Depois de realizar a importação, geralmente precisamos transformar os dados em uma representação adequada para modelos de aprendizagem de máquina. Para muitos algoritmos, essa representação terá a forma de uma estrutura vetorial ou de matriz que contém dados numéricos. Os desafios comuns durante a transformação de dados incluem: 12https://www.lendingclub.com/info/download-data.action https://www.lendingclub.com/info/download-data.action 15 transformar dados categóricos (como a categoria de um filme) e codificá-los em uma representação numérica; extrair informações úteis de atributos textuais; lidar com dados de imagem ou áudio; converter dados numéricos em dados categóricos para reduzir o número de valores que uma variável pode assumir; um exemplo disso é a conversão de uma variável para idade em intervalos como 25-35, 45-55 e assim por diante; A Figura 2.2 mostra uma função que realiza uma etapa da atividade de transformação, ao mapear o atributo term_clean do tipo string para um atributo numérico. Figura 2.2 – Transformação dos dados 2.3.3 Treinamento A próxima etapa é o treinamento: executar o algoritmo usando o conjunto de dados para que ele “aprenda” a reconhecer o padrão de cada classe. A partir daí, o classificador pode ser usado para prever o resultado sobre dados novos. A Figura 2.3 mostra o código-fonte para realizar o treinamento dos dados sobre empréstimos bancários com o algoritmo KNN (K-Nearest Neighbors). Figura 2.3 – Treinamento dos dados 16 Avaliação da qualidade dos classificadores: Matriz de confusão Uma matriz de confusão é uma tabela que é usada para descrever o desempenho de um classificador, ao prever a classe de exemplos que não estão no conjunto original de dados (treinamento). Cada linha na matriz representa as instâncias da classe prevista, e cada coluna representa as instâncias da classe real. Esse nome é usado porque a matriz facilita a visualização se o modelo confundir ou rotular incorretamente suas classes. Nós comparamos cada classe com todas as outras e vemos quantas amostras são classificadas corretamente e incorretamente. Durante a construção da matriz, encontramos alguns conceitos importantes descritos a seguir. Considere um caso de classificação binária em que as saídas possíveis sejam 0 (Falso) ou 1 (Verdadeiro): Verdadeiro positivo (VP): são amostras para as quais foi previsto 1 e valor real é 1. Verdadeiro negativo (VN): são amostras para as quais foi previsto 0 e valor real é 0. Falso positivo (FP): são amostras para as quais foi previsto 1 e valor real é 0. Falso negativo (FN): são amostras para as quais foi previsto 0 e valor real é 1. Dependendo do problema em questão, talvez seja necessário otimizar o algoritmo para reduzir a taxa de falsos positivos ou de falsos negativos. Por exemplo, em um sistema de identificação biométrica, é muito importante evitar falsos positivos, porque as pessoas erradas podem ter acesso a informações confidenciais. Em termos de métricas de avaliação, existem basicamente quatro conceitos: acurácia, precision, recall e F1-score. A acurácia é a métrica de desempenho mais comum, ela simplesmente indica a proporção de previsõescorretas, por meio da fórmula: Precision é a proporção de cada verdadeiro positivo com o total de positivos. Podemos pensar nessa métrica como um ruído de medição das previsões, isto é, quando o classificador prevê algo como positivo, qual a probabilidade de realmente ser positivo. Um classificador com valor alto de precision é considerado pessimista, pois ele apenas classificará uma observação como positiva quando tiver certeza disto. Formalmente, a fórmula para o cálculo de precision é: Recall é a proporção de cada observação positiva que é verdadeiramente positiva. Podemos pensar nessa métrica como a habilidade do classificador em identificar observações da classe positiva. Classificadores com alto valor de recall são considerados otimistas, pois eles tendem a prever as observações como positivas. A fórmula para o cálculo de recall é: Por sua vez, F1-score é uma métrica que busca equilibrar precision e recall, por meio de uma média harmônica (tipo de média utilizada para proporções): 17 A Figura 2.4 mostra o código-fonte que mostra a acurácia para o modelo treinado do nosso estudo de caso, e a distribuição dos rótulos no conjunto de dados. Por sua vez, a Figura 2.5 mostra como calcular e visualizar a matriz de confusão. Figura 2.4 – Acurácia e distribuição dos rótulos Figura 2.5 – Calcular matriz de confusão A Figura 2.6 mostra o código-fonte que exibe o desempenho do classificador com os dados de treinamento. A medida de desempenho é perfeita: 100% de precisão e uma matriz de confusão diagonal, o que parece ser bom. O erro detectado nesta fase é chamado de erro de treinamento (ou erro dentro da amostra), que se refere ao erro medido em todas as amostras de dados observadas no conjunto de treinamento. Até este ponto, verificamos o desempenho do classificador nos mesmos dados com os quais ele foi treinado, o que é uma prática não recomendada. Durante a exploração, em aplicações reais, precisamos avaliar o classificador utilizando dados não vistos anteriormente, ou seja, dados que não estão no conjunto de treinamento, como é descrito na próxima seção. 18 Figura 2.6 – Desempenho dos dados de treinamento 2.3.4 Teste Para avaliar o desempenho do classificador, precisamos testá-lo com dados desconhecidos. Assim surge o conceito de erro do teste ou erro de generalização, que é aquele esperado em dados novos. Para isso, uma prática bastante comum é usar um subconjunto dos dados de treinamento. Assim, precisamos dividir o conjunto original dos dados em duas partes: o conjunto de treinamento (normalmente 70% dos dados) e o conjunto de testes (normalmente 30% dos dados). A Figura 2.7 mostra essa divisão e o desempenho do classificador com dados desconhecidos. Perceba a mudança da matriz de confusão e da acurácia. Figura 2.7 – Desempenho dos dados de teste Ao utilizar esta técnica, você perceberá que diferentes algoritmos, ou até o mesmo algoritmo configurado com parâmetros diferentes, podem apresentar desempenhos diferentes para o mesmo conjunto de dados. As Figuras 2.8 e 2.9 apresentam, respectivamente, o código- fonte e o gráfico que mostra quatro boxplots com o desempenho do algoritmo KNN com K=1 e K=3, SVM e Árvores de Decisão. Perceba que o melhor desempenho foi apresentado pelo algoritmo SVM. 19 Figura 2.8 – Código para mostrar o desempenho de quatro algoritmos no mesmo conjunto de dados Figura 2.9 – Desempenho dos algoritmos: destaque para o SVM. 2.3.5 Curvas de Aprendizagem Vamos simular o efeito do número de exemplos nas taxas de erro de treinamento e teste para algoritmos de uma determinada complexidade. Essa curva é chamada de curva de aprendizagem. Vamos nos concentrar por um momento em um caso mais simples, utilizando conjuntos de teste e treinamento com dados aleatórios. Vamos considerar um classificador e 20 variar o número de exemplos com que o alimentamos para fins de treinamento, depois verificar o comportamento do treinamento e testar a precisão à medida que o número de exemplos aumenta. Neste caso particular, usaremos o algoritmo de árvore de decisão com profundidade máxima fixa. A variável C=5 mostrada na Figura 2.10 representa a complexidade do algoritmo, ou seja, a profundidade da árvore de decisão. Observe na Figura que conforme o número de amostras de treinamento aumenta, ambos os erros tendem para o mesmo valor. Quando temos poucos dados de treinamento, o erro de treinamento é muito pequeno, mas o erro de teste é muito grande. Figura 2.10 – Curvas de aprendizagem (erros de teste e treinamento) para um classificador de alta complexidade Agora, vamos repetir o processo com um classificador mais simples: uma árvore de decisão com profundidade máxima igual a 1 (C=1). Observe a Figura 2.11 em que o gráfico compara o resultado do exemplo anterior (classificador complexo) com o classificador mais simples e analise a diferença. É possível observar o seguinte: com um baixo grau de complexidade, os erros de treinamento e teste convergem mais cedo / com menos dados; além disso, com um baixo grau de complexidade, o erro de convergência é maior do que com o aumento da complexidade. O valor em que os dois erros convergem (teste e treinamento) também é chamado de viés (bias); e a diferença entre esse valor e o erro de teste é chamada de variância. A decomposição de viés / variância da curva de aprendizado é uma abordagem alternativa para a visão de treinamento e generalização. Vamos agora representar graficamente o comportamento de aprendizagem para um número fixo de exemplos com respeito à complexidade do classificador. Podemos usar os mesmos dados, mas agora vamos alterar a profundidade máxima da árvore de decisão, que determina a complexidade do classificador. 21 Figura 2.11 – Curvas de aprendizagem (erros de teste e treinamento) para um classificador de alta e um classificador de baixa complexidade Figura 2.12 – Curvas de aprendizagem (erros de teste e treinamento) para um mesmo conjunto de dados, com aumento da complexidade do algoritmo. Observe a Figura 2.12 em que é possível observar que conforme a complexidade do classificador aumente (profundidade da árvore de decisão), o erro de treinamento é reduzido; mas acima de um certo nível de complexidade, o erro de teste passa a aumentar. Este efeito é chamado de overfitting. Existem algumas possibilidades para reduzir este problema: os modelos geralmente são configurados por meio de alguns hiperparâmetros. A determinação da complexidade do classificador geralmente é determinada por eles. Assim, temos a possibilidade de escolher o modelo ideal para nosso conjunto de dados. Uma boa solução para selecionar a complexidade é escolher o valor dos hiperparâmetros que produzam o menor erro de teste estimado. Isso pode ser feito usando validação cruzada (cross-validation). Existem vários tipos de validação cruzada, como leave-one-out e K-Fold: no método leave-one-out, dadas N amostras do conjunto de dados, o classificador é treinado com N-1 amostras e testado com o restante; esse processo é repetido N vezes, uma vez por amostra de treinamento e o resultado final é a média dos erros; 22 no método K-Fold, o conjunto de treinamento é dividido em K partes (folds) não sobrepostas; as partes K-1 são usadas para treinamento e a restante usada para teste; este processo é repetido K vezes, e o resultado final é a média dos erros. As estratégias de seleção dos hiperparâmetros e validação cruzada podem ser usadas para auxiliar a selecionar a complexidade de um classificador, em um processo chamado validação, como descrito na próxima seção. 2.3.6 Validação Como estudamos anteriormente, precisamos selecionar um algoritmo de classificação e controlar sua complexidade de acordo com o número de dados de treinamento. Para fazer isso, podemos começar usando uma técnicade seleção de classificador. Já descrevemos como fazer isso, quando comparamos o desempenho de diferentes classificadores. Nesse caso, nossa melhor aposta era selecionar o classificador com o menor erro de treinamento. De forma análoga à seleção do classificador, podemos pensar na estratégia de selecionar os melhores hiperparâmetros, escolhendo aqueles que apresentam o melhor desempenho. Assim, podemos selecionar um conjunto de valores de hiperparâmetros e usar a validação cruzada para selecionar a melhor configuração. O processo de seleção dos melhores hiperparâmetros é chamado de validação. Isso introduz um novo conjunto em nosso esquema de simulação; agora precisamos dividir os dados que temos em três conjuntos: conjuntos de treinamento, validação e teste. Como vimos, o processo de avaliar o desempenho do classificador estimando o erro de generalização é chamado de teste. E o processo de seleção de um modelo usando a estimativa do erro de generalização é chamado de validação. Há uma diferença sutil, mas crítica entre os dois e temos que estar cientes disso ao lidar com problemas de classificação: os dados de treinamento são usados para que o algoritmo possa "aprender" os padrões existentes nos exemplos do conjunto de dados; os dados de teste são usados exclusivamente para avaliar o desempenho no final do processo e nunca serão usados no processo de aprendizagem; os dados de validação são usados explicitamente para selecionar os hiperparâmetros / classificadores com o melhor desempenho de acordo com uma estimativa do erro de generalização. Esta é uma forma de aprendizado. Na prática, recebemos apenas dados de treinamento e, no caso mais geral, temos que ajustar explicitamente alguns hiperparâmetros. Assim, como dividimos o conjunto de dados? A seguinte estratégia pode ser usada: 1) divida o conjunto de dados original em dados de treinamento e teste; por exemplo, use 30% do conjunto de dados original para fins de teste, que serão usados apenas para avaliar o desempenho do classificador; 2) use os dados de treinamento restantes para selecionar os hiperparâmetros por meio de validação cruzada; 3) treine o modelo com os hiperparâmetros selecionados e avalie o desempenho usando o conjunto de dados de teste. A Figura 2.13 mostra o resultado da execução do código-fonte que usa a estratégia K-Fold (10 partições) de validação cruzada, para avaliar o desempenho do hiperparâmetro profundidade do algoritmo de classificação árvore de decisão. 23 Figura 2.13 – Boxplots com a acurácia de diferentes complexidades da árvore de decisão O gráfico é resultado de 18 iterações, em que a variação da complexidade ocorreu da profundidade 2 até 19. Como podemos ver na Figura, a melhor acurácia média é obtida pelo quinto modelo, cuja profundidade máxima é 6. Embora possamos verificar que a melhor precisão é com um valor de complexidade de 6, não podemos dizer nada sobre o valor que ela alcançará. Para ter uma estimativa desse valor, precisamos executar o modelo em um novo conjunto de dados diferente, tanto no treinamento quanto no teste. 2.4 Considerações Finais Neste segundo capítulo, nós descrevemos os principais conceitos e atividades relacionados a construção de modelos preditivos, baseados em algoritmos de aprendizagem supervisionada, também chamados de classificadores. Você estudou como realizar a importação dos dados de um estudo de caso sobre empréstimos financeiros, e como realizar algumas transformações básicas sobre os dados para que eles possam ser efetivamente usados em um classificador. Na sequência, vimos as três atividades principais que devem ser executadas na construção de um classificador: a fase de treinamento é executada para que o algoritmo possa "aprender" os padrões existentes nos exemplos do conjunto de dados; na fase de teste o desempenho do algoritmo é avaliado; e por fim, na validação são selecionados os hiperparâmetros / modelos com o melhor desempenho, de acordo com uma estimativa do erro de generalização. Você aprendeu o conceito de matriz de confusão, usado para gerar as principais métricas que avaliam o desempenho de um classificador: acurácia, precision, recall e F1-score. Por fim, você aprendeu o conceito de curva de aprendizagem, analisando o desempenho de algoritmos com diferentes complexidades, sobre diferentes tamanhos de conjunto de dados. Na próxima unidade, estudaremos o funcionamento de alguns dos principais algoritmos de aprendizagem supervisionada: KNN, Árvores de Decisão e SVM. Unidade 3: Aprendizagem Supervisionada - Classificação 3.1 Considerações Iniciais A aprendizagem supervisionada é usada quando queremos prever um resultado a partir de um determinado conjunto de entradas. O objetivo é fazer previsões para dados novos com o 24 máximo de precisão possível. Na classificação, o objetivo é prever o rótulo de classe, que é uma escolha em uma lista predefinida de possibilidades. A classificação normalmente é dividida em classificação binária, que é o caso especial de distinguir exatamente entre duas classes, e multiclasse, que é aquela entre mais de duas classes. Você pode pensar na classificação binária como uma tentativa de responder a uma pergunta sim / não. Classificar emails como spam ou não spam é um exemplo de problema de classificação binária. Nesta tarefa de classificação binária, a pergunta sim / não feita seria "Este e-mail é spam?" Neste capítulo, estudaremos alguns dos algoritmos de classificação mais usados, e explicaremos como eles aprendem com os dados e como fazem previsões. Também discutiremos como o conceito de complexidade do modelo funciona para cada um deles e forneceremos uma visão geral de como cada algoritmo constrói tal modelo. Examinaremos os pontos fortes e fracos de cada algoritmo e a que tipo de dados eles podem ser melhor aplicados. Também explicaremos o significado dos hiperparâmetros e as configurações mais importantes. O capítulo está estruturado da seguinte forma: na Seção 3.2 vamos introduzir os conceitos do algoritmo K-Nearest Neighbor (KNN); na Seção 3.3 descreveremos os detalhes do algoritmo de classificação por Árvores de Decisão; na Seção 3.4 estudaremos o algoritmo Support Vector Machines (SVM); por fim, a Seção 3.5 faz as considerações finais do capítulo. 3.2 O Algoritmo K-Nearest Neighbor (KNN) KNN é o algoritmo mais simples usado em aprendizagem de máquina, pois construir o classificador consiste apenas em armazenar o conjunto de dados de treinamento. Para fazer uma previsão para um novo item de dado, o algoritmo encontra os itens mais próximos no conjunto de treinamento, usando a estratégia “vizinhos mais próximos”. Em sua versão mais simples, o algoritmo considera apenas um vizinho mais próximo, que é o item de dados do treinamento mais próximo do item para o qual queremos fazer uma previsão. A Figura 3.1 mostra essa estratégia, considerando um conjunto de dados genérico. Figura 3.1 – Predições feitas pelo classificador KNN, com K=1, para um conjunto de dados genérico Perceba que são adicionados três novos itens de dados, representados por uma estrela. Para cada uma delas, marcamos o ponto mais próximo no conjunto de treinamento. A previsão do algoritmo é o vizinho mais próximo ao item. Em vez de considerar apenas o vizinho mais próximo, também podemos considerar um número arbitrário K de vizinhos (neighbours). É justamente daí 25 que vem o nome do algoritmo K-Neighbours. Ao considerar mais de um vizinho, contamos quantos deles são da cor laranja e quantos são azuis. Em seguida, atribuímos a classe que é a mais frequente: em outras palavras, a classe majoritária entre os K vizinhos. A Figura 3.2 usa os três vizinhos mais próximos. Novamente, a previsão é mostrada como a cor da estrela. Você pode ver que a previsão mudou para o item no canto superior esquerdo,quando foi usado apenas um vizinho. Figura 3.2 – Predições feitas pelo classificador KNN, com K=3, para um conjunto de dados genérico 3.2.1 Analisando o algoritmo KNN Considerando um conjunto de dados genérico e bidimensional, também podemos ilustrar a previsão para todos os pontos de teste possíveis no plano xy. Colorimos o plano de vermelho nas regiões onde os pontos seriam atribuídos à classe vermelha e, caso contrário, de azul. Isso nos permite visualizar o limite de decisão, que é a divisão entre onde o algoritmo atribui um item à classe vermelha ou à classe azul. A Figura 3.3 mostra uma visualização do limite de decisão para um, três e cinco vizinhos. Figura 3.3 – Limite de decisão para três possíveis valores de K 26 Vamos investigar se podemos confirmar a conexão entre a complexidade do modelo e seu poder de generalização. Faremos isso no conjunto de dados de câncer de mama do mundo real. Começamos dividindo o conjunto de dados em um treinamento e um conjunto de teste. Em seguida, avaliaremos o desempenho do treinamento e do conjunto de testes com diferentes números de vizinhos. O gráfico da Figura 3.4 mostra a acurácia do conjunto de treinamento e teste no eixo y em comparação com a configuração de N vizinhos no eixo x. Embora os gráficos do mundo real raramente sejam muito suaves, ainda podemos reconhecer algumas das características de overfitting. Considerando um único vizinho mais próximo, a previsão do conjunto de treinamento é perfeita. Considerando mais vizinhos, a acurácia do treinamento diminui. A precisão do conjunto de teste para usar um único vizinho é menor do que ao usar mais vizinhos, indicando que usar um único vizinho mais próximo leva a um modelo que é pouco complexo. Por outro lado, ao considerar 10 vizinhos o desempenho é pior. O melhor desempenho está em algum lugar no meio, usando seis vizinhos. Deve-se ter em mente que o pior desempenho é de cerca de 88% de acurácia, o que ainda pode ser aceitável. Figura 3.4 – Acurácia do algoritmo KNN para diferentes valore de K 3.2.2 Regressão com o algoritmo KNN Também existe uma variante de regressão do algoritmo de KNN. Mais uma vez, vamos começar usando um único vizinho mais próximo, utilizando outro conjunto de dados genérico. Observe a Figura 3.5: adicionamos três itens de dados de teste como estrelas verdes no eixo x. A previsão usando um único vizinho é apenas o valor do vizinho mais próximo, mostrado como a estrela azul. Também é possível usar mais de um vizinho mais próximo para a regressão. Neste caso, a previsão é a média dos vizinhos mais relevantes. Para conjuntos de dados unidimensionais, podemos facilmente ver as previsões para todos os valores possíveis dos atributos. Na Figura 3.6, os pontos vermelhos são as respostas para os dados de treinamento, enquanto a linha vermelha é a previsão feita pelo classificador para todos os itens de dados. Usando apenas um único vizinho, cada ponto no conjunto de treinamento tem uma influência óbvia nas previsões, e os valores previstos passam por todos os pontos de dados. Isso leva a uma previsão muito instável. Considerar mais vizinhos leva a previsões mais suaves, mas elas também não se ajustam bem aos dados de treinamento. 27 Figura 3.5 – Exemplo de regressão para o algoritmo KNN, com K=1 Figura 3.6 – Exemplo de regressão para o algoritmo KNN, com K=1, K=3 e K=9 3.2.3 Vantagens, desvantagens e hiperparâmetros A princípio, existem dois hiperparâmetros importantes para o classificador KNN: o número de vizinhos e como você mede a distância entre os itens de dados. Na prática, usar um pequeno número de vizinhos como 3 ou 5 geralmente funciona bem, mas você certamente deve ajustar esse hiperparâmetro. A escolha da medida de distância certa está um pouco além do escopo deste capítulo. Por padrão, a distância euclidiana é usada, o que funciona bem em muitos conjuntos de dados. Um dos pontos fortes do KNN é que a estratégia do classificador é muito fácil de entender e geralmente oferece um desempenho razoável sem muitos ajustes. Este algoritmo é um bom método base antes de considerar técnicas mais avançadas. Ao usá-lo, é importante pré-processar seus dados, pois muitas vezes o algoritmo não funcionam bem em conjuntos de dados com muitos atributos ou em dados esparsos. Embora KNN seja fácil de entender, o algoritmo pode apresentar lentidão da previsão devido à sua incapacidade de lidar com muitos atributos. 28 3.3 Árvores de Decisão Árvores de decisão são algoritmos de aprendizagem de máquina que podem ser usados para tarefas tanto de classificação quanto de regressão. Essencialmente, eles aprendem uma hierarquia de perguntas do tipo "if-else", levando a um encadeamento de decisões. Essas perguntas são semelhantes às perguntas que você pode fazer em um jogo de perguntas. Imagine que você queira distinguir entre os quatro animais a seguir: urso (bear), falcão (hawk), pinguim (penguin) e golfinho (dolphin). Seu objetivo é chegar à resposta certa fazendo o mínimo possível de perguntas. Você pode começar perguntando se o animal tem penas (feathers), uma pergunta que restringe as possibilidades a apenas dois animais. Se a resposta for sim, você pode fazer outra pergunta que pode ajudá-lo a distinguir entre falcões e pinguins. Por exemplo, você pode perguntar se o animal pode ou não voar. Se o animal não tem penas, suas possíveis escolhas são golfinhos e ursos, e você precisará fazer uma pergunta para distinguir entre esses dois animais, por exemplo, perguntando se o animal tem nadadeiras (fins). Essa série de perguntas pode ser expressa como uma árvore de decisão, conforme mostrado na Figura 3.7. Nesta Figura, cada nó na árvore representa uma pergunta ou um nó terminal (também chamado de folha) que contém a resposta. As linhas conectam as respostas a uma pergunta com a próxima pergunta que você faria. No jargão de aprendizagem de máquina, construímos um classificador para distinguir quatro classes de animais (falcões, pinguins, golfinhos e ursos) usando os três atributos “tem penas”, “pode voar” e “tem nadadeiras”. Figura 3.7 – Exemplo de Árvore de Decisão 3.3.1 Construindo classificadores baseados em Árvores de Decisão Vamos analisar o processo de construção de uma árvore de decisão para um conjunto de dados genérico 2D mostrado no topo da Figura 3.8. O conjunto de dados possui duas formas de meia-lua de pontos azuis e vermelhos, consistindo em 50 pontos de dados cada. A aprendizagem com o algoritmo de árvore de decisão baseia-se em aprender uma sequência de perguntas “if-else” que nos leva à verdadeira resposta de forma mais rápida. Na configuração do algoritmo, essas questões são chamadas de testes (não deve ser confundido com o conjunto de testes, que são os dados que usamos para testar e ver o quão generalizável nosso classificador é). Normalmente, os dados não vêm na forma de atributos binários Sim / Não, 29 como no exemplo dos animais, mas são representados como atributos contínuos, como no conjunto de dados 2D mostrado no topo da Figura 3.8. Os testes que são usados em dados contínuos são do tipo “o atributo i é maior que o valor a”. Para construir uma árvore, o algoritmo analisa todos os testes possíveis e encontra aquele que é mais informativo sobre a variável em questão. A segunda parte da Figura 3.8 (depth=1) mostra o primeiro teste que é realizado: dividir o conjunto de dados horizontalmente em x[1] <= 0.06, que é a melhor linha de corte para separar os pontos azuis dos vermelhos. O nó superior, também chamado de raiz, representa todo o conjunto de dados, consistindo em 50 pontos vermelhos e 50 pontos azuis. Se o teste for verdadeiro, o ponto é atribuído ao nó esquerdo, que contém 2 pontos azuise 32 pontos vermelhos. Caso contrário, o ponto é atribuído ao nó direito, que contém 48 pontos azuis e 18 vermelhos. Esses dois nós correspondem às regiões superior e inferior mostradas na segunda parte da Figura 3.8. Mesmo que a primeira divisão tenha feito um bom trabalho ao separar os pontos azuis e vermelhos, a região inferior ainda contém pontos azuis e a região superior ainda contém muitos pontos vermelhos. Podemos construir um modelo mais preciso, repetindo o processo de busca do melhor teste em ambas as regiões. A terceira parte da Figura 3.8 (depth=2) mostra que a próxima divisão mais informativa para a região esquerda e direita é baseada em x[0]. Este processo recursivo produz uma árvore binária de decisões, com cada nó contendo um teste. Como alternativa, você pode pensar em cada teste como uma divisão da parte dos dados atualmente ao longo de um eixo. Isso produz uma visão do algoritmo como a construção de uma partição hierárquica. Como cada teste diz respeito a apenas um único atributo, as regiões na partição resultante sempre têm limites paralelos ao eixo. A Figura 3.8 mostra o particionamento dos dados na coluna da esquerda e a árvore resultante na coluna da direita. O particionamento recursivo dos dados é geralmente repetido até que cada região na partição (cada folha na árvore de decisão) contenha apenas um único valor de destino (uma única classe). Figura 3.8 – Classificação dos dados usando diferentes profundidades de Árvores de Decisão 3.3.2 Analisando Árvores de Decisão Podemos visualizar uma árvore de decisão usando a função export_graphviz do pacote scikit-learn. Ela cria um arquivo no formato dot, que é um formato de texto específico para armazenar gráficos. Definimos uma opção para colorir os nós para refletir a classe majoritária em cada um deles e passar os nomes das classes e atributos para que a árvore possa ser 30 devidamente rotulada. O resultado pode ser visualizado na Figura 3.9. A visualização da árvore fornece uma visão detalhada de como o algoritmo faz previsões, sendo um exemplo facilmente explicável para não especialistas. Árvores mais profundas (acima de dez níveis) são mais difíceis de apreender. Um método de inspecionar a árvore que pode ser útil é descobrir qual caminho a maioria dos dados realmente segue. Figura 3.9 – Árvore de decisão para o conjunto de dados sobre câncer de mama O valor samples mostrado em cada nó fornece o número de amostras em cada um deles, enquanto value fornece o número de amostras por classe. Seguindo os ramos à direita, vemos que texture_error <= 0.4732 cria um nó que contém apenas 8 amostras benignas, mas 134 malignas. O resto deste lado da árvore usa algumas distinções mais sutis para separar essas 8 amostras benignas restantes. Das 142 amostras que foram para a direita na divisão inicial, quase todas elas (132) acabaram na folha à direita. 3.3.3 Importância dos Atributos Em vez de analisar a árvore inteira, o que pode ser exaustivo, existem algumas métricas estatísticas úteis que podemos usar para resumir o comportamento da árvore. A métrica mais usada é a importância do atributo, que avalia a importância de cada atributo para a decisão que uma árvore toma. É representada por um número entre 0 e 1 para cada atributo, em que 0 significa “nada usado” e 1 significa “prediz perfeitamente a classe”. A soma das métricas de importância de todos os atributos é igual a 1. A Figura 3.10 mostra a importância dos atributos para o conjunto de dados sobre câncer de mama. 31 Figura 3.10 – Importância dos atributos para o conjunto de dados sobre câncer de mama 3.3.4 Vantagens, desvantagens e hiperparâmetros Conforme discutido anteriormente, os hiperparâmetros que controlam a complexidade do algoritmo de árvores de decisão são aqueles que interrompem a construção da árvore antes que ela seja totalmente desenvolvida. Normalmente, pode-se escolher estratégias de “poda” da árvore para evitar o overfitting, configurando hiperparâmetros como min_depth, max_leaf_nodes ou min_samples_leaf. As árvores de decisão têm duas vantagens sobre muitos dos algoritmos de aprendizagem de máquina: o classificador resultante pode ser facilmente visualizado e compreendido por não especialistas (pelo menos para árvores menores) e eles são completamente invariáveis para o dimensionamento dos dados, ou seja, o atributo é processado separadamente e as possíveis divisões dos dados não dependem de atividades de pré-processamento, como normalização ou padronização. As árvores de decisão funcionam bem quando você tem atributos que estão em escalas completamente diferentes ou uma mistura de atributos categóricos e contínuos. A principal desvantagem desse algoritmo é que, mesmo com o uso de estratégias de “poda”, as árvores de decisão tendem a se ajustar demais e não fornecem um bom desempenho de generalização. 3.4 Support Vector Machines (SVM) SVM são uma extensão de classificadores lineares que permite o treinamento de modelos mais complexos que não são definidos simplesmente por hiperplanos no espaço de entrada. Embora existam máquinas de vetores de suporte para classificação e regressão, nos restringiremos ao caso de classificação, conforme implementado na classe SVC do pacote scikit- learn. A matemática por trás deste algoritmo é um pouco complicada e está além do escopo deste capítulo. No entanto, tentaremos passar algumas intuições sobre a ideia por trás do método. 3.4.1 Modelos lineares e atributos não lineares Os modelos lineares podem ser bastante limitados em espaços de baixa dimensão, pois as linhas ou hiperplanos têm flexibilidade limitada. Uma maneira de tornar um modelo linear mais flexível é adicionando mais atributos, por exemplo, adicionando interações ou polinômios dos atributos de entrada. Um modelo linear para classificação só pode separar pontos usando uma linha e não será capaz de fazer um bom trabalho em um conjunto de dados como o mostrado na Figura 3.11. 32 Figura 3.11 – Limite da decisão de um classificador linear Agora, vamos expandir o conjunto de atributos de entrada, adicionando também feature1^2, ou seja, o quadrado do segundo atributo, como um novo atributo. Em vez de representar cada item de dado como um ponto bidimensional (feature0, feature1), agora vamos representá-lo como um ponto tridimensional (feature0, feature1, feature1^2). Escolhemos este atributo específico para fins de ilustração, contudo, o alvo da escolha não é particularmente importante. Esta nova representação é ilustrada na Figura 3.12, em um gráfico de dispersão tridimensional. Figura 3.12 – Expansão do conjunto de dados mostrado na Figura 3.9, criado pela adição de um terceiro atributo (feature1^2) derivado de feature1. Na nova representação tridimensional dos dados, agora é possível separar os itens vermelhos e azuis usando um modelo linear: um plano em três dimensões. Podemos conf irmar isso ajustando um modelo linear aos dados aumentados, como mostra a Figura 3.13(a). Em função das características originais, o classificador SVM linear não é mais uma linha, mas sim, uma elipse, como mostrado na Figura 3.13(b). 33 Figura 3.13 – (a) Limite de decisão encontrado por um algoritmo SVM linear no conjunto de dados tridimensional expandido. (b) Limite de decisão como uma função dos dois atributos originais. A lição aqui é que adicionar atributos não lineares à representação de nossos dados pode tornar os modelos lineares muito mais poderosos. No entanto, muitas vezes não sabemos quais atributos adicionar, e adicionar atributos demasiadamente (como todas as interações possíveis em um espaço de atributos de 100 dimensões) pode tornar a computação muito cara. Felizmente, existe um “truque matemático” inteligente que nos permite criar um classificadorem um espaço dimensional superior sem realmente computar a nova representação, possivelmente muito grande. Essa estratégia é conhecida como truque do kernel. O truque do kernel funciona calculando diretamente a distância (mais precisamente, os produtos escalares) dos itens de dados para a representação de atributo expandido, sem nunca realmente calcular a expansão. Existem duas maneiras de mapear seus dados em um espaço dimensional mais alto que são comumente usados com máquinas de vetores de suporte: o kernel polinomial, que calcula todos os polinômios possíveis até um certo grau dos atributos originais (como feature0^2 * feature1^5), e o kernel da função de base radial (radial basis function – RBF), também conhecido como kernel gaussiano. O kernel gaussiano é um pouco mais difícil de explicar, pois corresponde a um espaço de atributos dimensionais infinitos. Uma maneira de explicá-lo é que ele considera todos os polinômios possíveis de todos os graus, mas a importância dos atributos diminui para graus mais elevados. Se tudo isso é muito conceitual matematicamente para você, não se preocupe, você pode usar um classificador SVM sem imaginar espaços dimensionais infinitos. Durante o treinamento, o SVM aprende a importância de cada um dos itens de dados de treinamento para representar o limite de decisão entre duas classes. Normalmente, apenas um subconjunto dos itens de treinamento importa para definir o limite de decisão: aqueles que ficam na fronteira entre as classes. Eles são chamados de vetores de suporte e dão seu nome ao algoritmo SVM. Para fazer uma previsão para um novo item, a distância para cada um dos vetores de suporte é medida. Uma decisão de classificação é feita com base nas distâncias ao vetor de suporte e na importância daqueles vetores que foram aprendidos durante o treinamento. 3.4.2 O papel dos hiperparâmetros 34 O hiperparâmetro gamma controla a largura do kernel gaussiano. Ele determina a escala do que significa os pontos estarem próximos. O hiperparâmetro C é um parâmetro de regularização, semelhante ao usado nos modelos lineares. Ele limita a importância de cada item de dado. Observe a Figura 3.14. Vamos analisar o que acontece quando variamos esses parâmetros. Figura 3.14 – Limites de decisão e vetores de suporte para diferentes configurações dos hiperparâmetros C e gamma. 35 Da esquerda para a direita, aumentamos o valor do parâmetro gamma de 0.1 para 10. Um valor pequeno significa um grande raio para o kernel gaussiano, ou seja, muitos pontos são considerados próximos. Isso se reflete em limites de decisão muito suaves à esquerda e limites que se concentram mais em pontos únicos mais à direita. Portanto, um valor baixo de gamma significa que o limite de decisão irá variar lentamente, o que produz um modelo de baixa complexidade, enquanto um valor alto de gamma produz um modelo mais complexo. De cima para baixo, aumentamos o parâmetro C de 0.1 para 1000. Tal como acontece com os modelos lineares, um valor pequeno de C significa um modelo muito restrito, onde cada item de dado pode ter uma influência muito limitada. Perceba que no canto superior esquerdo, o limite de decisão parece quase linear, com os pontos classificados erroneamente. Aumentar o valor de C, conforme mostrado no canto inferior direito, permite que esses pontos tenham uma influência mais forte no modelo e ajusta a curva do limite de decisão para classificá-los corretamente. 3.4.3 Vantagens, desvantagens e hiperparâmetros SVM são classificadores poderosos e funcionam bem em uma variedade de conjuntos de dados. Eles permitem limites de decisão complexos, mesmo se os dados tiverem poucos atributos. Eles funcionam bem em dados de baixa e alta dimensão (ou seja, poucos e muitos atributos), mas não se adaptam muito bem a um pequeno número de amostras. Executar um SVM em dados com até 10.000 amostras pode funcionar bem, mas trabalhar com conjuntos de dados de tamanho 100.000 ou mais pode se tornar um desafio em termos de tempo de execução e uso de memória. Outra desvantagem dos SVM é que eles exigem um pré-processamento cuidadoso dos dados e o ajuste dos hiperparâmetros. É por isso que, atualmente, a maioria das pessoas usa modelos baseados em árvore, que exigem pouco ou nenhum pré-processamento. Além disso, os classificadores SVM são difíceis de inspecionar; pode ser difícil entender por que uma predição específica foi feita e pode ser complicado explicar o modelo para um não especialista. Ainda assim, pode valer a pena tentar SVMs, principalmente se todos os seus atributos representarem medidas em unidades semelhantes (por exemplo, todas são intensidades de pixel) e estão em escalas semelhantes. Os hiperparâmetros importantes em SVM são o parâmetro de regularização C, a escolha do kernel e os parâmetros específicos do kernel. Embora tenhamos nos concentrado principalmente no kernel RBF, outras opções estão disponíveis na biblioteca scikit-learn. O kernel RBF possui apenas o parâmetro gamma, que é o inverso da largura do kernel gaussiano. gamma e C controlam a complexidade do algoritmo, com grandes valores resultando em um classificador mais complexo. Portanto, boas configurações para os dois parâmetros geralmente estão fortemente correlacionadas, e ambos devem ser ajustados juntos. 3.5 Considerações Finais Neste terceiro capítulo, nós descrevemos alguns dos principais algoritmos usados em aprendizagem supervisionada, mais especificamente do tipo classificação. Primeiro, aprendemos como usar o algoritmo KNN, que usa o conceito de distância aos vizinhos mais próximos para classificar um novo item de dado. A seguir, estudamos o funcionamento das árvores de decisão, 36 que aprendem uma hierarquia de perguntas do tipo "if-else", levando a um encadeamento de decisões, de forma bastante intuitiva. Por fim, conhecemos o algoritmo SVM, que são uma extensão de classificadores lineares que permite o treinamento de modelos mais complexos que não são definidos simplesmente por hiperplanos no espaço de entrada. No próximo capítulo, iniciaremos os estudos sobre análise de regressão. Unidade 4: Aprendizagem Supervisionada – Regressão 4.1 Considerações Iniciais Neste capítulo, apresentamos a análise de regressão e algumas de suas aplicações. A regressão está relacionada a como fazer previsões sobre as quantidades do mundo real, como, por exemplo, as previsões relacionadas às perguntas: como o volume de vendas muda com as mudanças no preço? Como o volume de vendas é afetado pelo clima? Como o título de um livro afeta suas vendas? Como a quantidade de uma droga absorvida varia com o peso corporal do paciente? Qual é a chance de chuva nas próximas duas segundas-feiras; e qual é a temperatura esperada? Todas essas perguntas têm uma estrutura comum: pedem uma resposta que pode ser expressa como uma combinação de uma ou mais variáveis independentes (também chamadas de covariáveis ou preditores). O papel da regressão é construir modelos para prever as respostas dessas variáveis contínuas. O capítulo está estruturado da seguinte forma: na Seção 4.2 vamos introduzir os conceitos Regressão Linear Simples e Regressão Linear Múltipla; na Seção 4.3 descreveremos os detalhes da Regressão Polinomial; na Seção 4.4 estudaremos a Regressão Logística; por fim, a Seção 4.5 faz as considerações finais do capítulo. 4.2 Regressão Linear Simples O objetivo de realizar uma Regressão é construir um modelo para expressar a relação entre a variável de resposta 𝑦 (quantitativa) e uma combinação de uma ou mais variáveis 𝑦𝑦 (independentes), também quantitativas. O modelo nos permite prever a resposta da variável 𝑦. O modelo de regressão mais simples que podemos imaginar é o modelo linear, em que a resposta 𝑦 depende linearmente das variáveis 𝑦𝑦. Na regressão linear
Compartilhar