Prévia do material em texto
<p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 1/71</p><p>Treinamento de Modelos de Aprendizado Supervisionado</p><p>Profª. Antony Seabra de Medeiros</p><p>Nome do Professor Colaborador, Nome do Professor Colaborador</p><p>Descrição</p><p>Regressão linear univariada e multivariada, árvores de decisão e</p><p>máquinas de vetores de suporte em problemas de regressão e</p><p>classificação em machine learning, exploração e preparação dos dados,</p><p>descrição do treinamento, avaliação dos modelos através de métricas,</p><p>interpretação de resultados e visualização gráfica das relações</p><p>matemáticas obtidas.</p><p>Propósito</p><p>Utilizar métodos para treinar e testar modelos de regressão e</p><p>classificação aplicados a situações reais, desde a preparação dos</p><p>dados e interpretação dos relacionamentos até a implementação de</p><p>regressores lineares (univariada e multivariada) e classificadores</p><p>(árvores de decisão e máquinas de vetores de suporte), com</p><p>treinamento e avaliação, observando graficamente como os modelos</p><p>obtidos representam as relações entre as variáveis do problema.</p><p>Preparação</p><p>É necessário o uso de um computador com aba de navegação adicional</p><p>para a execução dos exemplos ou um ambiente de desenvolvimento</p><p>específico instalado. Todos os exemplos mostrados utilizam a</p><p>linguagem Python. Antes de iniciar o conteúdo, é necessário ter uma</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 2/71</p><p>instalação de Python versão 3.7 ou superior e preferencialmente uma</p><p>ferramenta para execução de notebooks, como Jupyter, JupyterLab ou</p><p>VS Code, além do arquivo notebooks.zip, que contém todos os</p><p>notebooks que serão utilizados no decorrer do estudo, incluindo as</p><p>resoluções das atividades práticas. Crie também uma conta em</p><p>kaggle.com.</p><p>Objetivos</p><p>Módulo 1</p><p>Regressão linear univariada</p><p>Descrever o treinamento de regressão linear univariada.</p><p>Módulo 2</p><p>Regressão linear multivariada</p><p>Descrever o treinamento de regressão linear multivariada.</p><p>Módulo 3</p><p>Modelo de árvore de decisão</p><p>Descrever o treinamento do modelo de árvore de decisão.</p><p>Módulo 4</p><p>Modelo de máquinas de vetores de suporte</p><p>Descrever o treinamento do modelo de máquinas de vetores de</p><p>suporte.</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/docs/notebooks.zip</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 3/71</p><p>Os problemas de regressão são os primeiros a serem estudados</p><p>em aprendizado de máquina. A diversidade de problemas reais e</p><p>conhecidos que podem ser modelados através de técnicas de</p><p>regressão é grande, como “estimar o valor do plano de saúde ou o</p><p>prêmio do seguro do automóvel”, o que nos motiva a estudá-los em</p><p>uma primeira abordagem de métodos e técnicas de machine</p><p>learning. Estudaremos como abordar esses problemas através de</p><p>regressões lineares simples, com apenas uma variável e, também,</p><p>através de regressões lineares multivariadas.</p><p>Em seguida, vamos tratar de algoritmos de classificação ou</p><p>classificadores, que abordam problemas que têm como objetivo</p><p>encontrar uma classe ou categoria de um conjunto de dados.</p><p>Quando existem somente duas categorias, como verdadeiro ou</p><p>falso, bom ou ruim, dizemos que a classificação é binária. Quando</p><p>existem mais de duas categorias, dizemos que a classificação é</p><p>não binária.</p><p>Exemplos de classificação binária incluem: aprovar ou não uma</p><p>proposta de concessão de empréstimo e determinar se uma notícia</p><p>é fake ou não. Exemplos de classificação não binária incluem:</p><p>classificar músicas de acordo com o seu estilo e classificar um</p><p>serviço em uma escala de qualidade.</p><p>Estudaremos como abordar esses problemas com árvores de</p><p>decisão e com máquinas de vetores de suporte.</p><p>Introdução</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 4/71</p><p>1 - Regressão linear univariada</p><p>Ao �nal deste módulo, você será capaz de descrever o treinamento de regressão linear</p><p>univariada.</p><p>Regressão linear univariada</p><p>Os problemas de regressão linear são normalmente abordados para o</p><p>estudo de hipóteses de relacionamento linear entre variáveis de um</p><p>problema. A regressão linear univariada, também chamada regressão</p><p>linear simples, procura estabelecer uma relação entre duas variáveis, a</p><p>dependente (Y) e a independente (X), conforme a expressão a seguir.</p><p>y=A+Bx</p><p>Nessa expressão, o valor A representa a interceptação da reta com o</p><p>eixo Y, chamado de coeficiente linear, e B representa a inclinação da</p><p>reta, chamado de coeficiente angular e calculado pela tangente do</p><p>ângulo que a reta faz com o eixo horizontal.</p><p>Atenção</p><p>O objetivo da regressão linear é encontrar esses dois valores, A e B, para</p><p>expressar a relação linear que melhor se ajusta aos seus dados. Uma</p><p>vez que você tenha obtido essa relação, pode usá-la para previsão.</p><p>Neste conteúdo, veremos como chegar na melhor relação pela</p><p>modelagem de uma regressão linear e pelo treinamento desse modelo,</p><p>quando poderemos verificar também o quão confiável ele é.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 5/71</p><p>Vejamos um exemplo. Queremos estabelecer uma relação preditiva de</p><p>referência entre peso e altura de seres humanos. Para isso, utilizaremos</p><p>um conjunto de dados de uma determinada amostra, disponível no</p><p>kaggle Inicialmente, vamos abrir o dataset no Python e explorar seus</p><p>dados.</p><p>Abertura do dataset de pesos e alturas.</p><p>Posicione o arquivo adequadamente e confirme seu caminho na</p><p>chamada do método read_csv da biblioteca pandas. Um sample do</p><p>conjunto de dados mostra cinco linhas, com height (altura) e weight</p><p>(peso) para cada linha. Conforme podemos ver a seguir, são 15 linhas</p><p>no total e duas colunas no dataset, ambas do tipo float64. Podemos ver</p><p>também, com um describe, como os dados estão distribuídos. Temos a</p><p>média e o desvio padrão, os quartis, e os valores mínimo e máximo de</p><p>cada uma das colunas.</p><p>Dados do dataset de pesos e alturas.</p><p>Vale também visualizar um gráfico dos pontos correspondentes aos</p><p>dados disponíveis, pois isso nos dá uma boa ideia sobre a distribuição:</p><p>podemos ver se eles estão pouco ou muito dispersos e se podem</p><p>formar uma reta ou uma curva, mesmo que não passe por todos os</p><p>pontos. Na imagem a seguir, você pode constatar que os pontos quase</p><p>formam uma reta.</p><p>https://www.kaggle.com/tmcketterick/heights-and-weights</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 6/71</p><p>Gráfico do dataset de pesos e alturas.</p><p>Queremos utilizar esses dados para estabelecer uma relação entre peso</p><p>e altura, de forma que, dada uma altura, possamos calcular o peso de</p><p>referência correspondente. Para abordar esse problema, o primeiro</p><p>passo é dividir o conjunto de dados em dois subconjuntos:</p><p>Primeiro conjunto</p><p>Será utilizado para o</p><p>treinamento do modelo</p><p>da regressão, com ele</p><p>criaremos o modelo.</p><p>Segundo conjunto</p><p>Será utilizado para a</p><p>validação, ou seja,</p><p>verificaremos se ele</p><p>pode realmente ser</p><p>utilizado para prever o</p><p>resultado esperado.</p><p>A imagem a seguir mostra a divisão do dataset.</p><p>Divisão do dataset em conjunto de treinamento e conjunto de teste.</p><p>Conforme a imagem anterior, executamos train_test_split para dividir o</p><p>conjunto de dados em dois conjuntos, o de treinamento e o de teste.</p><p>Especificamos test_size=0.4, isto é, o conjunto de teste será criado com</p><p>40% do conjunto de dados, ficando os 60% restantes para o conjunto de</p><p>treinamento.</p><p>Em seguida, vamos instanciar o estimador de regressão linear e passar</p><p>como parâmetros x_train e y_train. Observe que x_train contém 60% dos</p><p>dados dos pesos e y_train contém 60% dos dados das alturas</p><p>correspondentes a esses pesos. O modelo será treinado com esses</p><p>dados, conforme a construção a seguir.</p><p>Treinamento</p><p>temos a manobra de kernel trick, que realiza</p><p>uma transformação nos dados de forma a torná-los separáveis. Observe</p><p>a seguir um exemplo no qual uma configuração não linear original de</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 55/71</p><p>dados é transformada em uma configuração que passa a ser separável</p><p>por um hiperplano.</p><p>Transformação do conjunto de dados com kernel trick.</p><p>Existem vários tipos de transformação possíveis, e cada um deles é</p><p>mais adequado a um tipo de configuração de pontos de dados,</p><p>conforme veremos a seguir. Iniciemos com um problema clássico:</p><p>classificar e-mails em spam ou non-spam.</p><p>Servidores de correio eletrônico utilizam esse tipo de classificação para</p><p>direcionar e-mails classificados como spam para uma pasta específica</p><p>da caixa postal do usuário. Trabalharemos com o dataset Email Spam</p><p>Classification que provê 5.172 e-mails classificados conforme o valor da</p><p>coluna Prediction. A imagem adiante apresenta a abertura do dataset.</p><p>Abertura do dataset de e-mails.</p><p>O texto do e-mail é apresentado em 3.000 colunas, cada uma</p><p>correspondendo a uma palavra frequente. O valor em cada coluna</p><p>corresponde à quantidade de ocorrências da palavra no texto. Para</p><p>treinar o modelo, vamos desconsiderar a coluna Email No.</p><p>Preparação do conjunto de treinamento.</p><p>A chamada LinearSVC passa os seguintes parâmetros:</p><p>C</p><p>https://www.kaggle.com/balaka18/email-spam-classification-dataset-csv</p><p>https://www.kaggle.com/balaka18/email-spam-classification-dataset-csv</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 56/71</p><p>Um valor alto da constante C determina que o algoritmo vai buscar</p><p>classificar todos os pontos corretamente; desse modo, outliers são mais</p><p>penalizados, e a largura da margem tende a ser menor. Quanto menor o</p><p>valor de C, menor será a penalização dos outliers e maior a margem do</p><p>hiperplano. O valor padrão de C é 1.0.</p><p>max_iter</p><p>Indica o número máximo de iterações para o algoritmo. Um número alto</p><p>pode aumentar muito o tempo necessário para convergência do</p><p>resultado, enquanto um número muito baixo pode retornar um aviso de</p><p>ConvergenceWarning quando o algoritmo não consegue chegar a um</p><p>resultado. O valor padrão é 1000.</p><p>tol</p><p>Configura a tolerância e define o critério de parada para o algoritmo de</p><p>otimização, isto é, em que momento o algoritmo pode interromper sua</p><p>busca e considerar os resultados encontrados. O valor padrão é 1e-4,</p><p>que é igual a (ou 0,0001).</p><p>dual</p><p>Armazena um valor booleano e indica o tipo de otimização que será</p><p>utilizado: o dual ou o primal. Quando o número de observações for</p><p>maior que o número de variáveis, será preciso configurar o dual=false.</p><p>Na imagem a seguir, perceba o preenchimento dos quatro parâmetros</p><p>citados.</p><p>Treinamento do modelo de máquinas de vetores de suporte.</p><p>Alternativamente ao uso do LinearSVC, você pode utilizar uma chamada</p><p>a SVC, passando como parâmetro kernel=linear. Entenda a diferença</p><p>entre eles:</p><p>SVC</p><p>Utiliza a função de</p><p>perda hinge padrão.</p><p>LinearSVC</p><p>Usa uma versão</p><p>modificada para o</p><p>1 × 10− 4</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 57/71</p><p>cálculo da margem</p><p>máxima.</p><p>Optamos pelo LinearSVC, porque, para o caso em estudo, a sua versão</p><p>modificada atinge um melhor resultado. Conforme podemos observar a</p><p>seguir, o modelo apresenta valores muito altos para todas as métricas</p><p>calculadas sobre o conjunto de teste.</p><p>Métricas do modelo de máquinas de vetores de suporte.</p><p>Vamos seguir para um problema correlato também clássico: o das fake</p><p>news. O objetivo do modelo é classificar uma notícia como falsa ou</p><p>verdadeira de acordo com o seu conteúdo. Máquinas de vetores de</p><p>suporte são muito utilizadas em problemas como esse.</p><p>Utilizaremos dois datasets: Fake e Real um contendo notícias falsas e</p><p>outro, verdadeiras.</p><p>Dados de notícias falsas e verdadeiras.</p><p>Para unir os dois conjuntos de dados, primeiramente criaremos uma</p><p>coluna em cada um deles para informar se a notícia é fake ou não. No</p><p>dataframe de notícias falsas, criamos a coluna Fake_or_True com o valor</p><p>Fake. Já no dataframe de notícias verdadeiras, criamos a mesma coluna</p><p>com o valor True. Em seguida, concatenamos os dois dataframes,</p><p>gerando um único df com 44.898 linhas.</p><p>União dos conjuntos de dados.</p><p>Fazendo um plot da distribuição dos valores na nova coluna, podemos</p><p>verificar que temos um dataframe balanceado, com mais de 20.000</p><p>https://www.kaggle.com/clmentbisaillon/fake-and-real-news-dataset</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 58/71</p><p>notícias em cada classificação, o que sugere bons resultados com</p><p>treinamento e validação de modelos de classificação.</p><p>Distribuição dos valores na coluna Fake_or_True.</p><p>Uma parte fundamental para a entrega dos dados ao treinamento das</p><p>máquinas de vetores de suporte é a preparação do texto. Manobras</p><p>básicas, como remoção de espaços vazios, símbolos de pontuação e</p><p>URLs, entre outras, vão tornar o modelo mais acurado para a aplicação</p><p>em outros conjuntos de dados. Inicialmente, removemos as linhas que</p><p>não possuem conteúdo na coluna text.</p><p>Remoção de linhas com text vazio.</p><p>Cerca de 1,4% das linhas foram removidas. Na sequência, precisamos</p><p>verificar o conteúdo da coluna text para perceber quais são os tipos de</p><p>ocorrências que devem ser tratadas. Na imagem a seguir, podemos</p><p>visualizar o conteúdo de text de uma das linhas do dataframe e perceber</p><p>que existem URLs, espaços vazios e símbolos, como “=” e “==”, que</p><p>devem ser removidos.</p><p>Remoção de linhas com text vazio.</p><p>A remoção de símbolos livres é importante para o tratamento textual.</p><p>Aqui alteramos nossa função remove_punctuation para incluir a lista</p><p>contida em string.punctuation e implementar um split do conteúdo de</p><p>text, verificando se cada parte corresponde a um dos símbolos contidos</p><p>na string.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 59/71</p><p>Remoção de pontuação no conteúdo da notícia.</p><p>Faz-se o mesmo para URLs. A função procura pelas strings mais</p><p>comuns em endereços eletrônicos, como “https” ou “.com”, e as remove</p><p>do texto.</p><p>Remoção de URLs no conteúdo da notícia.</p><p>Assim como esses dois, existem outros tratamentos possíveis na</p><p>preparação de textos para modelos de classificação, como fizemos com</p><p>o problema de Sentiment Analysis e agora com o de Fake News. O ideal</p><p>é que você vá aos poucos construindo a própria biblioteca de funções</p><p>de tratamento de textos. Ao final, poderá checar como estão os</p><p>conteúdos e confirmar que eles estão livres das partes não contributivas</p><p>para o modelo.</p><p>Remoção de URLs no conteúdo da notícia.</p><p>Uma vez que todos os tratamentos tenham sido realizados, será</p><p>possível entregar os textos para o treinamento do modelo. É o que</p><p>faremos a seguir:</p><p>Preparação do conjunto de treinamento.</p><p>Preparação</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 60/71</p><p>Vamos empregar a técnica de dummies para a variável alvo e</p><p>usar um random_state diferente de zero a fim de garantir o</p><p>mesmo embaralhamento e a reprodutibilidade em chamadas</p><p>sucessivas do treinamento.</p><p>Pipeline composto por TfidfVectorizer e LinearSVC.</p><p>Treinamento</p><p>Quando treinamos o modelo de Sentiment Analysis, utilizamos</p><p>um passo para CountVectorizer e outro para a regressão</p><p>logística. Para esse modelo de Fake News, vamos unir os dois</p><p>passos em um pipeline composto por TfidfVectorizer e</p><p>LinearSVC. A diferença entre CountVectorizer e TfidfVectorizer</p><p>é que o último pode dar peso maior às palavras com frequência</p><p>menor, na medida em que considera, por padrão, o inverso da</p><p>frequência do termo no documento, além da sua frequência</p><p>global.</p><p>Crosstab do modelo treinado.</p><p>Validação</p><p>Depois que o modelo é treinado, a validação sobre o conjunto</p><p>de teste mostra um bom percentual de acertos e poucos falsos</p><p>positivos e negativos.</p><p>Classification Report do modelo treinado.</p><p>Classi�cação</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 61/71</p><p>Também disponível em sklearn.metrics, o Classification Report</p><p>mostra acurácia, precisão, recall e score F1 em 99%, um</p><p>excelente resultado para o modelo.</p><p>Hiperparâmetros para máquinas de</p><p>vetores de suporte</p><p>Retornando ao modelo de classificação de vinhos, realizaremos agora</p><p>um treinamento básico com LinearSVC, empregando, para isso, os</p><p>mesmos valores de max_iter, tol e dual utilizados anteriormente.</p><p>Matriz de confusão do modelo treinado.</p><p>É importante notar o valor de tol, que é igual ao padrão 1e-3. Como é ele</p><p>que estabelece o critério de parada, pesquisas mais exaustivas</p><p>requerem valores menores de tol, como 1e-4 ou 1e-5. O classification</p><p>report do modelo mostra bons resultados para a validação do modelo,</p><p>com scores semelhantes aos alcançados com a regressão logística.</p><p>Classification Report do modelo treinado.</p><p>Um dos principais hiperparâmetros para máquinas de vetores de</p><p>suporte é o parâmetro C. Como vimos anteriormente, ele controla a</p><p>penalidade aplicada a pontos que estão fora das regiões de origem,</p><p>equilibrando o trade-off existente entre a distância da margem e a</p><p>acurácia do modelo. Em relação à classificação da margem, podemos</p><p>dizer que o modelo utiliza:</p><p>Hard margin</p><p>Quando pontos fora da</p><p>região de origem não</p><p>são aceitos e, portanto,</p><p>Soft margin</p><p>Quando ele aceita</p><p>pontos fora da região de</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 62/71</p><p>a penalidade para eles é</p><p>alta.</p><p>origem, aplicando uma</p><p>penalidade leve.</p><p>Sendo assim, valores baixos de C, como, por exemplo, 0.1, atribuem</p><p>penalidade baixa para pontos classificados incorretamente; por outro</p><p>lado, valores altos de C, como 10.0, atribuem uma alta para esses</p><p>pontos, o que faz com que a distância da margem diminua.</p><p>Treinamentos com valores altos de C podem ser bem demorados.</p><p>Em relação às funções de Kernel, além da função linear implementada</p><p>em LinearSVC, temos também as funções:</p><p>Admite o parâmetro degree da mesma forma que em modelos</p><p>de regressão, sendo especialmente útil quando os dados não</p><p>podem ser separados facilmente com funções lineares. Valores</p><p>mais altos de degree podem produzir modelos mais acurados,</p><p>pois a decision boundary tende a se adequar mais aos dados</p><p>distribuídos não linearmente, embora possam consumir muito</p><p>tempo e recursos computacionais para serem processados.</p><p>Em relação ao kernel trick que corresponde à função RBF, o</p><p>hiperparâmetro gamma controla como os pontos são agrupados</p><p>em regiões distintas. Com valores baixos de gamma, as regiões</p><p>são maiores porque o raio de similaridade é maior, o que resulta</p><p>em mais pontos em uma mesma região. Com valores altos de</p><p>gamma, as regiões são menores, e os pontos precisam estar</p><p>muito próximos entre si para estarem dentro da mesma região, e,</p><p>consequentemente, serem considerados da mesma classe.</p><p>Temos também os valores scale (padrão) e auto. Com auto, o</p><p>valor de gamma é igual a 1/num_features, o que pode determinar</p><p>um valor bem baixo para datasets com muitos atributos.</p><p>O parâmetro gamma também é relevante para as outras funções</p><p>de kernel. A combinação entre valores distintos dos parâmetros</p><p>C e gamma produz resultados diferentes para os modelos e,</p><p>portanto, devem ser considerados no tuning de hiperparâmetros.</p><p>Polynomial </p><p>RBF (Radious Base Function) </p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 63/71</p><p>Muito utilizada em redes neurais como função de ativação, a</p><p>Sigmoid está disponível na SVM para uso em modelos de</p><p>classificação por fornecer um resultado entre 0 e 1, que é</p><p>adequado para representar probabilidades e associá-las a uma</p><p>classificação binária.</p><p>Calcula um produto escalar entre pares de dados antes de</p><p>submetê-los ao treinamento da SVM. Tal produto gera uma</p><p>matriz quadrada que é requisito para o uso desse tipo de kernel.</p><p>Atenção</p><p>As funções vistas devem ser acessadas pela SVM com a passagem do</p><p>hiperparâmetro kernel. Vale também destacar que, das funções citadas,</p><p>as funções Sigmoid e Precomputed são as menos utilizadas.</p><p>Vamos utilizar GridSearch para pesquisar o espaço de valores dos</p><p>hiperparâmetros e tentar conseguir modelos mais acurados que os</p><p>encontrados até agora. Iniciando com kernel linear e diminuindo a</p><p>tolerância para 1e-4, criamos a lista dos valores de C a serem testados e</p><p>disparamos a execução.</p><p>GridSearchCV para kernel linear.</p><p>Ao variar somente o valor de C, queremos entender a construção das</p><p>diferentes margens entre os vetores de suporte e o impacto dessa</p><p>diferença na acurácia do modelo. Observamos que os valores</p><p>retornados não apresentam melhora para o resultado obtido</p><p>anteriormente; de fato, o kernel linear não parece ser a melhor opção, na</p><p>medida em que as classificações não são linearmente separáveis.</p><p>Sigmoid </p><p>Precomputed </p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 64/71</p><p>Classification Report para kernel linear.</p><p>O próximo passo é avaliar os diferentes tipos de kernel. Quando</p><p>trabalhamos com Support Vectors, é fundamental entender qual é a</p><p>função mais adequada na construção dos vetores e na separação dos</p><p>conjuntos de dados. Façamos isso com uma rodada de GridSearchCV</p><p>para cada tipo de kernel. Naturalmente, você pode fazer uma única</p><p>rodada que inclua os tipos de kernel como um dos hiperparâmetros.</p><p>Kernel polinomial</p><p>Iniciando com a função polinomial, além dos valores de C, é preciso</p><p>combinar com os valores de gamma.</p><p>GridSearchCV para kernel polinomial.</p><p>Tal modelo apresenta resultados melhores que o anterior. Observamos</p><p>melhoras na acurácia geral, assim como nos outros scores. Isso não</p><p>deve nos causar surpresa, já que as funções polinomiais carregam o</p><p>potencial de se adequar melhor a conjuntos não lineares.</p><p>Classification Report para kernel polinomial.</p><p>Kernel RBF</p><p>Vejamos os resultados de RBF com os mesmos valores para os</p><p>hiperparâmetros utilizados na avaliação polinomial. Na realização das</p><p>primeiras pesquisas com GridSearchCV, é uma boa prática manter as</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 65/71</p><p>listas de valores iguais para os diferentes tipos de kernel, pois o que se</p><p>quer aqui é nortear a busca em vez de ter um resultado definitivo.</p><p>GridSearchCV para kernel RBF.</p><p>Os resultados alcançados com o kernel RBF são semelhantes aos</p><p>mostrados anteriormente para o kernel polinomial, ainda que o tipo de</p><p>aproximação seja bem diferente.</p><p>Classification Report para kernel RBF.</p><p>Kernel Sigmoid</p><p>Faremos a última busca com o kernel Sigmoid utilizando os mesmos</p><p>parâmetros.</p><p>GridSearchCV para kernel Sigmoid.</p><p>Os resultados para esse tipo de kernel são semelhantes aos do kernel</p><p>linear, conforme se pode verificar adiante.</p><p>Classification Report para kernel Sigmoid.</p><p>Conclusão</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 66/71</p><p>Com os resultados de GridSearch, concluímos que devemos investir</p><p>mais nas buscas utilizando kernel polinomial e RBF. A expansão das</p><p>pesquisas precisa levar em consideração não somente os valores de C e</p><p>gamma testados em GridSearch, mas também max_iter e tol. Uma</p><p>busca inicial com kernel polinomial e max_item igual a 100.000</p><p>iterações já nos oferece scores bem melhores que os anteriores.</p><p>Treinamento de kernel polinomial.</p><p>Embora a acurácia tenha crescido um ponto percentual,</p><p>tanto a precisão</p><p>quanto o recall evoluíram bem, atingindo percentuais em torno de 80%.</p><p>Utilizar esses mesmos parâmetros com kernel RBF não alcança os</p><p>mesmos resultados; ao contrário, os scores se mantêm iguais aos</p><p>anteriores, o que nos faz concluir que a função mais adequada para</p><p>esse conjunto de dados é a polinomial.</p><p>Scores do kernel polinomial.</p><p>Teoria na prática</p><p>Retorne ao modelo de predição da qualidade de vinhos, construído</p><p>com árvores de decisão, e construa um modelo com máquinas de</p><p>vetores de suporte. Para isso, você deverá adequar o conjunto de</p><p>dados à classificação binária, transformando as classificações</p><p>originais em duas classes: alta e baixa. Valores originais maiores que</p><p>5 correspondem à alta qualidade.</p><p>Realize o tuning de hiperparâmetros através de GridSearchCV. Sua</p><p>meta é conseguir uma acurácia ainda mais alta do que a alcançada</p><p>anteriormente, tanto no conjunto de treinamento quanto no conjunto</p><p>de teste.</p><p>Mostrar solução</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 67/71</p><p>Treinamento de máquinas de vetores</p><p>de suporte</p><p>No vídeo a seguir, demonstramos as técnicas de treinamento e</p><p>validação de modelos de máquinas de vetores de suporte.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Em relação aos modelos de máquinas de vetores de suporte, qual</p><p>opção abaixo se refere à fronteira que separa conjuntos de dados?</p><p></p><p>A Fronteira de suporte.</p><p>B Vetor de suporte principal.</p><p>C Hiperplano.</p><p>D Hipercubo.</p><p>E Base de suporte.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 68/71</p><p>Parabéns! A alternativa C está correta.</p><p>As máquinas de vetores de suporte ou SVM (Support Vector</p><p>Machines) são caracterizadas pela separação dos conjuntos de</p><p>dados por hiperplanos, cuja função associada estabelece a</p><p>fronteira de decisão do modelo de classificação denominada</p><p>decision boundary.</p><p>Questão 2</p><p>Em relação ao tuning de máquinas de vetores de suporte, qual</p><p>opção a seguir apresenta uma lista válida de hiperparâmetros?</p><p>Parabéns! A alternativa D está correta.</p><p>C é um dos principais hiperparâmetros para SVM, que controla a</p><p>margem de pontos fora das regiões de origem (margin), a qual, por</p><p>sua vez, pode ser hard margin ou soft margin. O parâmetro degree</p><p>também é usado, assim como modelos de regressão, para adequar</p><p>o limite de decisão (decision boundary), que não é um</p><p>hiperparâmetro. O hiperparâmetro gamma controla o agrupamento</p><p>de pontos em regiões distintas. A combinação dos hiperparâmetros</p><p>C e gamma com valores distintos produz resultados diferentes que</p><p>devem ser considerados no tuning de hiperparâmetros.</p><p>A Hard margin, soft margin.</p><p>B Gamma, margin.</p><p>C C, margin.</p><p>D C, gamma.</p><p>E Degree, decision boundary.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 69/71</p><p>Considerações �nais</p><p>Neste conteúdo, vimos como utilizar algoritmos de regressão linear</p><p>univariada e multivariada para abordar problemas reais, criando</p><p>modelos que podem explicar a relação entre variáveis e que podem ser</p><p>utilizados para prever resultados, de acordo com o problema. Vimos</p><p>também os algoritmos de classificação em árvores de decisão e</p><p>máquinas de vetores de suporte, abordando problemas tradicionais em</p><p>machine learning. Tanto a regressão quanto a classificação são</p><p>ferramentas de trabalho clássicas do analista/cientista de dados,</p><p>utilizadas muitas vezes de forma combinada para atingimento de um</p><p>objetivo.</p><p>Importante destacar que o uso de algoritmos de machine learning,</p><p>incluindo as regressões que tratamos neste material, tem forte</p><p>embasamento na matemática e na estatística. Procuramos apresentar</p><p>os conceitos básicos para que você pudesse rapidamente entender a</p><p>aplicação dos algoritmos e chegar a resultados práticos, mas, sempre</p><p>que puder, considere investir nesses conhecimentos formais para</p><p>aumentar o seu nível de compreensão sobre o funcionamento interno</p><p>dos algoritmos.</p><p>Podcast</p><p>Ouça agora o podcast sobre a criação de modelos de regressão linear</p><p>simples, de regressão linear multivariada, de árvores de decisão e de</p><p>máquinas de vetores de suporte.</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 70/71</p><p>Explore +</p><p>Explore o Github em busca de implementações para problemas variados</p><p>de regressão e classificação. Você vai encontrar problemas reais e os</p><p>códigos utilizados para resolvê-los, como os datasets utilizados para</p><p>treinamento e teste, além das avaliações da aplicação dos modelos.</p><p>Experimente o kaggle.com. Há muitos problemas de regressão linear,</p><p>árvores de decisão e máquinas de vetores de suporte, além das</p><p>competitions, que envolvem o uso de outros algoritmos, além desses</p><p>que aprendemos neste conteúdo.</p><p>Pesquise sobre regressão linear na Biblioteca Digital da Administração</p><p>Pública no site da ENAP, onde você encontrará uma série de livros sobre</p><p>aplicações desse modelo de análise estatística.</p><p>Referências</p><p>Deisenroth, M.; Faisal, A.; Ong, C. Mathematics for Machine Learning.</p><p>Cambridge: Cambridge University Press, 2020.</p><p>Geron, A. Hands-On Machine Learning with Scikit-Learn, Keras and</p><p>Tensorflow: Concepts, Tools, and Techniques to Build Intelligent</p><p>Systems. Farnham: O’Reilly, 2019.</p><p>Knafl, G.; Ding, K. Adaptive Regression for Modeling Nonlinear</p><p>Relationships. New York: Springer, 2016.</p><p>VanderPlas, J. Python Data Science Handbook. Farnham: O’Reilly, 2016.</p><p>Material para download</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 71/71</p><p>Clique no botão abaixo para fazer o download do</p><p>conteúdo completo em formato PDF.</p><p>Download material</p><p>O que você achou do conteúdo?</p><p>Relatar problema</p><p>javascript:CriaPDF()</p><p>do modelo linear.</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 7/71</p><p>Na fase de treinamento, a regressão linear calcula o coeficiente linear,</p><p>propriedade intercept de linear_model, e o coeficiente angular. O</p><p>resultado é um modelo que expressa a relação entre as duas variáveis:</p><p>Weight=0.64424+(0.016177*Height)</p><p>O próximo passo é verificar se essa expressão, quando aplicada ao</p><p>conjunto de teste (x_test), produz os resultados esperados (y_test). Para</p><p>isso, chamamos o método predict passando como parâmetro o</p><p>conjunto de teste e armazenamos os resultados em y_pred, que são os</p><p>valores calculados pelo modelo.</p><p>Teste e avaliação do modelo linear.</p><p>Tendo os valores calculados pelo modelo (y_pred), podemos compará-</p><p>los aos valores disponíveis no conjunto de teste (y_test).</p><p>Fazemos essa comparação por meio de r2_score, um método que</p><p>calcula quanto da variação nos pontos de dados é captado pelo modelo,</p><p>conforme veremos em mais detalhes adiante. Na imagem anterior,</p><p>vimos que o modelo captou 97,81% da variância, um resultado</p><p>excelente. No gráfico a seguir, podemos ver os pontos que representam</p><p>o conjunto de teste e a reta correspondente ao modelo linear.</p><p>Gráfico do modelo linear e conjunto de teste.</p><p>Uma das variações no treinamento de regressões lineares é o percentual</p><p>do conjunto de dados que é utilizado para o treinamento. Na maioria dos</p><p>cenários, quanto mais dados você utilizar para treinar o modelo, melhor.</p><p>No entanto, isso não significa necessariamente que o modelo trará</p><p>melhor resultado quando aplicado a outros dados. Vamos fazer esse</p><p>teste, alterando o conjunto de treinamento para conter 80% dos dados</p><p>disponíveis.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 8/71</p><p>Alteração do conjunto de treinamento.</p><p>Com esse novo conjunto, repetimos o treinamento e geramos um novo</p><p>modelo. Veja a seguir os coeficientes modificados, adequados ao novo</p><p>conjunto de treinamento. Observe também que o score calculado para o</p><p>modelo é ligeiramente menor que o calculado anteriormente, indicando</p><p>que ele capturou menos a variância dos resultados no conjunto de</p><p>treinamento.</p><p>Treinamento do modelo linear com o novo conjunto.</p><p>Vamos prosseguir e aplicar o modelo ao conjunto de teste. Note que,</p><p>com esse novo modelo, o score é maior que o anterior, indicando</p><p>que os valores se aproximam mais dos dados do conjunto de teste.</p><p>Avaliação do novo modelo.</p><p>A seguir, você pode ver o gráfico correspondente ao modelo aplicado</p><p>sobre o conjunto de teste e como a reta se aproxima dos pontos</p><p>originais.</p><p>Gráfico do novo modelo aplicado sobre o conjunto de teste.</p><p>R2</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 9/71</p><p>Correlação entre variáveis</p><p>Podemos classificar as variáveis em:</p><p>Independente</p><p>Aquela que se referem a</p><p>um alvo.</p><p>Dependente</p><p>A própria variável alvo.</p><p>As variáveis independentes e a variável dependente podem estabelecer</p><p>uma relação causa-efeito, caso um modelo adequado possa ser</p><p>construído com base nos dados que temos disponíveis. É fato que, para</p><p>abordar um problema como esse, devemos:</p><p></p><p>Conhecer os dados</p><p>O primeiro a ser feito</p><p>deve ser conhecer os</p><p>dados, não somente</p><p>navegar por eles e</p><p>entender o que</p><p>exatamente estão</p><p>representando, mas</p><p>compreender o</p><p>relacionamento entre</p><p>eles.</p><p></p><p>Preparar os dados</p><p>É fundamental que os</p><p>dados, uma vez</p><p>compreendidos, sejam</p><p>preparados para que</p><p>modelos possam ser</p><p>construídos sobre</p><p>informações adequadas</p><p>ao problema que está</p><p>sendo abordado.</p><p>Data wrangling é o nome dado ao conjunto de procedimentos e</p><p>técnicas utilizados para a preparação dos dados, envolvendo</p><p>padronização, formatação, scaling, entre outros.</p><p>Cada tipo de problema nos leva a conjuntos diferentes de dados, cada</p><p>um com as suas necessidades respectivas de preparação, dentro do</p><p>contexto do problema a ser resolvido. Por exemplo, quando estiver</p><p>trabalhando com produtos nos quais o tempo de vida é um dado</p><p>relevante, como um imóvel ou um automóvel, você vai preparar esse</p><p></p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 10/71</p><p>dado a partir da data da construção do imóvel ou da data da fabricação</p><p>do automóvel.</p><p>Atenção</p><p>Informações que não contribuem para a formação do valor alvo são</p><p>dispensáveis e, portanto, devem ser removidas do processo de</p><p>construção do modelo. Mesmo aquelas que pouco contribuem também</p><p>podem ser desconsideradas.</p><p>No exemplo que veremos agora, queremos estabelecer uma relação</p><p>para calcular o preço de um imóvel. Considere o dataset kc_house_data,</p><p>que contém informações de imóveis, como localização, área, número de</p><p>quartos, banheiros, vista, entre outras. Nosso primeiro passo será abrir o</p><p>arquivo com o dataset obtido e conhecer essas informações.</p><p>Abertura do dataset de imóveis.</p><p>Conforme a saída de shape, o dataset possui 21.613 linhas e 21</p><p>colunas. Cada linha possui uma série de informações: um identificador</p><p>único, a data da coleta da informação, o preço do imóvel, o número de</p><p>quartos, o número de banheiros, a área living, a área total, o número de</p><p>andares, se a casa é waterfront ou não, a vista, o andar, a área above, a</p><p>área do porão, o ano em que foi construída, o número de anos desde a</p><p>renovação, o código postal, as coordenadas de latitude e longitude, a</p><p>área living15 e a área lot15.</p><p>Dica</p><p>Normalmente, todo dataset vem acompanhado de uma documentação</p><p>dessas informações. Vale informar-se mais sobre cada uma dessas</p><p>informações, checando qual a influência de cada uma delas sobre a</p><p>variável dependente; no nosso caso, o preço do imóvel.</p><p>Veja a seguir como podemos remover as colunas id e date,</p><p>desnecessárias à construção do modelo.</p><p>https://www.kaggle.com/shivachandel/kc-house-data</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 11/71</p><p>Remoção de colunas não necessárias.</p><p>Em um modelo de regressão, todos os dados precisam ser numéricos.</p><p>Como vamos estabelecer uma relação matemática entre as variáveis,</p><p>elas precisam ser representadas por números, sejam eles inteiros ou</p><p>não. Por isso, examine os tipos de dados no seu dataset.</p><p>Tipos de dados.</p><p>Os tipos de dados no dataset são int64 e float64, o que nos atende</p><p>perfeitamente. Quando encontramos informações de outros tipos,</p><p>precisamos tratá-los, seja convertendo-os para tipos numéricos quando</p><p>possível, caso de tipos object, seja estabelecendo uma categorização,</p><p>conforme veremos mais adiante. Vamos, a seguir, calcular a idade do</p><p>imóvel e acrescentar uma coluna com essa informação, que</p><p>chamaremos age.</p><p>Coluna age.</p><p>O cálculo toma a informação contida em yr_built e diminui da data atual;</p><p>o resultado é inserido na coluna age. Veja alguns resultados obtidos por</p><p>meio de sample. Já para yr_renovated, não é necessário nenhum</p><p>cálculo pois ela já contém o número de anos desde a última renovação.</p><p>Recomendação</p><p>É uma boa prática, nessa fase de exploração e preparação dos dados,</p><p>consultar as medidas descritivas de cada coluna do dataset. Mediante</p><p>essas informações, você pode examinar a amplitude dos valores em</p><p>cada informação, a média e o desvio padrão, além dos quartis.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 12/71</p><p>A função describe pode nos mostrar essas medidas:</p><p>Medidas descritivas do conjunto de dados.</p><p>Podemos ver que o preço dos imóveis varia de 75.000 a 7.700.000,</p><p>sendo a média 540.088,14 e o desvio padrão 367.127,19. Por intermédio</p><p>dos quartis, é possível verificar que a metade dos valores está na faixa</p><p>75.000 e 450.000, e a outra metade está na faixa 450.000 e 7.700.000. É</p><p>um bom exercício percorrer as colunas e observar</p><p>essas medidas,</p><p>descobrindo características das informações. Veja as informações</p><p>contidas em view e condition. Trata-se de informações de</p><p>categorização, isto é, existem tipos de view e tipos de condition bem</p><p>definidos para os imóveis.</p><p>Recomendação</p><p>Uma boa prática nessa exploração é a verificação dos relacionamentos</p><p>entre as colunas.</p><p>O que podemos esperar da relação entre o número de quartos e o preço</p><p>do imóvel? Veremos a seguir.</p><p>Relação entre número de quartos e preço do imóvel.</p><p>O gráfico do tipo scatter plot nos dá uma boa visualização do</p><p>relacionamento entre duas variáveis. Podemos perceber claramente</p><p>que, para um mesmo número de quartos, temos diversos preços de</p><p>imóveis. Isso nos diz também que a variável bedrooms não contribui</p><p>decisivamente para o preço do imóvel, uma vez que um imóvel com</p><p>cinco quartos, por exemplo, tem preços que variam densamente do</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 13/71</p><p>mínimo até quase 4.000.000, e ainda há casos de valores maiores até</p><p>7.000.000. Logo, não é realmente uma informação que tenha uma</p><p>correlação alta com o preço do imóvel.</p><p>Vamos ver a relação entre a área living e o preço do imóvel. Na imagem</p><p>a seguir, o gráfico scatter plot mostra uma configuração bem diferente</p><p>da anterior. Há um padrão bem definido à medida que o gráfico se</p><p>desloca da esquerda para a direita, isto é, quando a área living cresce.</p><p>Os preços dos imóveis, para uma mesma área, estão mais concentrados</p><p>em torno de um valor, mostrando que essa é uma variável que contribui</p><p>fortemente para a definição do valor da variável dependente.</p><p>Relação entre área living e preço dos imóveis.</p><p>Nesse gráfico, há o que chamamos de tendência. A linha de tendência —</p><p>você pode traçá-la —, tem uma inclinação positiva, ou seja, o ângulo que</p><p>ela faz com o eixo X é positivo. Dizemos que sqft_living e price</p><p>possuem correlação positiva. Mas o que isso significa? Vamos</p><p>entender:</p><p></p><p>Correlação positiva</p><p>Quando uma variável</p><p>cresce, a outra também</p><p>cresce.</p><p></p><p>Correlação negativa</p><p>Quando uma varável</p><p>cresce, a outra</p><p>decresce.</p><p>O valor de correlação varia de -1 a 1. Sendo que, quanto mais perto da</p><p>unidade, maior o grau de correlação entre as variáveis.</p><p>Utilize a função corr() para medir as correlações, conforme a seguir.</p><p>Note que, na diagonal, todos os valores são 1, representando a</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 14/71</p><p>correlação máxima entre o atributo e ele mesmo.</p><p>Correlação entre atributos do dataset.</p><p>Veja a correlação entre price e as seguintes variáveis:</p><p>sqft_living</p><p>A correlação entre price e sqft_living é de 0.702035, um valor que</p><p>representa uma correlação alta, na mesma direção, entre as duas</p><p>variáveis.</p><p>grade</p><p>Também tem alta correlação com price. Quanto maior o andar, maior o</p><p>preço do imóvel.</p><p>condition</p><p>Diferente das outras variáveis, condition possui baixíssima correlação</p><p>com price.</p><p>Não é fácil checar todas essas informações, principalmente quando o</p><p>dataset contém centenas de colunas. Para facilitar essa visualização,</p><p>existe o mapa de calor, que mostra as correlações por cores. Veja em</p><p>seguida o mapa de calor correspondente ao exemplo dado.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 15/71</p><p>Mapa de calor.</p><p>Veja o que cada cor representa:</p><p>Preto</p><p>Os valores em preto indicam a máxima correlação negativa.</p><p>Creme</p><p>Os valores em creme indicam a máxima correlação positiva.</p><p>Vermelho</p><p>Os valores vermelhos indicam pouca correlação.</p><p>Variações</p><p>As variações para o preto ou para o creme indicam correlações</p><p>crescentes.</p><p>O mapa de cor é uma ótima maneira de identificar rapidamente quais as</p><p>variáveis que podem ser contributivas para a formação do valor alvo.</p><p>Teoria na prática</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 16/71</p><p>1) Baixe o dataset car-price-prediction com dados sobre automóveis</p><p>como o preço, o ano, o número de quilômetros rodados, entre outros,</p><p>no endereço.</p><p>2) Abra o arquivo no seu notebook Python e explore os dados.</p><p>Compreenda o que eles representam.</p><p>3) Crie uma nova coluna no dataframe, chamada age, para indicar a</p><p>idade do automóvel, calcule-a com base na coluna year e remova</p><p>essa coluna.</p><p>4) Gere o mapa de calor para selling_price, km_driven e age. O que</p><p>você pode inferir do mapa?</p><p>Mapa de calor para o dataset de preços de automóveis.</p><p>5) Gere gráficos para observar a relação entre age e selling_price,</p><p>entre km_driven e selling_price, e entre age e km_driven.</p><p>https://www.kaggle.com/hellbuoy/car-price-prediction</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 17/71</p><p>Gráficos das relações.</p><p>6) Treine um modelo de regressão linear simples para calcular</p><p>selling_price com base em km_driven. Faça isso com 60% dos</p><p>dados. Valide com os outros 40%. Qual o score obtido?</p><p>7) Refaça o treinamento com 80% dos dados. O score aumentou?</p><p>8) Qual a sua avaliação sobre esse modelo linear?</p><p>9) Repita o processo para validar dois modelos adicionais. O</p><p>primeiro para calcular selling_price a partir de age e outro para age a</p><p>partir de km_driven. Qual a sua avaliação sobre esses modelos?</p><p>Treinamento de regressões lineares</p><p>univariadas</p><p>No vídeo a seguir, apresentamos uma demonstração das técnicas de</p><p>treinamento e validação de modelos de regressão linear.</p><p>Mostrar solução</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 18/71</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>A respeito dos conceitos e melhores práticas para treinamento de</p><p>modelos de machine learning utilizando algoritmos de regressão</p><p>linear, assinale a afirmativa correta.</p><p>A</p><p>A regressão linear é um modelo matemático para</p><p>estimar o valor de uma variável alvo, a partir do valor</p><p>de uma ou mais variáveis independentes não</p><p>correlacionadas.</p><p>B</p><p>O mapa de calor é uma ferramenta útil na análise da</p><p>correlação entre variáveis em uma regressão linear,</p><p>mas não quando essa regressão é univariada.</p><p>C</p><p>Dizemos que duas variáveis possuem correlação</p><p>positiva quando o valor de uma das variáveis cresce</p><p>e o valor da outra cresce também. Uma correlação</p><p>negativa indica que quando uma varável cresce, a</p><p>outra decresce.</p><p>D</p><p>Quanto mais dados são utilizados para treinamento</p><p>de um modelo de regressão linear univariada,</p><p>melhor, pois o modelo trará melhor resultado</p><p>quando aplicado a outros dados.</p><p>E</p><p>A regressão linear univariada mantém a variância</p><p>para todos as variáveis independentes da regressão</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 19/71</p><p>Parabéns! A alternativa C está correta.</p><p>A opção A) está errada porque utilizamos a regressão linear para</p><p>estimar o valor de uma variável alvo, a partir do valor de uma ou</p><p>mais variáveis independentes, correlacionadas ou não. A opção B)</p><p>está errada porque o mapa de calor também é útil quando estamos</p><p>trabalhando com regressões lineares univariadas. A opção D) está</p><p>errada porque nem sempre mais dados de treinamento produzem</p><p>melhores modelos. A opção E) está errada porque a regressão</p><p>linear univariada contém uma única variável independente, para a</p><p>qual é calculado o coeficiente para a expressão correspondente. A</p><p>única opção correta é a letra C), que define corretamente os</p><p>conceitos de correlação positiva e negativa.</p><p>Questão 2</p><p>Entre os objetivos discriminados a seguir, qual pode ser abordado</p><p>por uma regressão linear simples?</p><p>Parabéns! A alternativa D está correta.</p><p>linear, de maneira que o modelo gerado possa ser</p><p>aplicado adequadamente à casos de</p><p>uso reais.</p><p>A Classificar e-mails como spam ou não spam.</p><p>B</p><p>Calcular a inflação baseado na variação de preços</p><p>dos itens da cesta básica.</p><p>C Verificar se uma notícia é fake ou não.</p><p>D</p><p>Calcular a quantidade de água diária necessária a</p><p>um ser humano com base no seu peso.</p><p>E</p><p>Classificar observações espaciais em estrelas,</p><p>galáxias ou quasares.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 20/71</p><p>Calcular a quantidade de água diária necessária a um ser humano</p><p>com base no seu peso é o único problema para cálculo de uma</p><p>variável dependente a partir de uma única variável independente.</p><p>Para calcular a inflação baseado na variação de preços dos itens da</p><p>cesta básica pode ser utilizada uma regressão linear, mas com</p><p>muitas variáveis independentes, correspondentes aos diversos itens</p><p>da cesta básica. Todas as outras opções não se referem a</p><p>problemas de regressão.</p><p>2 - Regressão linear multivariada</p><p>Ao �nal deste módulo, você será capaz de descrever o treinamento de regressão linear</p><p>multivariada.</p><p>Múltiplas variáveis</p><p>Existem problemas nos quais precisamos trabalhar com duas ou mais</p><p>variáveis independentes para estabelecer uma relação linear adequada</p><p>com a variável alvo. São múltiplas variáveis independentes que</p><p>contribuem para a formação do valor da variável dependente. Esse tipo</p><p>de regressão linear é chamado de multivariada.</p><p>Antes de iniciar o treinamento do modelo para o preço de imóveis,</p><p>vamos executar uma manobra clássica: embaralhar as linhas do</p><p>dataset. Muito embora o método train_test_split faça isso por padrão,</p><p>em certos conjuntos de dados, a maneira com que os dados são</p><p>coletados e inseridos no arquivo preservam subconjuntos da coleta que</p><p>guardam correlações diferenciadas, o que pode impactar o modelo</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 21/71</p><p>gerado. Para isso, vamos utilizar sample com frac=1 e reset_index.</p><p>Assim, reordenamos o conjunto de dados aleatoriamente.</p><p>Embaralhamento do dataset.</p><p>Voltando ao mapa de calor, olhe para a primeira linha, a linha de price, e</p><p>responda rapidamente: quais são as variáveis que possuem maior</p><p>correlação? Começaremos por elas a modelagem e o treinamento.</p><p>Definição do conjunto de treinamento.</p><p>Vamos avançar na modelagem da relação, entre sqft_living e price. Os</p><p>dados serão divididos entre treinamento e teste da seguinte forma:</p><p></p><p>Treinamento - 80%</p><p>Por meio da função train_test_split, o conjunto de treinamento conterá</p><p>80% dos dados do dataset e será representado pelas variáveis x_train e</p><p>y_train.</p><p></p><p>Teste - 20%</p><p>Os 20% restantes serão utilizados para teste, ou seja, para validação do</p><p>modelo construído com o conjunto de treinamento, e será representado</p><p>pelas variáveis x_test e y_test.</p><p>O treinamento consiste em utilizar os valores de sqft_living e price</p><p>contidos respectivamente em x_train e y_train, para gerar um modelo</p><p>que expresse uma relação linear entre as duas variáveis. A validação do</p><p>modelo consiste em utilizar essa relação para predizer os valores de</p><p>price a partir dos valores de sqft_living, contidos em x_test,</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 22/71</p><p>comparando-os ao verdadeiro valor de price, contido em y_test. Veja a</p><p>seguir a geração da relação linear.</p><p>Regressão linear.</p><p>A relação gerada pela regressão linear é expressa nos termos das</p><p>variáveis utilizadas, sqft_living e price, sendo a interceptação em</p><p>-49.092 e o coeficiente de correlação em 283,71. É essa a expressão que</p><p>vamos utilizar para realizar as predições.</p><p>Price = -49.092+(283,71*sqft_living)</p><p>Há duas boas práticas que valem a pena ser mencionadas, são elas:</p><p>Note que usamos normalize=True para a regressão. Quando</p><p>passamos esse parâmetro para o estimador, todos os valores</p><p>numéricos são normalizados, ou seja, convertidos para valores</p><p>na faixa 0 a 1. Essa é uma boa prática para treinamentos de</p><p>modelos de machine learning, que pode fazer uma grande</p><p>diferença na acurácia do modelo, principalmente quando</p><p>estivermos tratando com muitos dados em muitas variáveis.</p><p>Outra prática adequada para alguns casos é a standardization,</p><p>ou padronização do dataset. Com essa técnica, transformamos</p><p>os valores de maneira que a média seja zero e a variância, 1,</p><p>permitindo que valores coletados em diferentes distribuições</p><p>possam ser comparados corretamente. Por esse motivo, essa</p><p>técnica é recomendada quando os desvios padrão são altos.</p><p>Quando forem baixos, em relação aos observados na amostra, é</p><p>recomendada a normalização.</p><p>Normalização </p><p>Padronização </p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 23/71</p><p>Seguindo adiante, observe o training_score mostrado logo após a</p><p>geração da relação linear. Os parâmetros de um modelo são estimados</p><p>considerando a diferença entre o valor de treinamento e o valor previsto.</p><p>Esse cálculo é realizado por uma função de perda (loss function) e o</p><p>objetivo do estimador é minimizar essa função de perda. Existem várias</p><p>funções disponíveis, como:</p><p>MAE</p><p>Mean Absolute Error</p><p>MSE</p><p>Mean Squared Error</p><p>R-Squared</p><p>é uma métrica relativa utilizada para fazer comparações entre</p><p>modelos treinados com os mesmos dados. Ela indica a proporção da</p><p>variância do modelo, ou seja, quanto da variação nos pontos de dados é</p><p>capturado pelo relacionamento linear. Ademais, minimiza alguns riscos</p><p>relevantes. A proporção é indicada da seguinte forma:</p><p>Baixo score</p><p>Indica que a relação X e</p><p>Y não possui um</p><p>padrão. Então, é preciso</p><p>verificar a possibilidade</p><p>de substituir a variável X</p><p>ou adicionar novas</p><p>variáveis X à</p><p>modelagem.</p><p>Alto score</p><p>Indica que a relação X e</p><p>Y possui um padrão e</p><p>deve ser considerada no</p><p>modelo.</p><p>R2</p><p>R2</p><p>R2</p><p></p><p>R2</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 24/71</p><p>O valor apresentado, pouco menos de 50%, não é muito bom; um</p><p>modelo melhor responde por um percentual maior da variância dos</p><p>dados; quanto maior, melhor. Vamos seguir em frente e validar o</p><p>modelo, agora com os dados de teste. São os 20% que separamos no</p><p>split executado anteriormente. A ideia é chamar o método predict</p><p>passando como parâmetro os dados em x_test e armazenar os dados</p><p>retornados pelo método em y_pred. Esses são os dados previstos a</p><p>serem comparados com os dados reais, armazenados em y_test.</p><p>Validação do modelo.</p><p>Chamamos o método r2_score para mostrar o percentual da variância</p><p>entre os valores. Veja que nosso modelo capturou menos que 50% da</p><p>variância dos dados, o que também não é muito bom. Vejamos o gráfico</p><p>da reta associada à relação linear.</p><p>Reta associada à relação linear.</p><p>Será que é possível melhorar?</p><p>Uma tentativa é colocar mais dados de treinamento para aumentar a</p><p>acurácia do modelo. Para isso, podemos refazer o split e treinar o</p><p>modelo novamente. De fato, esse é o processo de ajuste com o qual</p><p>devemos nos acostumar: variar os parâmetros de entrada do modelo,</p><p>repetir o treinamento e a validação da regressão, comparando o score</p><p>ou uma métrica de erro do novo modelo com os modelos</p><p>anteriores. É o que faremos.</p><p>R2</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 25/71</p><p>Split e treinamento com 90% dos dados.</p><p>Ao reservar 90% do conjunto de dados para o treinamento, não houve</p><p>variação significante no score . Ao aplicar o modelo sobre o</p><p>conjunto de teste, obtemos um pequeno aumento em relação ao teste</p><p>anterior.</p><p>Teste do modelo.</p><p>Regressão linear multivariada</p><p>Vimos, anteriormente, que um valor de baixo indica que outras</p><p>variáveis X devem ser adicionadas ao modelo. O dataset de exemplo</p><p>possui uma série de colunas que possuem alta correlação com price.</p><p>Vamos utilizá-las</p><p>em uma regressão linear multivariada, ou seja, uma</p><p>regressão linear que considere mais de uma variável independente.</p><p>Nesse caso, cada uma delas terá o seu próprio coeficiente de</p><p>correlação, em uma relação como a especificada a seguir.</p><p>Nós adicionaremos variáveis ao modelo que de fato contribuam para a</p><p>formação do valor da variável alvo, cientes de que mais variáveis não</p><p>garantem a melhoria do modelo. Não é uma boa prática adicionar todas</p><p>as variáveis disponíveis para um modelo definitivo; o melhor é adicionar</p><p>variáveis gradativamente e observar os resultados. É por isso que</p><p>machine learning envolve construir, treinar e validar modelos, em um</p><p>processo repetitivo, até que se chegue a bom termo, frequentemente</p><p>definido por um objetivo para a modelagem.</p><p>Um risco inerente à regressão linear multivariada é a multicolinearidade,</p><p>que acontece quando duas ou mais variáveis independentes carregam a</p><p>R2</p><p>R2</p><p>y = A + B1x1 + B2x2 + ⋯ + Bnxn</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 26/71</p><p>mesma informação, muito embora isso não seja evidente à primeira</p><p>vista.</p><p>A multicolinearidade impede que um modelo gerado</p><p>por regressão seja útil; dito de outra forma, o score</p><p>e os coeficientes da relação deixam de ser</p><p>confiáveis.</p><p>Para evitar esse risco, devemos observar atentamente as correlações</p><p>muito altas entre as variáveis independentes. Dessa forma, é necessário</p><p>tomar a decisão de:</p><p>Manter</p><p>Se de fato elas</p><p>possuem informações</p><p>diferentes que podem</p><p>contribuir de maneira</p><p>distinta para a variável</p><p>dependente, então</p><p>devem ser mantidas.</p><p>Remover</p><p>Se não possuem</p><p>informações diferentes</p><p>ou que contribuam, uma</p><p>delas deve ser removida</p><p>da modelagem.</p><p>Voltaremos ao exemplo da estimativa de preços de imóveis para</p><p>adicionar ao modelo outras variáveis. Vamos escolher aquelas que</p><p>possuem, no mapa de calor, correlação maior que 0,5. São elas:</p><p>bathrooms, sqft_living, grade, sqft_above e sqft_living15.</p><p>Regressão linear multivariada.</p><p>Configuramos o conjunto de treinamento com 80% e o conjunto de</p><p>validação com 20% dos dados e, ao executar a regressão linear,</p><p>encontramos um score de 0,5432 para o modelo. Temos ainda um</p><p>potencial de crescimento, pois não utilizamos todas as variáveis</p><p>disponíveis. Vejamos os coeficientes da regressão para formar a</p><p>expressão da relação.</p><p>R2</p><p></p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 27/71</p><p>Coeficientes.</p><p>A expressão mostrada a seguir indica a relação segundo os coeficientes</p><p>retornados pela regressão linear multivariada, na qual e</p><p>correspondem aos valores de bathrooms, sqft_above, sqft_living15</p><p>e grade, respectivamente.</p><p>Olhando o score calculado na validação do modelo, observamos</p><p>um valor de 0,5478, semelhante ao score obtido no treinamento.</p><p>Score da validação do modelo.</p><p>O é um dos métodos mais frequentemente</p><p>utilizados na avaliação de modelos, mas ele tem um</p><p>problema quando aplicado à regressão linear com</p><p>múltiplas variáveis. Sempre que adicionamos uma</p><p>variável ao modelo, o score aumenta.</p><p>Esse comportamento pode nos levar ao que chamamos de overfitting,</p><p>quando há muitos termos na relação e os valores de retorno dos</p><p>coeficientes correspondentes tornam-se não confiáveis. Isso acontece</p><p>porque eles ficam muito bem ajustados ao dataset, perdendo a</p><p>generalidade que se deseja para um modelo.</p><p>Portanto, prosseguiremos com a adição de outras variáveis</p><p>independentes ao modelo, faremos novos treinamentos e</p><p>x1, x2, x3, x4</p><p>x5</p><p>P r ice = − 638440 − 43101, 62x1 − 81, 00x2 + 20,</p><p>96x3 + 253, 62x4 + 110502, 80x5</p><p>R2</p><p>R2</p><p>R2</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 28/71</p><p>compararemos os scores, sabendo que um score muito alto em uma</p><p>regressão multivariada pode indicar um overfitting. O gráfico a seguir</p><p>mostra as duas curvas sobrepostas: a curva real e a curva gerada pelo</p><p>modelo. Observe que o modelo se ajusta bem ao miolo da curva real,</p><p>mas há também muitos valores bem distantes do real. São esses os</p><p>valores que temos que perseguir, tentando responder à seguinte</p><p>pergunta: que outras variáveis podem contribuir para aproximar essa</p><p>diferença que estamos vendo agora, sem causar overfitting?</p><p>Curva real versus curva prevista.</p><p>Existem algumas variáveis que representam grupos ou categorias.</p><p>Exemplo</p><p>Veja, por exemplo, a informação contida em floors. Se você verificar</p><p>quais são os valores existentes nessa coluna, vai perceber que existem</p><p>imóveis com 1 andar, 2 andares, 3 andares, além dos intermediários, 1.5,</p><p>2.5 e 3.5. Essa informação não é um valor numérico, trata-se de uma</p><p>informação que especifica um grupo de imóveis. Os imóveis de apenas</p><p>1 andar, os de 1 andar e 1 mezanino, 2 andares, e por aí vai. Logo, eles</p><p>não devem ser considerados como valores numéricos para o modelo,</p><p>como a área living. Outro exemplo é waterfront. Ou o imóvel tem um rio</p><p>ou lago ou mar ao redor, ou não tem, por isso, é 0 ou 1 e deve ser</p><p>considerado como uma categoria de imóveis.</p><p>Quando os valores de uma variável de categoria possuem uma ordem</p><p>implícita, nós criaremos um rótulo para cada valor existente. Entretanto,</p><p>quando os valores não guardam uma ordenação, criaremos uma coluna</p><p>para cada valor da variável. Isso é o que chamamos de variáveis</p><p>dummy. No nosso dataset, existem os dois casos.</p><p>�oors</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 29/71</p><p>Quando pensamos em floors, podemos dizer que existe uma ordem</p><p>implícita nos valores, pois um imóvel com 1 andar tem menos andares</p><p>do que um imóvel com 2 andares.</p><p>waterfront</p><p>Quando falamos de waterfront, não há uma ordem: ou é ou não é.</p><p>Ainda, a coluna view, que possui cinco valores discretos, não apresenta</p><p>uma ordem definida, pois são os valores que representam a vista do</p><p>imóvel. Sendo assim, vamos criar um rótulo para floors e variáveis</p><p>dummy para waterfront e view.</p><p>Curva real versus curva prevista.</p><p>Na captura de tela anterior, podemos ver os valores distintos existentes</p><p>na coluna floors e a criação do rótulo mediante LabelEncoder(). Criamos</p><p>um array com os valores ordenados e utilizamos a função transform()</p><p>para substituir o valor atual da coluna pelo índice do array</p><p>correspondente, convertido para string pela função astype().</p><p>Com essa mudança, os estimadores de regressão linear vão tratar essa</p><p>informação de acordo com um índice que representa uma categoria,</p><p>algo bem mais adequado ao que de fato representa a informação.</p><p>Vejamos os casos de waterfront e view.</p><p>Variáveis dummy para waterrfront e view.</p><p>Para essas variáveis, o método get_dummies gera novas colunas no</p><p>dataframe.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 30/71</p><p>waterfront</p><p>Para waterfront, como</p><p>os valores distintos são</p><p>0 e 1, serão criadas as</p><p>colunas waterfront_0 e</p><p>waterfront_1.</p><p>view</p><p>Para view, como os</p><p>valores distintos são 0,</p><p>1, 2, 3 e 4, serão criadas</p><p>as colunas view_0,</p><p>view_1, view_2, view_3 e</p><p>view_4.</p><p>Todas essas colunas serão preenchidas com o valor 0 ou 1, de acordo</p><p>com os valores originais na coluna correspondente. Por exemplo, uma</p><p>linha do dataframe que contenha waterfront=0 e view=1 terá o valor 1</p><p>nas colunas waterfront_0 e view_1. Todas as outras conterão o valor 0.</p><p>Veja a seguir as cinco primeiras linhas do dataframe após a criação do</p><p>rótulo e das variáveis dummy.</p><p>Variáveis categóricas inseridas no dataframe.</p><p>Agora que tratamos as colunas categóricas, vamos adicioná-las ao</p><p>modelo de treinamento. Para as variáveis dummy, você deve incluir as</p><p>novas colunas adicionadas ao dataframe, conforme mostrado a seguir.</p><p>No caso de floors, como é uma variável de rótulo, basta incluí-la no</p><p>modelo.</p><p>Treinamento com as novas colunas categóricas.</p><p>Ao treinar o modelo com 80% dos dados do dataset, obtemos um score</p><p>de 0,5958 e, ao validar o modelo com 20% dos dados, obtemos um</p><p>score de 0,5905, indicando que nosso modelo melhorou</p><p>substancialmente com a inclusão das novas variáveis. Captamos</p><p>aproximadamente mais 5% da variância em price, o que representa um</p><p>bom avanço.</p><p></p><p>R2</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 31/71</p><p>Score do novo modelo aplicado aos dados de teste.</p><p>Nesse momento, temos as principais variáveis disponíveis no dataset</p><p>inseridas em nosso modelo.</p><p>Mas esse modelo é bom?</p><p>Temos uma métrica indicando que, com esse modelo, conseguimos</p><p>capturar cerca de 60% da variância de price, quando executado sobre os</p><p>dados que temos. Faremos um último treinamento: vamos inserir todas</p><p>as colunas do dataframe que ainda não consideramos e treinar o</p><p>modelo.</p><p>Treinamento com todo o dataframe.</p><p>Na manobra vista anteriormente, estamos atribuindo a X todas as</p><p>colunas que existem no dataframe, exceto price. Isso inclui as variáveis</p><p>categóricas que criamos anteriormente e as colunas com correlação</p><p>abaixo de 50%, identificadas no mapa de calor.</p><p>Treinamento com todo o dataframe.</p><p>Vemos que os scores, tanto no treinamento quanto no teste, foram a</p><p>70%, um aumento considerável quando comparado ao último modelo. A</p><p>pergunta que você deve se fazer é se o modelo é confiável. O fato é que,</p><p>ao incluir as outras onze colunas, houve aparentemente uma evolução</p><p>na qualidade do modelo.</p><p>Veja o gráfico comparativo entre curva real e a prevista e note que a</p><p>aproximação das duas curvas é de fato maior que o visto anteriormente.</p><p>R2</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 32/71</p><p>Treinamento com todo o dataframe.</p><p>Saiba mais</p><p>Para mais detalhes sobre o treinamento de modelos de regressão linear,</p><p>visite o scikitlearn Nessa página, você vai encontrar também outros</p><p>exemplos de uso de LinearRegression.</p><p>Teoria na prática</p><p>Retorne ao ponto imediatamente após a inclusão das variáveis</p><p>categóricas para continuar as tarefas de pré-processamento,</p><p>treinamento e avaliação da regressão linear multivariada.</p><p>1) Inclua as variáveis bedrooms e sqft_basement; elas apresentam</p><p>boa correlação com price, mas não foram incluídas até aqui. Qual</p><p>sua avaliação do novo modelo?</p><p>2) Inclua as variáveis age e yr_renovated no seu modelo e avalie os</p><p>novos resultados. Qual das duas proporciona o maior impacto no</p><p>score ?</p><p>3) A variável condition é uma variável categórica? Caso positivo,</p><p>inclua-a no seu modelo, definindo antes se é ordenada ou não. Treine</p><p>o novo modelo e verifique seu resultado.</p><p>4) Compare esses novos resultados com o resultado obtido pela</p><p>inclusão de todas as colunas do dataframe. A que conclusões você</p><p>chegou?</p><p>R2</p><p>Mostrar solução</p><p>https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 33/71</p><p>Treinamento de regressões lineares</p><p>univariadas</p><p>No vídeo a seguir, apresentamos uma demonstração das técnicas de</p><p>treinamento e validação de modelos de regressão linear multivariada.</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Considerando os métodos de treinamento e a avaliação de modelos</p><p>lineares multivariados, assinale a afirmativa correta.</p><p></p><p>A</p><p>Quando identificamos que diversas variáveis</p><p>contribuem para o valor de uma variável alvo,</p><p>podemos construir uma regressão linear</p><p>multivariada, incluindo todas essas variáveis no</p><p>modelo.</p><p>B</p><p>Variações no treinamento de modelos lineares</p><p>multivariados incluem apenas a alteração na</p><p>composição das variáveis do modelo.</p><p>C</p><p>Variáveis categóricas, se presentes no conjunto de</p><p>dados disponível, são sempre muito importantes</p><p>para os modelos multivariados. É preciso que elas</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 34/71</p><p>Parabéns! A alternativa D está correta.</p><p>Overfitting é um fenômeno que indica que há uma quantidade</p><p>excessiva de termos na relação, o que faz com que os valores de</p><p>retorno dos coeficientes correspondentes tornem-se não confiáveis,</p><p>pois eles estão muito bem ajustados ao conjunto de treinamento,</p><p>perdendo assim a capacidade de generalização que se deseja para</p><p>um modelo. Em uma regressão multivariada, um modelo que</p><p>apresente um score R² muito alto pode indicar um overfitting.</p><p>A opção A está incorreta, pois deve-se, observando as correlações</p><p>correspondentes, adicionar ao modelo apenas as variáveis que</p><p>melhor contribuem para o valor de uma variável alvo e não todas as</p><p>que contribuem em algum grau.</p><p>A opção B está incorreta, porque as variações no treinamento de</p><p>modelos lineares incluem também a variação do conjunto de dados</p><p>separados para o treinamento.</p><p>A opção C está incorreta, porque as variáveis categóricas nem</p><p>sempre contribuem decisivamente para o resultado da variável alvo.</p><p>É preciso que sejam observadas as correlações e os modelos</p><p>gerados com a sua inclusão.</p><p>Por fim, a opção E está incorreta. Variáveis categóricas devem ser</p><p>substituídas por outras variáveis, seja por variáveis de rótulo ou por</p><p>variáveis dummy, pois ambas poderão contribuir adequadamente</p><p>para o resultado final.</p><p>Questão 2</p><p>Entre os objetivos discriminados a seguir, qual pode ser abordado</p><p>por uma regressão linear multivariada?</p><p>sejam substituídas por variáveis que expressem</p><p>corretamente o grupo correspondente ao dado.</p><p>D</p><p>Overfitting ocorre quando o acréscimo de variáveis</p><p>não contribui para o resultado final do modelo,</p><p>tornando-o não confiável.</p><p>E</p><p>Variáveis categóricas não devem ser substituídas</p><p>por outras variáveis, seja por variáveis de rótulo ou</p><p>por variáveis dummy.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 35/71</p><p>Parabéns! A alternativa D está correta.</p><p>Calcular a inflação com base na variação de preços dos itens da</p><p>cesta básica apresenta um problema para cálculo de uma variável</p><p>com múltiplas variáveis independentes, correspondentes aos</p><p>diversos itens da cesta básica. Para calcular o peso ideal de um ser</p><p>humano baseado na sua altura é utilizada uma regressão linear,</p><p>mas a partir de uma única variável independente. Todas as outras</p><p>opções não se referem a problemas de regressão.</p><p>A Classificar músicas segundo o seu estilo.</p><p>B Verificar se uma notícia é fake ou não.</p><p>C</p><p>Classificar vinhos de acordo com uma escala de</p><p>qualidade que vai de 1 a 6.</p><p>D</p><p>Calcular a inflação com base na variação de preços</p><p>dos itens da cesta básica.</p><p>E</p><p>Calcular o peso ideal de um ser humano baseado na</p><p>sua altura.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 36/71</p><p>3 - Modelo de árvore de decisão</p><p>Ao �nal deste módulo, você será capaz de descrever o treinamento do modelo de árvore de</p><p>decisão.</p><p>Árvores de decisão</p><p>Modelos de classificação são divididos em duas categorias: aqueles</p><p>que entregam um valor binário, isto é, uma entre duas classes; e aqueles</p><p>que podem trabalhar com várias classes. Árvores de decisão se</p><p>enquadram nesta última categoria, permitindo que conjuntos de dados</p><p>sejam classificados em 1 de n classes distintas.</p><p>Exemplo</p><p>Em um problema de predição da qualidade de vinhos, você tem diversas</p><p>informações sobre vinhos em determinada região, como acidez, tempo</p><p>de amadurecimento, quantidade de álcool, entre outras. Cada vinho é</p><p>classificado em uma categoria que é uma referência para a qualidade do</p><p>vinho. Com árvores de decisão, você pode criar regras baseadas nesses</p><p>atributos disponíveis e que são examinadas em uma sequência</p><p>determinada pela árvore e, no fim das avaliações, a árvore entrega a</p><p>categoria do</p><p>vinho.</p><p>Mas como essas regras são formadas?</p><p>O treinamento de um modelo de árvore de decisão faz com que o</p><p>algoritmo percorra o conjunto de dados e execute um mapeamento das</p><p>variáveis e dos seus valores. Desse modo, ele absorve um</p><p>conhecimento na forma de regras e cria uma estrutura de árvore, em</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 37/71</p><p>que cada ramificação corresponde a uma decisão baseada em uma das</p><p>regras construídas sobre as variáveis e os valores do problema.</p><p>As regras são baseadas em thresholds; as decisões, em regras. Esses</p><p>thresholds ou limiares são definidos na fase de treinamento pelo</p><p>algoritmo que constrói o modelo de classificação.</p><p>Representação de uma árvore de decisão.</p><p>Exemplo</p><p>O threshold de uma variável X pode ser 10,69. Uma regra para esse par</p><p>variável/valor pode ser X < 10,69. Se a condição for satisfeita, você</p><p>seguirá um caminho na árvore; caso contrário, irá pelo outro</p><p>imediatamente adjacente. Esta é a decisão: seguir um caminho ou</p><p>outro.</p><p>Note que a ordem das variáveis na árvore importa para o resultado final.</p><p>Como ela é baseada em decisões sobre os pares variáveis/valor,</p><p>qualquer mudança na sequência de decisões pode alterar a estrutura da</p><p>árvore e, portanto, o resultado final. Essa ordem também é determinada</p><p>durante a fase de treinamento do modelo.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 38/71</p><p>Sloan Digital Sky Survey é uma excelente base de dados com 10.000</p><p>observações do espaço. Para cada observação, temos 17 atributos e 1</p><p>classificação, que pode ser estrela, galáxia ou quasar. Vamos criar um</p><p>modelo baseado em árvore de decisão para prever o tipo de observação</p><p>baseado nos seus atributos. A abertura do dataset nos mostra quais são</p><p>esses atributos.</p><p>Abertura do dataset Sloan Digital Sky Survey.</p><p>Entre os 17 atributos, há aqueles que identificam os objetos, como objid</p><p>e specobjid, e os que, de fato, os caracterizam, como right ascension e</p><p>declination. Em class, temos as classificações presentes no dataset:</p><p>STAR, GALAXY e QSO. Observe a seguir os contadores para cada uma</p><p>das classificações.</p><p>Classificações das observações e dos contadores correspondentes.</p><p>Nesse dataset, há um número de estrelas e galáxias bem maior que</p><p>quasares. Para construir uma árvore, dizemos quais são as variáveis</p><p>independentes e a dependente; em seguida, chamamos o classificador.</p><p>Existem muitos algoritmos para a geração de árvores de decisão, como</p><p>ID3, C4.5, C5.0 e CART. No Sklearn, o algoritmo utilizado é uma versão</p><p>otimizada do CART (Classification and Regression Trees), que determina</p><p>a estrutura da árvore e as regras utilizadas em cada nó intermediário em</p><p>que acontecem os splits. O objetivo do algoritmo é calcular os limiares</p><p>das variáveis até chegar aos nós folha, aqueles que definem o output do</p><p>modelo e em que não há mais split.</p><p>Para esse primeiro treinamento, vamos reservar 20% para o conjunto de</p><p>teste e passar o parâmetro max_depth, que indica a profundidade</p><p>máxima da árvore.</p><p>Treinamento do modelo de árvore de decisão.</p><p>https://www.kaggle.com/lucidlenn/sloan-digital-sky-survey</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 39/71</p><p>Com essa profundidade, a árvore fica com dois níveis, sendo um</p><p>intermediário e o outro, folha. Com o modelo já treinado, a validação</p><p>consiste em usar o conjunto de teste e percorrer a árvore, considerando</p><p>as decisões impostas nos nós intermediários, até chegar a um nó folha</p><p>no qual o modelo entrega a predição.</p><p>Validação do modelo de árvore de decisão.</p><p>A validação do modelo passa pela análise da matriz de confusão. A</p><p>seguir, ela mostra que apenas uma pequena parte das previsões é de</p><p>falsos negativos, ou seja, ao comparar as previsões com os valores</p><p>reais da classificação, se observa que a maioria das previsões confere.</p><p>Por exemplo, de todas aquelas realizadas para GALAXY, 984 foram</p><p>acertadas, enquanto apenas 14 não o foram. Esse comportamento se</p><p>repete para QSO e STAR.</p><p>Matriz de confusão das previsões do modelo.</p><p>Para confirmar a qualidade do modelo, verificaremos as métricas. Elas</p><p>revelam a seguir que o modelo teve um excelente desempenho sobre o</p><p>conjunto de teste. Note o parâmetro average em precision_score e</p><p>recall_score.</p><p>Métricas da validação do modelo de árvore de decisão.</p><p>O parâmetro average determina como os scores serão calculados. As</p><p>opções são:</p><p>Micro</p><p>Esta é a opção usada em nosso exemplo: com ela, queremos que todas</p><p>as observações contribuam igualmente para a métrica.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 40/71</p><p>Macro</p><p>Esta é a opção default: com ela, as observações contribuem para a</p><p>média da classe correspondente, enquanto a métrica é calculada como</p><p>a média das métricas das classes.</p><p>Weighted</p><p>Nesta opção, é dado um peso maior para as classes mais frequentes no</p><p>dataset.</p><p>Samples</p><p>Esta opção calcula métricas para cada observação e encontra as suas</p><p>médias. Só faz sentido o seu uso em tarefas de classificação</p><p>multiclasse.</p><p>Em seguida, veremos duas representações da árvore gerada: uma</p><p>textual e outra gráfica.</p><p>Representação textual</p><p>Na representação textual, que está na imagem adiante, o primeiro nível</p><p>tem suas regras baseadas na feature_11, que corresponde ao atributo</p><p>redshift, o décimo segundo atributo (índice 11) do conjunto de</p><p>treinamento carregado em X. No segundo nível, o das folhas, as regras</p><p>também são baseadas nesse mesmo atributo.</p><p>Métricas da validação do modelo de árvore de decisão.</p><p>Representação grá�ca</p><p>Na representação gráfica mostrada a seguir, temos uma visualização</p><p>que realça em cores as classificações previstas pelo modelo.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 41/71</p><p>Métricas da validação do modelo de árvore de decisão.</p><p>A leitura da árvore deve se iniciar no nó raiz, que fica no topo. Podemos</p><p>ver que a regra definida nesse nó é baseada no atributo redshift e que o</p><p>threshold correspondente é 0,002. Quando a condição definida pela</p><p>regra é verdadeira, descemos pelo ramo da esquerda. Caso contrário,</p><p>fazemos isso pelo ramo da direita. Desse modo, vamos tomando</p><p>decisões baseadas na avaliação das regras até chegar a um nível folha.</p><p>Atenção</p><p>Nós folhas não contêm regras: eles são o fim da árvore e entregam a</p><p>classificação prevista pelo modelo.</p><p>Cada nó, seja ele intermediário ou folha, mostra os valores de gini,</p><p>samples, value e class.</p><p> O nó raiz mostra samples=8.000, que corresponde</p><p>aos 80% separados para o conjunto de treinamento.</p><p>Esse número indica que toda a árvore foi baseada</p><p>em 8.000 observações.</p><p> Conforme você vai descendo pela árvore, os nós</p><p>intermediários mostram a quantidade de samples</p><p>da subárvore; então, o nó intermediário mais à</p><p>direita, cuja regra é redshift<=0,234, determina que</p><p>a subárvore correspondente foi baseada em 4.676</p><p>observações.</p><p> Se você somar o número de samples de nós filho,</p><p>terá a quantidade de samples do nó pai. É o caso de</p><p>4 018 658 lt 4 676</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 42/71</p><p>O índice gini, presente em cada nó da árvore, informa o grau de</p><p>incerteza ou impureza da predição realizada no nó. É um valor que se</p><p>situa entre 0 e 1, sendo 0 o indicador de que todas as observações do</p><p>nó pertencem a determinada classe e 1, o indicador de que as</p><p>observações estão aleatoriamente distribuídas pelas classes. Um nó</p><p>puro é o objetivo maior do classificador da árvore, porque ele representa</p><p>uma classificação correta para todas as observações contidas naquele</p><p>nó específico.</p><p>Observe que os dois nós folha à esquerda contêm o mesmo rótulo</p><p>principal.</p><p>Métricas da validação do modelo de árvore de decisão.</p><p>4.018+658, que resulta em 4.676.</p><p> Do mesmo modo, ao somar a quantidade de</p><p>observações de nós folha, terá a quantidade do nó</p><p>imediatamente superior. Essa quantidade de</p><p>samples em cada nó é distribuída pelos valores</p><p>mostrados em value.</p><p> No nó folha mais à esquerda da árvore, temos</p><p>3.321 observações, sendo que 21 foram</p><p>classificadas como GALAXY; 1, como QSO; e as</p><p>restantes 3.299, como STAR.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 43/71</p><p>Por que, então, esse ramo da árvore não parou no nó imediatamente</p><p>superior?</p><p>O algoritmo poderia ter consolidado as classificações no nó superior,</p><p>mantendo o mesmo rótulo principal. Isso acontece pelo motivo citado</p><p>anteriormente em relação à busca por nós puros. O algoritmo</p><p>interrompe essa busca quando encontra pureza máxima ou quando um</p><p>novo split não traz ganho de informação.</p><p>Árvore de 3 níveis</p><p>Em nosso exemplo anterior, limitamos max_depth em 2; por isso, a</p><p>árvore foi cortada em 2 níveis, mas manteve a estrutura criada pelo</p><p>algoritmo. Adiante, vamos alterar esse max_depth para 3 e ver como se</p><p>comporta a nova árvore.</p><p>Métricas da validação do modelo de árvore de decisão.</p><p>Ao acrescentar um nível na árvore, houve um pequeno ganho, conforme</p><p>podemos ver a seguir, lembrando que pequenos ganhos podem fazer</p><p>enormes diferenças no mundo real. Tínhamos um modelo com as</p><p>métricas calculadas em 0,9875 e passamos a 0,9895. Como estamos</p><p>usando average=micro, os valores se mantêm iguais, mas, como vimos</p><p>anteriormente, é possível alterar esse comportamento.</p><p>Métricas da validação do modelo de árvore de decisão.</p><p>Aqui veremos as duas representações possíveis desse exemplo.</p><p>Representação textual </p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 44/71</p><p>Note que, com essa nova profundidade máxima, os atributos g e i</p><p>passaram a ser considerados nas regras dos nós intermediários.</p><p>Veja também que, como não especificamos decimals em</p><p>plot_tree, o nó raiz teve a sua visualização prejudicada; portanto,</p><p>trata-se de uma boa prática especificar esse parâmetro, como</p><p>fizemos no plot da árvore anterior.</p><p>Representação textual.</p><p>A representação gráfica a seguir utiliza graphviz, outra biblioteca</p><p>para visualização de árvores de decisão mais adequada,</p><p>conforme o tamanho das árvores aumenta. Como veremos</p><p>adiante, elas podem ficar realmente grandes.</p><p>Representação gráfica.</p><p>Hiperparâmetros para árvores de</p><p>decisão</p><p>Existem pares variável/valor que podem ser especificados quando</p><p>executamos classificadores. Esses valores são capazes de alterar o</p><p>comportamento do algoritmo, assim como limitar os recursos</p><p>Representação gráfica </p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 45/71</p><p>computacionais utilizados por ele. Uma árvore de decisão pode ser tão</p><p>grande quanto necessário, embora isso exija processador, memória e</p><p>tempo para sua geração. Portanto, é importante conhecer essas</p><p>variáveis e utilizá-las adequadamente, seja para restringir o uso dos</p><p>recursos computacionais, seja para realizar o tuning do modelo. Essas</p><p>variáveis são chamadas de hiperparâmetros.</p><p>Atenção</p><p>O tuning do modelo de árvore de decisão busca encontrar os</p><p>hiperparâmetros do classificador que gerem a melhor árvore de decisão</p><p>de acordo com as restrições existentes.</p><p>Um aspecto importante do tuning, ao qual devemos estar sempre</p><p>atentos, é o overfitting. Risco existente em boa parte dos algoritmos de</p><p>machine learning, ele ocorre quando o modelo executa com excelente</p><p>desempenho no conjunto de treinamento, embora seu desempenho,</p><p>quando executado com o conjunto de teste, fique bem abaixo do</p><p>esperado. Isso ocorre frequentemente quando não especificamos os</p><p>parâmetros corretos para o classificador ou quando inserimos variáveis</p><p>que possuem alta correlação com outras já inseridas no modelo. Os</p><p>hiperparâmetros principais para o classificador de árvores de decisão</p><p>são:</p><p></p><p>max_depth</p><p>Corresponde à profundidade máxima permitida para a árvore.</p><p></p><p>max_features</p><p>Corresponde ao número de features utilizado por cada árvore de</p><p>decisão.</p><p></p><p>max_leaf_nodes</p><p>Corresponde ao número máximo de nós folha da árvore.</p><p>Agora focaremos a profundidade. Um valor max_depth=4 indica que</p><p>podemos ter 3 níveis intermediários (depois do nó raiz) fazendo split e 1</p><p>último nível folha. Se você não passar esse hiperparâmetro, o algoritmo</p><p>poderá usar a profundidade necessária para atingir os pontos de parada</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 46/71</p><p>dos níveis folha, que ocorre quando eles são puros ou quando um novo</p><p>split não acrescenta nenhum ganho para o modelo.</p><p>Voltemos ao problema de predição da qualidade de vinhos para ver os</p><p>seguintes pontos: como podemos abordá-lo com um modelo de árvore</p><p>de decisão e de que forma é possível exercitar a busca pela melhor</p><p>árvore (com a seleção e a avaliação automáticas de hiperparâmetros)</p><p>por meio de uma técnica conhecida como GridSearch. A abertura do</p><p>dataset revela os atributos a seguir.</p><p>Abertura do dataset de vinhos.</p><p>Ao verificar o histograma da coluna quality, vemos claramente que os</p><p>valores 5 e 6 são predominantes, com contadores muito acima dos</p><p>outros valores. Em casos como esse, dizemos que o conjunto de dados</p><p>não está balanceado e podemos suspeitar que o classificador reaja</p><p>privilegiando as predições para essas duas categorias, o que seria um</p><p>comportamento normal.</p><p>Histograma da coluna quality.</p><p>Vamos gerar inicialmente uma árvore com profundidade máxima 2 para</p><p>confirmar essa hipótese. Separamos o conjunto de treinamento com</p><p>80% do conjunto de dados e chamamos o classificador, passando esse</p><p>conjunto e o hiperparâmetro max_depth.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 47/71</p><p>Treinamento da árvore de decisão.</p><p>Com essa profundidade, a árvore fica com dois níveis, sendo um</p><p>intermediário e o outro, folha. Prosseguimos para a validação do</p><p>modelo, que vai usar o conjunto de teste e percorrer a árvore, tomando</p><p>as decisões impostas pelas regras nos nós até chegar a um nó folha.</p><p>Veja a seguir a chamada ao método predict, passando o conjunto de</p><p>teste, e as primeiras previsões realizadas pelo modelo.</p><p>Predição da qualidade do vinho usando a árvore.</p><p>Podemos observar os resultados da predição para as cinco primeiras</p><p>linhas do conjunto de teste. Como constatamos no histograma do</p><p>atributo quality, os valores 5 e 6 são os de maior frequência no conjunto</p><p>de dados - e o algoritmo leva isso em consideração durante a</p><p>construção da árvore. Veja a seguir a matriz de confusão para as</p><p>previsões geradas.</p><p>Predição da qualidade do vinho usando a árvore.</p><p>Observamos uma maior concentração das previsões nos valores 5 e 6,</p><p>como suspeitamos, especialmente porque restringimos a profundidade</p><p>máxima da árvore em 2. Desse modo, o algoritmo procurou a melhor</p><p>relação entre a definição das regras e o acerto das classes, resultando</p><p>em um modelo que privilegiou os valores mais frequentes do dataset.</p><p>Vejamos a acurácia, a precisão e o recall do modelo.</p><p>Métricas do modelo.</p><p>Atingimos uma acurácia de 0,6125 para o modelo, um bom resultado se</p><p>considerarmos que estamos utilizando um dataset desbalanceado e que</p><p>restringimos a profundidade da árvore em dois níveis. No primeiro nível,</p><p>as regras são baseadas na feature_10. No segundo nível, o das folhas,</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 48/71</p><p>elas se baseiam na feature_9. Observemos as duas representações da</p><p>árvore gerada, começando pela textual.</p><p>Representação textual de uma árvore</p><p>de decisão.</p><p>Confira agora a representação gráfica.</p><p>Representação gráfica de uma árvore de decisão.</p><p>Mas como determinar a melhor profundidade para a</p><p>árvore? E os outros hiperparâmetros relevantes para a</p><p>geração do modelo? Como realizar o tuning desses</p><p>hiperparâmetros?</p><p>Uma boa prática de tuning de modelos é o GridSearch. Trata-se de um</p><p>método que busca analisar os diferentes comportamentos de um</p><p>algoritmo quando eles são submetidos a diferentes valores de</p><p>hiperparâmetros.</p><p>No exemplo adiante, queremos avaliar árvores de decisão com</p><p>diferentes profundidades máximas. Para isso, construímos uma lista de</p><p>valores para max_depth, que vai de 2 a 16. Em seguida, ao invocar o</p><p>método GridSearchCV, o classificador é chamado uma vez para cada</p><p>valor de max_depth, armazenando os resultados de cada execução para</p><p>a comparação. Ao final da busca, ele apresenta o valor de max_depth</p><p>que proporcionou o melhor score.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 49/71</p><p>Uso de GridSearchCV.</p><p>Segundo o GridSearch, o melhor valor de max_depth é 11.</p><p>Percorreremos a seguir todos os resultados armazenados em cv_results</p><p>para mostrar o score e o rank de cada max_depth.</p><p>Resultados de GridSearchCV.</p><p>Após a busca, deve-se validar o modelo com o valor do hiperparâmetro</p><p>sugerido. De fato, ao chamar o classificador com o melhor parâmetro</p><p>armazenado em best_params_, as métricas calculadas para o modelo</p><p>são melhores que as obtidas anteriormente.</p><p>Resultados de GridSearchCV.</p><p>Podemos avançar com a análise de hiperparâmetros, passando todos</p><p>os parâmetros necessários.</p><p>Naturalmente, quanto maior o número de parâmetros e</p><p>de valores associados a cada um deles, maior será o</p><p>esforço computacional requerido pelo algoritmo.</p><p>Temos adiante uma análise baseada em criterion, max_depth e</p><p>max_features. Observe que, para esse tuning, foram selecionados, além</p><p>dos valores de max_depth e max_features, o critério de entropy.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 50/71</p><p>Resultados de GridSearchCV com seleção de entropia.</p><p>Alternativa ao critério de índice gini, a entropia também tem os seus</p><p>valores perto de zero quanto mais as classes fazem parte de uma única</p><p>classe e mais perto de 1 quanto maior é a desordem nessa</p><p>classificação, causando uma distribuição mais uniforme entre as</p><p>classes.</p><p>A principal diferença entre os dois critérios é que a entropia utiliza a</p><p>função log para o cálculo do índice, aumentando o valor do índice</p><p>correspondente e penalizando mais as observações incorretamente</p><p>classificadas. É por isso que preferimos índices gini para datasets</p><p>desbalanceados, como esse de vinhos.</p><p>Teoria na prática</p><p>Abra o notebook Spotify Decision Tree.ipynb e siga as instruções. O</p><p>notebook utiliza o dataset Spotify predict using DecisionTree.</p><p>Treinamento de árvores de decisão</p><p>No vídeo a seguir, demonstramos as técnicas de treinamento e</p><p>validação de modelos de árvores de decisão.</p><p>Mostrar solução</p><p></p><p>https://www.kaggle.com/adityaraut/spotify-dataset-predict-using-decisiontree</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 51/71</p><p>Falta pouco para atingir seus objetivos.</p><p>Vamos praticar alguns conceitos?</p><p>Questão 1</p><p>Em relação ao tuning de modelos de árvores de decisão, qual das</p><p>opções a seguir oferece uma lista válida de hiperparâmetros?</p><p>Parabéns! A alternativa C está correta.</p><p>Max_features e max_leaf_nodes são, ao lado de max_depth, os</p><p>principais hiperparâmetros válidos de árvores de decisão. São</p><p>esses hiperparâmetros do algoritmo de classificação que geram a</p><p>melhor árvore de decisão dado um conjunto de restrições.</p><p>Questão 2</p><p>Entre os objetivos discriminados a seguir, qual deles não deve ser</p><p>abordado por somente uma árvore de decisão para classificação?</p><p>A Max_height e max_features.</p><p>B Max_leaf_nodes e max_height.</p><p>C Max_features e max_leaf_nodes.</p><p>D Max_weight e max_height.</p><p>E Max_weight e max_features.</p><p>A Calcular a faixa de preços de referência de imóveis.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 52/71</p><p>Parabéns! A alternativa D está correta.</p><p>Condições meteorológicas são compostas por diversas</p><p>informações, como tipo de vento, velocidade dele, temperatura,</p><p>umidade e chuva, entre outros. Embora possamos construir árvores</p><p>de decisão multiclass, a modelagem do problema frequentemente</p><p>envolve uma combinação de modelos de machine learning com</p><p>várias árvores de decisão, além da utilização de outros algoritmos,</p><p>como regressões e redes neurais.</p><p>4 - Modelo de máquinas de vetores de suporte</p><p>B</p><p>Classificar animais em peixes, anfíbios, répteis, aves</p><p>e mamíferos.</p><p>C</p><p>Prever doenças, como câncer, diabetes e</p><p>complicações da covid-19.</p><p>D</p><p>Prever condições meteorológicas em dada</p><p>localidade.</p><p>E Classificar e-mails como spam ou não spam.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 53/71</p><p>Ao �nal deste módulo, você será capaz de descrever o treinamento do modelo de máquinas de</p><p>vetores de suporte.</p><p>Máquinas de vetores de suporte</p><p>Frequentemente utilizadas para classificação binária, as Support Vector</p><p>Machines (máquinas de vetores de suporte) são baseadas em</p><p>hiperplanos que separam as observações, de tal maneira que a função</p><p>associada ao hiperplano estabeleça a fronteira a ser utilizada no modelo</p><p>de classificação. Essa fronteira é chamada de decision boundary. O</p><p>problema é que existem potencialmente infinitas fronteiras. Veja a</p><p>representação a seguir.</p><p>Vetores de suporte.</p><p>Dica</p><p>Dependendo da fronteira escolhida, os pontos em vermelho, com</p><p>potencial para ser outliers ou novos pontos em um conjunto de dados</p><p>pós-validação, podem fazer parte de uma classe ou de outra.</p><p>A ideia fundamental do método é gerar um vetor de suporte para cada</p><p>classificação e, em seguida, estabelecer o hiperplano, maximizando a</p><p>distância entre ele e os vetores de suporte gerados. Na imagem, os</p><p>vetores de suporte se situam sobre as linhas tracejadas: um, para o</p><p>grupo de observações representado pelos pontos azuis; outro, para o</p><p>grupo de observações representado pelos pontos verdes.</p><p>Com base nesses dois vetores de suporte, o algoritmo gera a função</p><p>que divide o plano, representada na imagem pela linha contínua entre as</p><p>duas linhas tracejadas. Essa função é otimizada com a maximização da</p><p>margem, ou seja, a margem mais ampla possível que maximiza a</p><p>distância entre ela e os vetores de suporte.</p><p>29/03/24, 01:03 Treinamento de Modelos de Aprendizado Supervisionado</p><p>https://stecine.azureedge.net/repositorio/00212ti/03138/index.html# 54/71</p><p>Vetores de suporte e divisão do plano.</p><p>Nesse exemplo, temos apenas duas dimensões, e é possível separar as</p><p>observações por intermédio de uma reta. Quando temos mais de duas</p><p>dimensões, isto é, mais de duas variáveis a serem consideradas para a</p><p>classificação, teremos uma superfície separando os pontos. Por esse</p><p>motivo, dizemos que Support Vector Machines encontram o melhor</p><p>hiperplano que separa os pontos no interior de um hipercubo.</p><p>Os pontos mais próximos do hiperplano são a base dos vetores de</p><p>suporte, e a distância da fronteira para esses vetores será escolhida</p><p>pelo algoritmo de otimização selecionado pelo classificador. Observe</p><p>que o método é muito sensível a outliers. Se o conjunto de dados tiver</p><p>uma ou mais observações muito distantes do conjunto principal, poderá</p><p>ser difícil gerar o hiperplano.</p><p>Comentário</p><p>Você sempre pode optar por remover os outliers do seu conjunto de</p><p>dados, mas, para o treinamento de máquinas de vetores de suporte, é</p><p>possível tolerá-los. Faremos isso com um dos hiperparâmetros que</p><p>veremos adiante.</p><p>Um conjunto de dados pode ser difícil de separar, mesmo sem ter</p><p>outliers. Para esses casos,</p>