![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
7.2 Votação Majoritária (L07: Métodos de Conjunto)
7.2 Votação Majoritária (L07: Métodos de Conjunto)
Neste vídeo, exploraremos um dos casos fundamentais de conjuntos de modelos conhecidos como votação por maioria. Por meio de um exemplo de brinquedo, examinaremos os benefícios da votação por maioria em comparação com o uso de um único classificador isoladamente.
Para começar, vamos considerar um cenário em que temos um problema de classificação binária. Temos um conjunto de dados que consiste em várias observações, cada uma associada a um conjunto de recursos e um rótulo de classe correspondente. Nosso objetivo é construir um classificador que possa prever com precisão os rótulos de classe para novas instâncias não vistas.
Para demonstrar o conceito de votação por maioria, começamos treinando três classificadores individuais em nosso conjunto de dados. Cada classificador utiliza um algoritmo ou modelo diferente para fazer previsões. Para simplificar, vamos supor que esses classificadores sejam árvores de decisão.
Depois de treinarmos nossos três classificadores de árvore de decisão, agora podemos fazer previsões sobre novas instâncias. No entanto, em vez de confiar na previsão de um único classificador, empregamos o princípio da votação por maioria. Na votação por maioria, cada classificador do conjunto lança um voto para seu rótulo de classe previsto. O rótulo de classe que recebe mais votos é considerado a predição final do ensemble.
Agora, vamos ver por que a votação por maioria pode ser mais eficaz do que usar um único classificador sozinho. Considere um cenário em que cada classificador de árvore de decisão individual tenha algum grau de erro devido ao ruído inerente ou variabilidade no conjunto de dados. Esses erros podem levar a previsões incorretas, reduzindo a precisão geral de um único classificador.
No entanto, combinando as previsões de vários classificadores por meio de votação por maioria, podemos potencialmente mitigar o impacto de erros individuais. Mesmo que um ou dois classificadores de árvore de decisão façam previsões incorretas, o processo de votação por maioria pode compensar esses erros. O rótulo de classe que recebe a maioria dos votos tem maior probabilidade de estar correto, resultando em precisão aprimorada em comparação com o uso de um único classificador.
Para ilustrar isso, vamos imaginar uma situação em que dois classificadores de árvore de decisão prevêem o rótulo de classe correto, enquanto um classificador faz uma previsão errada. Nesse caso, o rótulo de classe correto receberá dois votos, enquanto a predição errada receberá apenas um voto. Como resultado, o processo de votação majoritária do conjunto identificará corretamente o rótulo de classe com mais votos como previsão final, substituindo a previsão incorreta do classificador individual.
Este exemplo demonstra o poder dos métodos de conjunto, especificamente a votação por maioria, para aumentar a precisão da previsão. Combinando as previsões de vários classificadores, podemos alavancar os pontos fortes de cada classificador e minimizar o impacto de suas fraquezas ou erros individuais.
Em conclusão, este vídeo destaca a importância da votação por maioria como uma forma básica de conjuntos de modelos. Por meio de um exemplo de brinquedo, vimos como a votação por maioria pode superar o uso de um único classificador sozinho, principalmente quando classificadores individuais exibem erros ou variabilidade. Os métodos de conjunto, como a votação por maioria, oferecem uma abordagem poderosa para melhorar a precisão da previsão e são amplamente usados em aplicações práticas de aprendizado de máquina.
7.3 Ensacamento (L07: Métodos de Conjunto)
7.3 Ensacamento (L07: Métodos de Conjunto)
Depois de discutir minuciosamente o conceito de votação por maioria no vídeo anterior, o próximo vídeo se aprofundará em outro método fundamental conhecido como bagging, que significa agregação de bootstrap. O termo "bagging" é derivado da combinação das iniciais "B" e "ag G" e está intimamente relacionado ao conceito de bootstrapping. Esta técnica foi originalmente proposta por Leo Breiman, uma figura proeminente no campo das árvores de decisão, especificamente árvores de classificação e regressão (CART). Exploraremos as contribuições de Breiman com mais detalhes em uma palestra futura focada em florestas aleatórias.
Para começar, vamos esboçar o algoritmo para ensacamento. Embora possa parecer complexo à primeira vista, na verdade é bastante simples e consiste em apenas seis linhas de código, ou cinco se excluirmos a linha em branco. O algoritmo funciona da seguinte forma: vamos supor que temos um total de n amostras ou rodadas de bootstrap. Para cada rodada i, extraímos uma amostra bootstrap de tamanho m do conjunto de treinamento. Aqui, m representa o tamanho do conjunto de treinamento. É importante observar que o uso de letras únicas para variáveis pode parecer pouco convencional, mas foi necessário devido às limitações impostas pela escolha das letras. No vídeo anterior, usamos n para representar o número de amostras bootstrap, que corresponde ao número de classificadores nos classificadores de votação do conjunto que discutimos.
Para cada amostra bootstrap, treinamos um classificador e aplicamos votação por maioria. Esse processo é bastante semelhante ao classificador de votação de conjunto que cobrimos anteriormente, com a única diferença de que, em vez de treinar cada classificador em todo o conjunto de treinamento, treinamos cada classificador base em uma amostra bootstrap extraída do conjunto de treinamento.
Antes de prosseguirmos, vamos recapitular brevemente o conceito de amostragem bootstrap. Considere um conjunto de dados com um tamanho de m. Cada amostra de bootstrap retirada desse conjunto de dados também terá um tamanho de m, com base no algoritmo mencionado anteriormente. A amostragem de bootstrap envolve a seleção aleatória de pontos de dados do conjunto de dados com substituição. Por exemplo, se tivermos dez pontos de dados rotulados de um a dez e realizarmos amostragem com substituição, alguns dos pontos de dados serão duplicados no conjunto de dados bootstrap. Essa duplicação ocorre porque cada posição é extraída independentemente do conjunto de treinamento. Consequentemente, alguns pontos de dados podem aparecer várias vezes, enquanto outros podem não aparecer, resultando no que chamamos de amostras out-of-bag (OOB). Essas amostras OOB são os pontos de dados que não estão incluídos na amostra bootstrap para uma determinada rodada.
Para entender melhor a probabilidade associada à não seleção de um item específico em uma amostra bootstrap, vamos examinar a probabilidade de não selecionar um determinado ponto de dados para uma única posição. A probabilidade de escolher um ponto de dados específico para uma determinada posição é de 1/m, pois existem m exemplos no conjunto de treinamento. Portanto, a probabilidade de não selecionar esse ponto de dados específico é de 1 - 1/m. Como temos m opções, a probabilidade de não escolher um exemplo específico em toda a amostra bootstrap é (1 - 1/m)^n. À medida que m se torna suficientemente grande, aproximadamente 36,8% dos pontos não serão incluídos na amostra bootstrap. Consequentemente, 63,2% dos pontos de dados serão únicos na amostra bootstrap, enquanto os pontos restantes serão duplicados.
A visualização da amostragem bootstrap dentro do procedimento de ensacamento pode ajudar na compreensão do conceito. Múltiplas rodadas de amostragem bootstrap são conduzidas, cada uma resultando em uma nova amostra bootstrap. Um classificador é então treinado independentemente em cada amostra bootstrap. Esse processo facilita o paralelismo do modelo, pois não há dependência entre as rodadas de bootstrap. Consequentemente, cada rodada pode ser executada simultaneamente, aumentando o potencial de processamento paralelo.
O fluxograma do classificador de ensacamento fornece uma visão geral das etapas envolvidas. Semelhante ao classificador de votação, o classificador de ensacamento começa com um conjunto de treinamento. No entanto, no bagging, reutilizamos o conjunto de treinamento para criar várias amostras de bootstrap. Cada amostra bootstrap é usada para treinar um classificador, resultando em um total de m classificadores. Cada classificador gera previsões, e a previsão final é determinada por votação majoritária. Essa abordagem ajuda a reduzir o overfitting e a melhorar a estabilidade e a generalização do modelo.
O ensacamento oferece várias vantagens:
Apesar de suas vantagens, o ensacamento também apresenta algumas limitações:
Nesta seção, aprofundaremos os conceitos discutidos anteriormente. Quando as previsões de um modelo exibem variações significativas, isso indica alta variância. Por exemplo, vamos considerar uma árvore de decisão complexa para o caso laranja. As previsões deste modelo serão significativamente diferentes das previsões do modelo azul. Da mesma forma, o caso verde terá seu próprio conjunto de previsões diferentes. Essas previsões variadas ilustram o conceito de alta variância.
Para entender melhor o impacto da alta variância, vamos examinar as árvores de decisão reais ajustadas nesses conjuntos de dados. Apesar de suas variações, o caso de alta variância ainda consegue fornecer uma boa previsão média. É importante observar que, embora eu não tenha mostrado explicitamente a previsão média aqui, a média das previsões dos três modelos (modelo um, dois e três) ajustadas em diferentes conjuntos de treinamento resultará em uma previsão que se aproxima da verdadeira função . Em contraste, os modelos de alta polarização, conforme mostrado anteriormente, são precisos apenas em posições específicas onde as linhas se cruzam com a função verdadeira. Em todos os outros casos, eles têm um desempenho ruim devido ao seu alto viés.
No entanto, empregando um modelo de alta variância e calculando a média das previsões de vários modelos, ainda podemos obter previsões precisas. Esse conceito forma a base do bagging, que envolve o uso de diferentes conjuntos de treinamento gerados por meio de amostragem bootstrap. No bagging, cada amostra bootstrap é usada para ajustar uma árvore de decisão, resultando em vários modelos de alta variância. A média desses modelos é então calculada usando votação de conjunto, considerando rótulos de classe em tarefas de classificação ou saídas de regressão em tarefas de regressão. Este processo de média ajuda na obtenção de previsões altamente precisas, reduzindo a variância.
Calculando a média das previsões das três árvores de decisão ajustadas em diferentes conjuntos de treinamento, obteríamos uma previsão média que se aproxima da verdadeira função. Essa média é semelhante ao conceito de ensacamento, em que cada conjunto de treinamento atua como um conjunto de dados bootstrap. Em segundo lugar, é importante observar que as árvores de decisão não podem interpolar valores. Eles só podem prever os valores de destino que existem no conjunto de treinamento ou suas médias. Assim, a função stepwise mostrada na figura é uma aproximação de uma árvore de decisão não podada.
Para concluir, o ensacamento é uma técnica eficaz para reduzir a variância calculando a média das previsões de modelos de alta variância. Ao empregar a paralelização, o bagging pode acelerar o ajuste do modelo utilizando várias CPUs. No entanto, alguns computadores com Windows podem enfrentar problemas com multiprocessamento em Python, limitando o uso de vários trabalhos. Também vale a pena mencionar que os classificadores de ensacamento podem calcular a precisão fora do saco, o que envolve o uso de pontos de dados que não estão incluídos na amostra bootstrap para avaliar o desempenho do modelo. Isso fornece uma métrica útil para avaliar a capacidade de generalização do modelo. No exemplo de código usando scikit-learn, o classificador bagging pode ser importado do submódulo ensemble.
O estimador base, que é a árvore de decisão neste caso, é inicializado com a profundidade máxima definida como Nenhum para criar uma árvore de decisão não podada. O número de estimadores determina o número de rodadas de bootstrap e a paralelização pode ser obtida definindo o parâmetro n_jobs de acordo. Além disso, o parâmetro oob_score permite o cálculo da pontuação out-of-bag. Depois de treinar o classificador de ensacamento, a pontuação fora do saco e a precisão do conjunto de teste podem ser avaliadas.
No geral, o ensacamento oferece uma abordagem eficaz para mitigar a alta variância e melhorar a precisão da previsão, combinando vários modelos de alta variância. Em resumo, o bagging é um poderoso método de conjunto que combina vários classificadores treinados em diferentes amostras de bootstrap para melhorar a precisão da previsão e reduzir a variância. É particularmente útil ao lidar com conjuntos de dados complexos e pode aumentar a estabilidade e a generalização do modelo. No entanto, também possui algumas limitações, incluindo interpretabilidade reduzida e complexidade computacional aumentada.
7.4 Boosting e AdaBoost (L07: Métodos de conjunto)
7.4 Boosting e AdaBoost (L07: Métodos de conjunto)
No vídeo anterior, discutimos o conceito de modelos de alta variância e baixo viés, focando especificamente em árvores de decisão não podadas. Também aprendemos sobre uma técnica chamada bagging, que ajuda a melhorar o desempenho de modelos de alta variância reduzindo a variância por meio da média.
Nesta palestra, voltaremos nossa atenção para o boosting, que opera na direção oposta. O reforço envolve o uso de modelos de alta tendência com baixa variância, como tocos de árvore de decisão simples, e o aumento deles para aprimorar o desempenho geral do modelo. Este primeiro vídeo fornecerá uma visão geral dos conceitos de aumento e apresentará o aumento em geral, enquanto o próximo vídeo se aprofundará em um tipo popular de aumento chamado aumento de gradiente.
O boosting pode ser amplamente categorizado em dois tipos principais: boosting adaptativo (por exemplo, adaboost) e boosting de gradiente. Historicamente, o aumento de gradiente foi menos utilizado devido à sua complexidade computacional. No entanto, avanços recentes, como a introdução do XGBoost em 2016, melhoraram significativamente o desempenho do aumento de gradiente. Atualmente, surgiram variantes ainda melhores, como o LightGBM, que discutiremos no próximo vídeo. Embora o aumento de gradiente tenha ganhado popularidade, é essencial entender o procedimento geral de aumento por meio do aumento adaptativo.
O procedimento de boosting segue um esquema específico, que difere do procedimento de ensacamento. Uma distinção notável é a presença de dependências entre rodadas. O procedimento de reforço envolve vários classificadores, denotados como classificador um, classificador dois e assim por diante, até o classificador M. Inicialmente, começamos com um conjunto de dados de treinamento regular e um classificador de ajuste. Com base nas previsões do classificador um, ponderamos as amostras de treinamento usando um método de ponderação específico, que discutiremos com mais detalhes posteriormente. Em seguida, o segundo classificador usa esse conjunto de dados de treinamento ponderado e o processo continua. A ponderação depende das previsões dos classificadores anteriores, dificultando a paralelização do boosting. Ao contrário do bagging, onde os classificadores podem ser treinados simultaneamente, o boosting requer esperar até que o classificador anterior tenha feito previsões antes de atualizar o conjunto de dados para o próximo classificador. Ao fazer as previsões finais, o boosting emprega uma combinação ponderada dos classificadores, ao contrário da votação de conjunto ou da média usada no bagging. A combinação ponderada é determinada com base na função sign, que atribui pesos à predição de cada classificador. Para classificação binária, a função sign retorna 1 para resultados positivos e -1 para resultados negativos. Essa previsão ponderada resulta em uma previsão final de -1 ou 1. O processo pode ser estendido para lidar com números arbitrários de classes usando funções indicadoras.
Para entender melhor o procedimento geral de reforço, vamos descrever as etapas envolvidas. Primeiramente, inicializamos um vetor de pesos com pesos uniformes para cada exemplo de treinamento. Esses pesos representam a importância de cada exemplo de treinamento. Em seguida, entramos em um loop que itera sobre os diferentes classificadores ou rodadas do procedimento de aumento. Em cada rodada, aplicamos um aprendiz fraco, que é um classificador ligeiramente melhor do que adivinhação aleatória, aos exemplos de treinamento ponderado. Podemos atribuir pesos mais altos a exemplos específicos ou desenhar amostras bootstrap com probabilidades ponderadas. Depois de treinar o aprendiz fraco, aumentamos o peso para exemplos mal classificados, permitindo que o próximo classificador se concentre nesses exemplos mal classificados. Esse loop é repetido várias vezes e, finalmente, uma votação por maioria ponderada é realizada nos classificadores treinados para obter as previsões finais.
Agora vamos nos concentrar no algoritmo adaboost, que se alinha de perto com o procedimento geral de boosting discutido anteriormente. Adaboost é semelhante ao esboço geral de reforço, onde os classificadores são ajustados em exemplos de treinamento ponderado. O algoritmo começa inicializando os pesos para cada ponto de dados de treinamento. Em seguida, inicia-se o loop for principal, que compreende as rodadas de adaboost. Em cada rodada, os pesos são normalizados para garantir que somem um. Em seguida, um aprendiz fraco é treinado no conjunto de treinamento ponderado e os erros de predição ponderados são calculados. Os erros de previsão são ponderados pelos pesos do conjunto de treinamento e indicam as classificações incorretas. Os erros de previsão são então usados para calcular a contribuição do aprendiz fraco para a previsão final. A contribuição é determinada pela precisão do aluno fraco, com alunos mais precisos tendo uma contribuição maior. A contribuição é então usada para atualizar os pesos dos exemplos de treinamento. Os pesos dos exemplos mal classificados são aumentados, enquanto os pesos dos exemplos corretamente classificados são diminuídos. Esse ajuste enfatiza a importância dos exemplos mal classificados nas rodadas subsequentes.
Depois de atualizar os pesos, o processo segue para a próxima rodada, onde o aprendiz fraco é treinado no conjunto de treinamento ponderado atualizado. Esse processo iterativo continua pelo número especificado de rodadas ou até que um determinado critério seja atendido. Depois que todas as rodadas são concluídas, a previsão final é feita combinando as previsões de todos os alunos fracos. O peso da predição de cada aluno fraco é determinado por sua contribuição para a precisão geral durante o treinamento.
O algoritmo adaboost combina efetivamente as previsões dos alunos fracos para criar um modelo de conjunto forte. Os pesos atribuídos à predição de cada aluno fraco refletem seu desempenho na classificação dos exemplos de treinamento. Ao ajustar iterativamente os pesos e focar nos exemplos mal classificados, o adaboost é capaz de melhorar a precisão do modelo ao longo do tempo.
É importante observar que o adaboost é sensível a outliers e ruídos nos dados. Outliers podem ter um impacto significativo nas atualizações de peso, levando potencialmente ao overfitting. Portanto, o pré-processamento dos dados para lidar com outliers e amostras com ruído é recomendado. Além disso, o adaboost pode ser propenso a overfitting se os alunos fracos forem muito complexos ou se o número de rodadas for muito alto. As técnicas de regularização, como limitar a profundidade das árvores de decisão ou usar a parada antecipada, podem ajudar a mitigar o overfitting.
Se fôssemos esboçar o conceito, ficaria assim: temos uma seta no eixo x, representando o valor alfa. O valor alfa determina a importância de cada classificador na predição final. Quando usamos o valor alfa para ponderar a estimativa e a previsão, descobrimos que, se um classificador tiver um grande erro, o valor alfa será relativamente pequeno. Isso significa que um classificador com alto erro não é tão importante para a previsão final. Por outro lado, classificadores com pequenos erros terão um peso maior porque confiamos mais neles ao computar a votação da maioria.
Usamos o valor alfa de duas maneiras: primeiro, usamos para ponderar a estimativa e a previsão e, segundo, usamos para atualizar os pesos para a próxima rodada. Se a previsão estiver correta, o peso atribuído a esse exemplo de treinamento será pequeno. Isso significa que, se fizermos uma previsão correta, não daremos muita atenção a esse exemplo de treinamento na próxima rodada. É considerado um exemplo fácil. Por outro lado, se errarmos, o peso atribuído a esse exemplo será maior. Isso significa que prestamos mais atenção aos exemplos mal classificados na próxima rodada. Quanto menor o valor alfa, maior o peso atribuído aos exemplos mal classificados.
Para ilustrar esse conceito, vamos considerar um caso bidimensional. Temos um exemplo de brinquedo com dois recursos, x1 e x2. Ajustamos um toco de árvore de decisão, que é uma árvore de decisão com apenas uma divisão. O toco da árvore de decisão classifica corretamente alguns pontos, mas erra em outros. Na primeira rodada do AdaBoost, damos pesos maiores aos exemplos mal classificados e pesos menores aos exemplos classificados corretamente. Em seguida, ajustamos outro toco da árvore de decisão, concentrando-nos nos exemplos mal classificados da rodada anterior. Este processo continua, com cada novo classificador aprendendo com os erros do classificador anterior e prestando mais atenção aos exemplos mal classificados. Finalmente, quando combinamos todos os classificadores usando a votação por maioria, podemos acabar com um classificador que classifica corretamente todos os exemplos.
O AdaBoost pode ser um pouco complicado de entender, mas existem recursos disponíveis para ajudar. O artigo original sobre AdaBoost fornece uma explicação detalhada, mas para uma introdução mais acessível, recomenda-se o artigo tutorial de Manwani. Antes de passar para os exemplos de código, vale a pena mencionar uma modificação do algoritmo AdaBoost para classificação multiclasse chamada AdaBoost.M2 ou SAMME. Ele introduz uma pequena modificação no algoritmo original para lidar com várias classes. Há também uma versão de número real chamada SAMME.R. Se estiver interessado, você pode explorar essas variações nos respectivos artigos.
No scikit-learn, o AdaBoost é implementado como um classificador de reforço. Ele usa tocos de árvore de decisão como classificadores fracos e ajusta os pesos dos exemplos de treinamento com base em seus resultados de classificação. Ao aumentar esses classificadores fracos, o AdaBoost melhora o desempenho geral. Comparando a precisão de uma árvore de decisão não podada e um toco de árvore de decisão no conjunto de dados da íris, o AdaBoost com tocos de árvore de decisão atinge uma precisão maior. O processo de treinamento envolve a atualização dos pesos da amostra, portanto, não há opção de paralelização como no ensacamento. O AdaBoost no scikit-learn fornece uma maneira eficaz de aumentar os classificadores fracos e obter melhores resultados de classificação.
Em seguida, vamos nos aprofundar no aumento de gradiente, outra variante popular de aumento. O aumento de gradiente baseia-se nos conceitos do AdaBoost, mas apresenta aprimoramentos adicionais.
O aumento de gradiente é uma variação popular do algoritmo de aumento que visa melhorar ainda mais o desempenho de classificadores fracos melhorando iterativamente seus pontos fracos. É baseado no conceito de gradiente descendente, que é comumente usado em problemas de otimização. No aumento de gradiente, os classificadores fracos são treinados sequencialmente e combinados para criar um classificador forte.
A ideia básica por trás do aumento de gradiente é treinar iterativamente classificadores fracos e, em seguida, ajustar os pesos dos exemplos de treinamento com base nos erros cometidos pelo conjunto de classificadores. Esse ajuste é feito calculando os gradientes da função de perda em relação às previsões do ensemble. Ao minimizar a função de perda, o conjunto melhora gradualmente seu desempenho.
Para ilustrar o conceito, vamos considerar um exemplo simples. Suponha que temos um problema de classificação binária em que queremos classificar os pontos de dados como positivos ou negativos. Começamos treinando um classificador fraco inicial, como um toco de árvore de decisão, nos dados de treinamento. Esse classificador cometerá alguns erros e calculamos os erros ou resíduos comparando suas previsões com os rótulos verdadeiros dos exemplos de treinamento.
Na próxima iteração, treinamos um novo classificador fraco para prever os resíduos do classificador anterior. Este novo classificador se concentra em corrigir os erros cometidos pelo anterior. Calculamos os resíduos subtraindo os valores previstos dos verdadeiros resíduos. Novamente, esse novo classificador cometerá alguns erros e calculamos os resíduos.
Repetimos esse processo, treinando sequencialmente novos classificadores fracos para prever os resíduos do ensemble e atualizando os resíduos com base nos erros cometidos pelo ensemble atual. Cada classificador fraco é treinado para minimizar a função de perda em relação aos resíduos atuais. O ensemble final é obtido pela combinação de todos os classificadores fracos, com cada classificador contribuindo com um voto ponderado com base em seu desempenho.
Os pesos dos classificadores fracos são determinados pela taxa de aprendizado, que controla a contribuição de cada classificador para a predição final. Uma taxa de aprendizado menor leva a uma convergência mais lenta, mas pode resultar em uma melhor generalização. Uma taxa de aprendizado maior pode levar a uma convergência mais rápida, mas também pode levar a um overfitting.
O aumento de gradiente provou ser uma técnica poderosa para uma ampla gama de tarefas de aprendizado de máquina, incluindo problemas de regressão, classificação e classificação. Tem sido aplicado com sucesso em vários domínios, como visão computacional, processamento de linguagem natural e bioinformática.
Na prática, existem várias implementações de aumento de gradiente disponíveis, incluindo XGBoost, LightGBM e CatBoost, que oferecem algoritmos eficientes e otimizados para aumento de gradiente. Essas implementações fornecem recursos adicionais, como paralelização, técnicas de regularização e manipulação de valores ausentes, para melhorar ainda mais o desempenho e a flexibilidade dos modelos de aumento de gradiente.
Isso conclui a introdução ao boosting e a visão geral do algoritmo adaboost. No próximo vídeo, exploraremos o aumento de gradiente com mais detalhes, incluindo os conceitos de descida de gradiente, funções de perda e os algoritmos específicos que foram desenvolvidos para aprimorar o processo de aumento de gradiente.
7.5 Aumento de Gradiente (L07: Métodos de Conjunto)
7.5 Aumento de Gradiente (L07: Métodos de Conjunto)
O conceito de aumento de gradiente é apresentado como uma versão moderna de aumento que utiliza árvores de decisão e uma função de perda diferenciável. Embora semelhante ao AdaBoost, o aumento de gradiente difere em como as árvores de decisão são ajustadas. No aumento de gradiente, são usadas árvores mais profundas e não há pesos atribuídos a exemplos de treinamento ou classificadores. A ideia-chave por trás do aumento de gradiente é o uso de gradientes da função de perda para melhorar o modelo, resultando em melhor desempenho em conjuntos de dados tabulares. Esse algoritmo ganhou popularidade, especialmente em competições de aprendizado de máquina.
No contexto da regressão, o aumento do gradiente começa com a construção de uma árvore base. Por exemplo, em um problema de previsão de preços de imóveis, a árvore base inicial consiste apenas no nó raiz. A meta é prevista com base no valor médio daquele nó, que neste caso é o preço médio das quatro casas do conjunto de treinamento. Em seguida, a próxima árvore é construída com base no erro de previsão da árvore anterior. Este erro previsto é usado para ajustar uma nova árvore. As árvores da primeira e segunda etapas são combinadas e esse processo é repetido várias vezes, com cada árvore subsequente sendo ajustada nos erros das árvores anteriores. Ao combinar a árvore de decisão simples com a nova baseada em resíduos, o modelo pode fazer previsões melhores e mais precisas.
O conceito de aumento de gradiente como um modelo aditivo é discutido, onde as previsões de todas as árvores são combinadas consecutivamente somando-as. A taxa de aprendizado ou tamanho do passo também é introduzida, o que determina o peso ou a contribuição de cada árvore para a previsão final. O aumento de gradiente é executado repetindo o processo de ajuste de árvores nos erros da previsão anterior, construindo gradualmente o modelo com um pequeno tamanho de passo para evitar o overfitting. Esse processo continua até que um número predeterminado de árvores, com base nas configurações de hiperparâmetros, tenha sido concluído.
O palestrante explica o algoritmo de aumento de gradiente, que é usado para problemas de regressão e classificação. O algoritmo envolve inicializar o modelo como um nó raiz e, em seguida, ajustar várias árvores e criar nós terminais. As previsões são feitas em cada nó e a perda é calculada. O algoritmo pode ser repetido até que o número desejado de árvores seja atingido, com o objetivo geral de minimizar a perda.
Para calcular o modelo atual, o modelo anterior e a nova etapa de previsão são combinados, ponderados pela taxa de aprendizado ou tamanho da etapa, para determinar o modelo atualizado. Este processo é repetido até que o número desejado de árvores, denotado como T, seja alcançado. Pseudoresíduos são computados, seguidos pelo cálculo da derivada da perda com base nos rótulos verdadeiros e previsões do modelo da rodada anterior. Os resíduos são então calculados e o valor de previsão que minimiza a perda no nó específico é determinado. O modelo é atualizado de acordo, e esse processo é repetido até que os modelos T sejam alcançados. Embora as funções de perda diferenciáveis, como a perda de verossimilhança logarítmica negativa, possam ser usadas para classificação, o foco nesta classe é o erro de soma ao quadrado ou erro ao quadrado médio.
O vídeo discute as etapas envolvidas no aumento de gradiente e sua aplicação prática. A primeira etapa envolve minimizar a perda de todos os exemplos de treinamento em um determinado nó, encontrando a previsão que minimiza a expressão. Na segunda etapa, um loop é usado para T árvores e a predição em cada nó folha é calculada pela média dos exemplos naquele nó. A previsão média é combinada com o modelo anterior e as previsões para cada árvore são somadas. A taxa de aprendizado é usada para diminuir os pseudo-resíduos e evitar o overfitting. O vídeo também aborda brevemente outros aspectos interessantes do aumento de gradiente usado na prática.
O vídeo destaca as possíveis desvantagens de impulsionar como um algoritmo sequencial, pois não pode utilizar totalmente vários processos ou nós de computação. No entanto, existe uma implementação chamada xgBoost que incorpora vários truques para tornar o processo de aumento de gradiente mais eficiente. De fato, entre as 29 soluções vencedoras de desafios publicadas no Kaggle de 2015 a 2017, 17 delas usaram o xgBoost. Oito dessas soluções dependiam exclusivamente do xgBoost para treinar o modelo, enquanto outras combinavam o xgBoost com redes neurais ou utilizavam empilhamento, uma técnica popular de votação em conjunto. O vídeo apresenta duas tabelas de um artigo que comparam diferentes implementações de reforço, demonstrando os recursos exclusivos do xgBoost que contribuem para sua eficácia.
O vídeo discute o Extra Boost, uma variante do aumento de gradiente que oferece várias vantagens, como aprendizado global aproximado, fora do núcleo, consciência de dispersão e paralelismo. O Extra Boost incorpora métodos de aproximação para encontrar a melhor divisão, utilizando estatísticas resumidas de subconjuntos de dados distribuídos. O vídeo compara o desempenho do Extra Boost com outras implementações de aumento de gradiente usando o método exato e demonstra que o Extra Boost atinge desempenho idêntico a uma implementação, mas com tempo significativamente reduzido por árvore, tornando-o mais atraente para o ajuste de hiperparâmetros.
Além disso, o vídeo explica as várias melhorias oferecidas pelo Extra Boost, como técnicas de regularização, tratamento de recursos ausentes por meio de imputação e armazenamento em cache. Essas melhorias ajudam a reduzir o overfitting e melhorar o desempenho geral do Extra Boost. Além disso, o Extra Boost utiliza subamostragem baseada em coluna e linha, que seleciona aleatoriamente subconjuntos de recursos e exemplos de treinamento, aprimorando a eficiência computacional e a redução do overfitting. O vídeo sugere consultar o artigo sobre Extra Boost para uma explicação mais detalhada de suas técnicas.
O vídeo fornece uma visão geral do Extra Boost, uma implementação mais recente de máquinas de aumento de gradiente. O Extra Boost visa reduzir o overfitting e melhorar a precisão da previsão. O vídeo discute diferentes técnicas para encontrar divisões, incluindo o algoritmo guloso exato e a descoberta de divisão baseada em histograma. A última abordagem envolve o agrupamento de um recurso contínuo em um histograma discreto, o que pode aumentar a velocidade de treinamento e reduzir o uso de memória. O vídeo também compara o Extra Boost ao Light GBM, outra implementação ainda mais rápida e precisa. O Light GBM utiliza a descoberta de divisão baseada em histograma e oferece menor uso de memória e maior precisão de previsão em comparação com o Extra Boost.
O vídeo discute a implementação de classificadores de aumento de gradiente no scikit-learn e apresenta um novo classificador de aumento de gradiente que foi adicionado em uma versão recente da biblioteca. O novo classificador utiliza divisão baseada em histograma inspirada no LightGBM, tornando-o mais rápido que o classificador anterior. O vídeo sugere usar os dois classificadores de aumento de gradiente e compará-los com o XGBoost para determinar qual deles tem o melhor desempenho. Exemplos de código são fornecidos para servir como modelos para projetos de classe ou uso geral, incluindo a implementação do classificador de aumento de gradiente no scikit-learn e a utilização do novo classificador de aumento de gradiente de histograma.
O apresentador discute o aumento de gradiente usando as bibliotecas XGBoost e LightGBM. A biblioteca XGBoost é semelhante, mas um pouco mais envolvente do que o scikit-learn. Requer a conversão de matrizes NumPy no formato DMatrix e, em vez de usar o método fit, o método train é usado para treinar o modelo. As previsões podem ser feitas chamando o método predict para obter probabilidades de associação de classe. Por outro lado, a biblioteca Microsoft LightGBM possui uma API semelhante ao scikit-learn. Os hiperparâmetros precisam ser definidos antes de ajustar a máquina de aumento de gradiente, e o método de pontuação pode ser usado para calcular a precisão. No caso apresentado, o modelo apresenta 100% de precisão de treinamento sem ajuste de hiperparâmetros.
O vídeo conclui enfatizando a eficácia das técnicas de aumento de gradiente, principalmente por meio da utilização de bibliotecas como XGBoost e LightGBM. Essas bibliotecas fornecem ferramentas poderosas para implementar modelos de aumento de gradiente e oferecem várias otimizações para melhorar o desempenho e a precisão.
Além disso, o apresentador reconhece a importância do ajuste de hiperparâmetros no aumento de gradiente. Diferentes hiperparâmetros, como taxa de aprendizado, número de árvores e profundidade das árvores, podem afetar significativamente o desempenho do modelo. Portanto, é recomendável experimentar diferentes configurações de hiperparâmetros para encontrar as configurações ideais para um problema específico.
Para explorar ainda mais o aumento de gradiente, o vídeo sugere consultar documentos de pesquisa e documentação sobre XGBoost, LightGBM e outras implementações relevantes. Esses recursos fornecem explicações detalhadas sobre os algoritmos, técnicas e recursos avançados de intensificação de gradiente.
Em resumo, o vídeo fornece uma visão geral abrangente do aumento de gradiente, seus conceitos e suas implementações práticas usando bibliotecas como XGBoost e LightGBM. Ele destaca as vantagens do aumento de gradiente, como sua capacidade de lidar com conjuntos de dados tabulares complexos, sua eficácia em competições e seu potencial para melhorar a precisão da previsão. Ao entender os princípios e técnicas por trás do aumento de gradiente, os profissionais podem aproveitar esse poderoso algoritmo para lidar com vários problemas de regressão e classificação.
7.6 Florestas Aleatórias (L07: Métodos de Conjunto)
7.6 Florestas Aleatórias (L07: Métodos de Conjunto)
Ótimo! Finalmente chegamos à última parte da Aula 5, que é a mais interessante: canais sagrados de aprendizado. Os pipelines de aprendizado sagrado são objetos ou classes que combinam várias etapas de processamento e previsão de dados, tornando-os extremamente úteis em aplicativos do mundo real. Para ajudá-lo a entender como os pipelines funcionam, vamos dar uma olhada em um fluxograma de esboço. Não vou me aprofundar em todas as complexidades agora, mas vamos revisitá-lo logo depois de fornecer um exemplo de pipeline.
Em essência, um pipeline pode ser pensado como uma API de estimador e transformador. Semelhante a um estimador, um pipeline possui um método de ajuste que pode ser usado no conjunto de treinamento. Internamente, várias etapas de ajuste e transformação são executadas, seguidas por uma etapa de ajuste final. Dependendo dos componentes incluídos no pipeline, você pode definir uma sequência de operações, como escalonamento de dados (por exemplo, padronização ou escalonamento mínimo-máximo) ou redução de dimensionalidade, seguida pelo treinamento de um algoritmo de aprendizado. O pipeline então retorna um modelo preditivo que pode ser usado no conjunto de teste.
Durante a fase de previsão, quando você chama o método de previsão no conjunto de teste, o pipeline usa internamente a transformação para aplicar o mesmo escalonamento realizado no conjunto de treinamento. Ele também aplica a etapa final de previsão, como retornar rótulos de classe no caso de um classificador. Vamos examinar um exemplo de código simples de um pipeline para ilustrar esse conceito.
Aqui, estou criando um pipeline usando a função make_pipeline do submódulo scikit-learn.dot.pipeline do Sacred Learn. Embora existam diferentes maneiras de criar pipelines, esse método é bastante conveniente. Neste exemplo, estou construindo um pipeline simples que consiste em um classificador e um escalador padrão. O escalador padrão, conforme discutido no vídeo anterior, padroniza os dados para ter média zero e variação unitária. Depois de criar o pipeline, podemos usar o método fit para treinar o pipeline nos dados de treinamento. Podemos então usar o método de previsão para fazer previsões no conjunto de teste.
Agora, vamos nos aprofundar em como o método de ajuste funciona dentro do pipeline. Quando o ajuste é chamado, o escalador padrão é aplicado primeiro. Ele aprende a média e o desvio padrão dos dados de treinamento e os usa para dimensionar os dados. Esse processo envolve uma etapa de ajuste e transformação, na qual o dimensionador padrão calcula os dados dimensionados e os passa para a próxima etapa. Neste caso, o próximo passo é o K classificador vizinho mais próximo. O K classificador de vizinho mais próximo recebe os dados padronizados, combinando efetivamente essas quatro etapas em uma. Ao chamar pipe.fit, todos esses passos são executados automaticamente, poupando-nos o trabalho de executá-los individualmente.
Durante a fase de previsão, ocorre o mesmo processo, exceto que não há etapa de ajuste. Em vez disso, o pipeline reutiliza os parâmetros do conjunto de treinamento para dimensionar os dados de teste, garantindo a consistência. Em seguida, ele passa os dados de teste em escala para o classificador para previsão.
Para visualizar melhor esse processo, vamos revisitar o fluxograma. Como usuário, você só precisa usar os métodos de ajuste e previsão. Ao chamar fit, o pipeline invoca automaticamente a etapa de transformação. É importante observar que a convenção em pipelines é ter a última etapa como classificador. Somente a última etapa chama fit, enquanto todas as etapas anteriores chamam fit e transform. Consequentemente, um pipeline pode ter vários transformadores, como o scaler padrão ou até mesmo técnicas de redução de dimensionalidade, como a análise de componentes principais (PCA). No entanto, ele só pode ter um classificador como último passo. Esse design garante a compatibilidade e a funcionalidade do pipeline.
Para ilustrar o pipeline em ação, vamos explorar um cenário de seleção de modelo simples usando o método de validação. Observe que esta é apenas uma demonstração básica e abordaremos métodos de seleção de modelo mais avançados, como validação cruzada K-fold em aulas posteriores.
O método holdout envolve dividir os dados em dois subconjuntos: um conjunto de treinamento e um conjunto de validação. O conjunto de treinamento é usado para treinar o pipeline, enquanto o conjunto de validação é usado para avaliar seu desempenho e selecionar o melhor modelo.
Aqui está um exemplo de como você pode implementar o método holdout com um pipeline:
Em seguida, criamos um pipeline usando make_pipeline e passamos as etapas desejadas. Nesse caso, incluímos um StandardScaler para padronizar os dados e um KNeighborsClassifier com n_neighbors=3 como classificador.
Treinamos o pipeline chamando o método fit nos dados de treinamento (X_train e y_train).
Após o treinamento, usamos o pipeline para fazer previsões no conjunto de validação (X_val) chamando o método de previsão.
Por fim, avaliamos a precisão do pipeline comparando os rótulos previstos (y_pred) com os rótulos verdadeiros (y_val) usando a função Accuracy_score.
Este é um exemplo básico de uso de um pipeline com o método de validação para seleção de modelo. Lembre-se de que existem técnicas mais avançadas, como a validação cruzada, que podem fornecer avaliações mais robustas do desempenho do pipeline.
7.7 Empilhamento (L07: Métodos de Conjunto)
7.7 Empilhamento (L07: Métodos de Conjunto)
Sim, foi uma longa, longa palestra sete. E finalmente chegamos ao último vídeo para falar sobre empilhamento.
Ao longo desta palestra, cobrimos muito terreno. Discutimos votação por maioria e bagging, onde ajustamos árvores de decisão em amostras bootstrap. Também cobrimos o aumento, onde ajustamos os alunos profundos com base nos erros ou erros dos alunos anteriores, bem como nos resíduos e no aumento do gradiente. Além disso, exploramos florestas aleatórias, que melhoram o desempenho em relação ao ensacamento regular usando subconjuntos de recursos aleatórios em cada nó. E agora, finalmente vamos falar sobre empilhamento.
O empilhamento é semelhante à votação por maioria, mas com um metaclassificador que combina as previsões de outros classificadores em vez de apenas fazer a votação por maioria. Vamos mergulhar nos detalhes do empilhamento.
Antes de prosseguirmos, deixe-me lembrá-lo do tópico deste vídeo: empilhamento. Peço desculpas pelo slide desnecessário, mas vamos nos concentrar nos fundamentos do algoritmo de empilhamento proposto por David H. Wolpert em seu artigo intitulado 'Stacked Generalization' publicado em 1992. Embora seja um artigo antigo, a notação usada em um livro mais recente I Estou referenciando torna mais fácil de entender. Então, vamos começar com esta versão básica de empilhamento.
Nesse algoritmo, definimos a entrada e a saída, o que configura o problema. Estamos trabalhando com um conjunto de dados de treinamento de tamanho 'n'. Cada vetor de recurso, denotado como 'x_i', é um vetor 'm'-dimensional. Da mesma forma, os rótulos de classe correspondentes aos exemplos de treinamento são indicados como 'y_i'. A saída desse algoritmo é um classificador de ensemble, que chamaremos de segundo classificador.
Agora, vamos nos concentrar nas etapas envolvidas no empilhamento. O primeiro passo é aprender classificadores de primeiro nível. Usamos um loop de um a 't' para ajustar esses classificadores. Portanto, temos uma coleção de classificadores, denotados como 'h_1' a 'h_t', que são treinados nos dados de entrada 'X' e nos rótulos de classe 'Y'.
Passando para a etapa dois, construímos novos conjuntos de dados a partir do conjunto de treinamento. Para cada exemplo de treinamento 'x_i', criamos um novo conjunto de dados contendo o vetor de recursos modificado 'x_i prime'. O vetor de características modificado, 'x_i prime,' contém as predições dos classificadores de primeiro nível. Essas previsões podem ser os rótulos de classe ou até mesmo as probabilidades de associação de classe. Usando essas previsões, podemos realizar a votação por maioria, semelhante ao que discutimos anteriormente. No entanto, não paramos por aí; passamos para a etapa três.
Na etapa três, em vez de realizar a votação por maioria, aprendemos um classificador de segundo nível com base nas previsões dos classificadores de primeiro nível. 'x_i prime' representa uma matriz de design modificada, onde cada coluna contém as previsões dos classificadores 'h_1' a 'h_t.' Podemos ajustar um classificador nessas previsões, levando em consideração os rótulos das classes ou as probabilidades de pertença às classes. Este classificador de segundo nível será treinado nessas previsões.
Uma fraqueza do procedimento básico de empilhamento é sua suscetibilidade ao overfitting. Se algum dos classificadores de primeiro nível superajustar o conjunto de treinamento, isso pode afetar negativamente o desempenho do metaclassificador e levar a um superajuste geral do sistema. Para resolver isso, podemos melhorar o procedimento de empilhamento incorporando a validação cruzada.
A validação cruzada é uma técnica em que dividimos o conjunto de dados em vários subconjuntos e treinamos o modelo em diferentes combinações desses subconjuntos. Isso ajuda a reduzir o overfitting e a obter uma estimativa de desempenho mais confiável. Uma variante comumente usada é a validação cruzada k-fold, em que o conjunto de dados é dividido em 'k' subconjuntos ou dobras. Treinamos o modelo em dobras 'k-1' e avaliamos seu desempenho na dobra restante. Este processo é repetido 'k' vezes, cada vez usando uma dobra diferente como o conjunto de validação. Os resultados de desempenho de cada dobra podem então ser calculados para obter uma estimativa mais robusta do desempenho do modelo.
No contexto de empilhamento, podemos usar a validação cruzada para melhorar o treinamento dos classificadores de primeiro nível. Em vez de treiná-los em todo o conjunto de treinamento, dividimos os dados em 'k' dobras. Para cada dobra, treinamos os classificadores de primeiro nível nas dobras 'k-1' restantes e os usamos para fazer previsões sobre a dobra que foi deixada de fora. Este processo é repetido para cada dobra, resultando em previsões para todo o conjunto de treinamento.
Assim que tivermos as previsões dos classificadores de primeiro nível para todo o conjunto de treinamento, podemos prosseguir para a etapa três do algoritmo de empilhamento, onde treinamos o classificador de segundo nível nessas previsões. Ao incorporar a validação cruzada, garantimos que o classificador de segundo nível seja treinado em previsões diversas e confiáveis dos classificadores de primeiro nível, reduzindo o risco de overfitting.
Depois de treinar o classificador de segundo nível, podemos usá-lo para fazer previsões sobre dados novos e não vistos. As previsões são normalmente obtidas alimentando a entrada por meio dos classificadores de primeiro nível para obter suas previsões e, em seguida, usando essas previsões como entradas para o classificador de segundo nível. A saída do classificador de segundo nível representa a previsão final do conjunto de empilhamento.
O empilhamento é uma poderosa técnica de aprendizado de conjunto que aproveita os pontos fortes de vários classificadores para melhorar o desempenho geral. Ao combinar as previsões de vários classificadores, o empilhamento pode capturar diferentes aspectos dos dados e fazer previsões mais precisas. É uma técnica flexível e versátil que pode ser adaptada a diferentes domínios de problemas e tipos de classificadores.
Em conclusão, o empilhamento é um método de aprendizado conjunto que vai além da simples votação por maioria. Ele combina as previsões de vários classificadores por meio de um metaclassificador de segundo nível, permitindo uma tomada de decisão mais sofisticada. Ao incorporar a validação cruzada, podemos aumentar a robustez e a capacidade de generalização do algoritmo de empilhamento. O empilhamento é uma ferramenta valiosa no aprendizado de máquina e tem sido amplamente utilizado em várias aplicações para aumentar o desempenho da previsão.
8.1 Introdução ao overfitting e underfitting (L08: Avaliação do Modelo Parte 1)
8.1 Introdução ao overfitting e underfitting (L08: Avaliação do Modelo Parte 1)
Bom dia a todos! Espero que todos estejam bem. Tenho algumas notícias empolgantes para compartilhar com você hoje, então vamos mergulhar de cabeça.
Em primeiro lugar, terminei de avaliar suas propostas de projeto e devo dizer que estou realmente encantado com as ideias e planos que vi. É evidente que cada um de vocês pensou muito em seus projetos e tem uma visão clara para as próximas semanas até que as apresentações e relatórios dos projetos sejam entregues em meados de dezembro. Estou genuinamente impressionado com o nível de detalhe e consideração que foram colocados em suas propostas.
No entanto, se algum de vocês sentir a necessidade de comentários ou esclarecimentos adicionais, ou se desejar alguma orientação sobre como explorar técnicas adicionais, não hesite em entrar em contato comigo. Estou mais do que feliz em fornecer-lhe mais assistência e apoio de qualquer maneira que eu puder. Basta enviar-me um e-mail ou agendar uma reunião e estarei lá para ajudar.
Passando para mais boas notícias, concluímos com sucesso a palestra sobre métodos de conjunto, o que significa que é hora de embarcar em um tópico novo e empolgante. Na próxima série de palestras, vamos nos concentrar na avaliação do modelo. Ao contrário das aulas anteriores, nas quais apresentamos vários classificadores e algoritmos de aprendizado de máquina, desta vez exploraremos como avaliar o desempenho desses algoritmos de maneira justa.
Ao longo desta nova série, abordaremos uma variedade de tópicos. Começaremos entendendo os conceitos de underfitting e overfitting e como eles se relacionam com o viés e a decomposição de variância de uma função de perda. Em seguida, nos aprofundaremos nos métodos de validação cruzada que nos permitem comparar modelos de maneira eficaz. Além disso, discutiremos técnicas para comparar diferentes algoritmos de aprendizado de máquina para determinar seu desempenho em conjuntos de dados específicos. É essencial diferenciar entre seleção de modelo e seleção de algoritmo, e exploraremos essa distinção com mais detalhes.
Sem mais delongas, vamos começar com a introdução à avaliação de modelos e mergulhar mais fundo no mundo do overfitting e do underfitting. Nesta aula (aula oito), vamos discutir a decomposição de viés e variância e sua relação com overfitting e underfitting. Analisaremos a decomposição do viés e da variância da perda de erro ao quadrado (relevante para a regressão) e da perda 01 (relevante para a classificação) para obter uma compreensão abrangente desses conceitos. Além disso, abordaremos diferentes tipos de vieses no aprendizado de máquina, indo além do viés estatístico abordado na decomposição.
Antes de nos aprofundarmos no material da palestra, vamos dar um passo para trás e recapitular brevemente onde estamos no curso. Cobrimos a introdução, aspectos computacionais como Python, NumPy e scikit-learn, bem como métodos baseados em árvore. Também discutimos a relevância dos métodos baseados em árvores e a popularidade dos métodos ensemble, especificamente o boosting e as florestas aleatórias, na indústria. Agora, tendo como foco a avaliação de modelos, exploraremos vários subtópicos, incluindo intervalos de confiança, validação cruzada, seleção de modelos, seleção de algoritmos e métricas de desempenho. No final, abordaremos a redução de dimensionalidade e o aprendizado não supervisionado.
Quero garantir a você que esta palestra será mais curta do que a anterior sobre métodos de ensemble, pois é relativamente concisa. No entanto, abrange conceitos cruciais que nos ajudarão a entender melhor a avaliação do modelo. Então, vamos mergulhar nos seis subtópicos que compõem a aula oito: overfitting, underfitting, viés e decomposição de variância, relação com overfitting e underfitting, viés e decomposição de variância da perda 01 e uma visão geral dos diferentes tipos de vieses no aprendizado de máquina.
Ao longo desta palestra, encorajo você a fazer uma pausa e refletir sobre as questões que coloco, além dos questionários. É sempre útil fazer uma pausa e formular seus próprios pensamentos antes de considerar minha perspectiva sobre o assunto. Envolver-se com o material dessa maneira aprimorará sua experiência de aprendizado.
O overfitting pode ser causado por modelos muito complexos e com muitos parâmetros em relação à quantidade de dados de treinamento disponíveis. Isso leva o modelo a ajustar o ruído nos dados de treinamento em vez dos verdadeiros padrões subjacentes. O underfitting, por outro lado, ocorre quando o modelo não é complexo o suficiente para capturar os padrões nos dados.
O viés e a variância podem ser decompostos matematicamente. O erro quadrado esperado de um modelo pode ser decomposto em viés quadrado, variância e erro irredutível. O viés quadrado mede a diferença média entre as previsões do modelo e os valores verdadeiros. A variância mede a variabilidade das previsões do modelo para uma determinada entrada. O erro irredutível representa o ruído inerente aos dados que não pode ser reduzido por nenhum modelo.
O underfitting, por outro lado, está associado a alto viés e baixa variância. O modelo é muito simples e não consegue capturar os padrões subjacentes nos dados, resultando em baixo desempenho nos dados de treinamento e teste.
A decomposição de desvio-variância da perda 01 é semelhante à da perda de erro ao quadrado, mas envolve matemática mais complexa. O viés quadrado mede a diferença esperada na taxa de classificação incorreta entre as previsões do modelo e os rótulos verdadeiros. A variância mede a variabilidade na taxa de classificação incorreta para uma determinada entrada.
Compreender esses diferentes tipos de vieses é crucial para construir modelos de aprendizado de máquina justos e confiáveis.
Isso conclui os principais tópicos abordados na aula oito. Como você pode ver, overfitting, underfitting, viés e variância são conceitos interconectados que desempenham um papel crucial na avaliação do modelo. É importante encontrar um equilíbrio entre complexidade e generalização para evitar superajuste ou subajuste de seus modelos. Além disso, estar ciente de diferentes tipos de vieses pode ajudar a abordar considerações éticas e justas no aprendizado de máquina.
8.2 Intuição por trás do viés e variância (L08: Avaliação do Modelo Parte 1)
8.2 Intuição por trás do viés e variância (L08: Avaliação do Modelo Parte 1)
Olá pessoal! Espero que você esteja bem. Eu tenho algumas notícias emocionantes para compartilhar com todos vocês. Em primeiro lugar, concluí a tarefa de avaliar suas propostas de projeto. Deixe-me expressar minha satisfação em ler todas as suas idéias e planos brilhantes para o restante do semestre. É realmente impressionante ver que cada um de vocês tem um roteiro bem definido para as próximas semanas que levam às apresentações e relatórios do projeto.
Se algum de vocês sentir necessidade de feedback adicional ou precisar de esclarecimentos sobre qualquer aspecto, não hesite em entrar em contato comigo por e-mail ou qualquer outro meio. Tenho o maior prazer em fornecer mais orientações e indicações de técnicas adicionais que possam ser relevantes para seus projetos.
Agora, vamos passar para a próxima boa notícia. Concluímos com sucesso a palestra sobre métodos de conjunto e é hora de mergulhar em um tópico novo e empolgante. Na próxima série de palestras, exploraremos o assunto da avaliação de modelos. Ao contrário das aulas anteriores, onde apresentamos vários classificadores e algoritmos de aprendizado de máquina, desta vez vamos nos concentrar em avaliar esses algoritmos de forma justa.
As palestras sobre avaliação de modelos abrangerão vários aspectos. Começaremos entendendo os conceitos de underfitting e overfitting e sua relação com viés e decomposição de variância em uma função de perda. Em seguida, exploraremos métodos de validação cruzada que nos permitem comparar modelos de forma eficaz. Posteriormente, discutiremos técnicas para comparar diferentes algoritmos de aprendizado de máquina e seu desempenho em conjuntos de dados específicos.
É importante observar que a seleção do modelo, que envolve a escolha de um algoritmo bem ajustado, também será discutida com mais detalhes. Examinaremos como ela difere da avaliação do modelo. Então, vamos começar nossa jornada com uma introdução à avaliação de modelos e continuar construindo nosso conhecimento a partir daí.
Antes de nos aprofundarmos no novo tópico, vamos reservar um momento para recapitular nosso progresso neste curso. Começamos com uma introdução e abordamos aspectos computacionais importantes, como Python, NumPy e scikit-learn. Também exploramos métodos baseados em árvores, o que gerou algumas discussões interessantes sobre sua relevância na indústria.
Agora, ao entrarmos na fase de avaliação do modelo, exploraremos vários subtópicos relacionados ao underfitting e ao overfitting. Nesta palestra específica (Aula Oito), vamos nos concentrar no viés e na decomposição da variância e sua conexão com o overfitting e o underfitting. Examinaremos como os componentes de viés e variância afetam o desempenho de generalização de um modelo.
Além disso, exploraremos o viés e a decomposição da variância da perda de 0-1, que é mais relevante para problemas de classificação. Essa análise nos fornecerá uma compreensão mais profunda do overfitting e do underfitting no contexto das tarefas de classificação.
Para encerrar esta palestra, abordaremos brevemente os diferentes tipos de vieses no aprendizado de máquina além do viés estatístico discutido anteriormente.
Agora, vamos voltar nossa atenção para os principais conceitos de overfitting e underfitting. No aprendizado de máquina, nosso objetivo final é desenvolver modelos (regressão ou classificação) que demonstrem bom desempenho de generalização. Isso significa que os modelos devem funcionar bem em dados não vistos, que geralmente vêm do conjunto de teste. Embora também consideremos o desempenho no conjunto de teste, ele serve como uma estimativa do desempenho da generalização em dados não vistos.
Na ausência de ajuste ou treinamento do modelo, espera-se que o erro de treinamento seja semelhante ao erro de teste. No entanto, quando ajustamos o modelo ao conjunto de treinamento, muitas vezes observamos que o erro de treinamento é menor que o erro de teste. Isso é resultado do overfitting, em que o modelo se torna muito ajustado aos dados de treinamento, incluindo ruído, levando a uma estimativa otimista de desempenho.
Por outro lado, o underfitting ocorre quando o modelo falha em capturar os padrões subjacentes nos dados, resultando em altos erros de treinamento e teste. Neste caso, falta o modelo.
complexidade suficiente para representar a verdadeira relação entre os recursos e a variável de destino.
Para entender melhor o overfitting e o underfitting, vamos considerar a compensação de viés-variância. Viés refere-se ao erro introduzido pela aproximação de um problema do mundo real com um modelo simplificado. Um modelo de viés alto tende a simplificar demais os padrões subjacentes nos dados e pode resultar em subajuste. Por outro lado, a variância refere-se ao erro introduzido pela sensibilidade do modelo às flutuações nos dados de treinamento. Um modelo de alta variância captura ruído e variações aleatórias nos dados de treinamento, levando ao overfitting.
A compensação viés-variância pode ser ilustrada pela decomposição do erro de teste esperado em três componentes: o erro irredutível, o termo viés e o termo variância. O erro irredutível representa o ruído inerente aos dados que não pode ser reduzido por nenhum modelo. O termo de viés mede o erro introduzido pela aproximação de um problema do mundo real com um modelo simplificado, e o termo de variância mede o erro causado pela sensibilidade do modelo a flutuações nos dados de treinamento.
Matematicamente, podemos expressar o erro de teste esperado da seguinte forma:
Erro de teste esperado = erro irredutível + viés^2 + variância
Idealmente, queremos encontrar um equilíbrio entre viés e variância que minimize o erro de teste esperado. No entanto, a redução de um componente geralmente leva a um aumento do outro. Essa compensação é crucial na seleção e avaliação do modelo.
No contexto de problemas de classificação, também podemos examinar a decomposição de viés-variância da perda 0-1, que é uma função de perda comum usada em tarefas de classificação. A perda de 0-1 mede o erro como a proporção de instâncias mal classificadas. A decomposição de viés-variância da perda de 0-1 fornece informações sobre as fontes de erro nos modelos de classificação.
Além do viés estatístico, existem outros tipos de vieses que podem afetar os modelos de aprendizado de máquina. Esses vieses podem surgir de várias fontes, incluindo viés de amostragem, viés de medição e viés algorítmico. Entender esses vieses é essencial para construir sistemas de aprendizado de máquina justos e confiáveis.
Na próxima aula, vamos nos aprofundar na validação cruzada, uma técnica poderosa para estimar o desempenho de generalização de um modelo. A validação cruzada nos permite avaliar o desempenho de um modelo em dados não vistos, simulando o processo de treinamento e teste em diferentes subconjuntos de dados. Exploraremos diferentes tipos de métodos de validação cruzada, como validação cruzada k-fold e validação cruzada estratificada, e discutiremos suas vantagens e limitações.
Isso é tudo para a palestra de hoje. Encorajo-o a rever o material abordado e a vir preparado com quaisquer perguntas que possa ter para a nossa próxima sessão. Obrigado, e tenha um ótimo dia!
8.3 Decomposição de desvio-variância do erro quadrado (L08: Avaliação do modelo, parte 1)
8.3 Decomposição de desvio-variância do erro quadrado (L08: Avaliação do modelo, parte 1)
Na aula anterior, obtivemos alguma intuição sobre viés e variância e abordamos brevemente a decomposição de viés-variância de uma função de perda. Agora, nesta aula, vamos nos aprofundar na decomposição de viés-variância, focando na perda de erro ao quadrado. Começar com a perda de erro ao quadrado torna mais simples e intuitivo antes de explorarmos sua relação com overfitting e underfitting. Além disso, discutiremos brevemente a decomposição de viés-variância da perda de 0-1, que é um tópico mais controverso com trabalhos recentes dedicados a ele. No entanto, examinaremos primeiro o caso do erro quadrático, pois ele fornece um entendimento mais direto.
Para recapitular brevemente, o viés e a variação foram abordados com mais detalhes no vídeo anterior, mas é bom gastar um momento recapitulando a configuração. Estamos olhando para o estimador pontual menos a previsão, que representa o alvo previsto para um determinado modelo e um conjunto de treinamento específico. A expectativa é assumida em diferentes conjuntos de treinamento extraídos da mesma distribuição ou população. Essa expectativa representa a previsão média para um determinado ponto de dados no conjunto de teste.
O viés mede o quão longe a previsão média está do valor alvo verdadeiro, enquanto a variância quantifica a quantidade pela qual cada previsão individual se desvia da previsão média. O termo de variância é elevado ao quadrado para desconsiderar o sinal e focar na dispersão geral das previsões em torno da média.
A perda de erro ao quadrado pode ser representada como (theta - theta hat)^2, onde theta é o valor verdadeiro e theta hat é o valor previsto para um ponto de dados específico. Nesta aula, vamos focar na decomposição bias-variância da perda de erro ao quadrado, considerando apenas os termos bias e variância e ignorando o termo ruído.
Para prosseguir com a decomposição de viés-variância, introduzimos algumas notações e configurações para o cenário. Consideramos uma função verdadeira que gera os rótulos (y) e temos uma hipótese (h) como nosso modelo, que se aproxima da verdadeira função geradora de dados. Usamos y hat para representar uma previsão. Com esses termos, podemos expressar a perda de erro ao quadrado como (y - y hat)^2. Para evitar confusão com o símbolo de expectativa (E), denotamos o erro ao quadrado como (s).
Agora, vamos decompor o erro quadrado em componentes de viés e variância. Para conseguir isso, empregamos um truque matemático de inserir e subtrair a expectativa da previsão. Ao fazer isso, expandimos a expressão quadrática e a separamos em três termos: (y^2, -2yy hat, y hat^2).
Em seguida, aplicamos a expectativa a ambos os lados da equação. A aplicação da expectativa ao primeiro termo produz y^2, que permanece inalterado, pois y é uma constante. A expectativa do segundo termo, -2yy hat, é zero, pois estamos subtraindo o mesmo valor (expectativa de y hat) de si mesmo repetidamente. Já para o terceiro termo, a expectativa de y hat^2 representa o valor médio das previsões.
Depois de aplicar a expectativa, ficamos com dois termos: o viés ao quadrado e a variância. A tendência ao quadrado é (y - E[y hat])^2, que mede a diferença entre o rótulo verdadeiro e a previsão média. A variância é E[(y hat - E[y hat])^2], quantificando o desvio quadrado médio de previsões individuais da previsão média.
Para demonstrar a eliminação do termo -2yy hat ao aplicar a expectativa, dividimos as etapas. A aplicação da expectativa a -2yy hat resulta em 2E[yy hat]. Expandindo ainda mais a expressão, descobrimos que a expectativa de yy hat é igual a E[y]E[y hat], pois y é uma constante. Consequentemente, a expectativa de -2yy hat simplifica para -2E[y]E[y hat].
Subtraindo este termo do(s) erro(s) ao quadrado nos dá:
s = y^2 - 2yy chapéu + y chapéu^2 = y^2 - 2yy chapéu + y chapéu^2 - 2E[y]E[y chapéu] + 2E[y]E[y chapéu]
Agora, vamos reorganizar os termos:
s = (y - E[chapéu])^2 + 2(E[y]E[chapéu] - yy chapéu)
Podemos simplificar ainda mais a expressão reconhecendo que E[y]E[y hat] é um valor constante, denotado como c. Portanto, temos:
s = (y - E[chapéu])^2 + 2(c - chapéu aa)
Por fim, vamos nos concentrar no segundo termo, 2(c - yy hat). Este termo pode ser decomposto da seguinte forma:
2(c - chapéu aa) = 2c - chapéu 2aa
O primeiro termo, 2c, é uma constante e não depende da previsão y hat. O segundo termo, -2yy hat, representa a interação entre o verdadeiro rótulo y e a predição y hat.
Agora, podemos resumir a decomposição de viés-variância da perda de erro ao quadrado da seguinte forma:
s = (y - E[chapéu])^2 + 2c - chapéu 2aa
O primeiro termo, (y - E[y hat])^2, corresponde ao viés ao quadrado. Ele mede a discrepância entre o verdadeiro rótulo y e a previsão média E[y hat].
O segundo termo, 2c, é uma constante e representa o viés ao quadrado. Não é afetado pela escolha do chapéu de previsão.
O terceiro termo, -2yy hat, representa a variância. Ele captura a variabilidade das previsões individuais y hat em torno de seu E[y hat médio]. É diretamente influenciado pela escolha do chapéu de previsão.
Portanto, podemos concluir que a perda de erro ao quadrado pode ser decomposta em um termo de viés ao quadrado, um termo de viés ao quadrado constante e um termo de variância.
Compreender a decomposição de viés-variância nos ajuda a obter insights sobre o comportamento de um modelo. Um viés alto indica underfitting, onde o modelo não é capaz de capturar os padrões subjacentes nos dados. Uma variação alta indica overfitting, onde o modelo é muito sensível aos dados de treinamento e falha em generalizar bem para dados não vistos.
Ao analisar os componentes de viés e variância, podemos tomar decisões informadas sobre a complexidade do modelo, técnicas de regularização e estratégias de coleta de dados para otimizar o desempenho de nossos modelos.
Na próxima aula, estenderemos a decomposição de viés-variância para a perda de 0-1 e discutiremos suas implicações.
8.4 Viés e Variância vs Overfitting e Underfitting (L08: Avaliação do Modelo Parte 1)
8.4 Viés e Variância vs Overfitting e Underfitting (L08: Avaliação do Modelo Parte 1)
Neste vídeo, meu objetivo é estabelecer um recorde para o vídeo mais curto deste curso. Quero mantê-lo conciso e não arrastar o assunto por muito tempo. Eu só tenho dois slides, então não vai demorar muito. Neste vídeo, exploraremos a relação entre a decomposição de viés-variância e os conceitos de underfitting e overfitting.
Vamos começar examinando o gráfico mostrado anteriormente nesta aula. Observe que este é um esboço simples e não baseado em números reais. Na prática, a relação entre esses termos pode ser ruidosa ao lidar com conjuntos de dados do mundo real. O gráfico ilustra a perda de erro ao quadrado plotada em relação à capacidade do modelo, que se relaciona à sua complexidade ou capacidade de ajustar os dados de treinamento.
Capacidade refere-se a quão bem o modelo pode se ajustar ao conjunto de treinamento. Uma capacidade maior significa que o modelo é mais capaz de ajustar os dados. Por exemplo, em modelos paramétricos como regressão, a capacidade geralmente é determinada pelo número de parâmetros ou termos. À medida que a capacidade aumenta, o erro de treinamento diminui porque um modelo mais complexo pode ajustar melhor os dados de treinamento.
No entanto, ter um erro de treinamento baixo não garante um bom desempenho em novos dados. É possível sobreajustar os dados de treinamento ajustando-os muito de perto, o que pode levar a um aumento no erro em novos dados, conhecido como erro de generalização. O erro de generalização pode ser estimado usando um conjunto de teste independente. Inicialmente, à medida que a capacidade aumenta, o erro de generalização melhora até certo ponto. Mas depois de atingir um certo ponto, o erro começa a aumentar novamente, indicando overfitting.
A lacuna entre o erro de treinamento e o erro de generalização representa o grau de overfitting. À medida que a capacidade do modelo aumenta, a lacuna aumenta porque o modelo ajusta os dados muito de perto, incluindo ruído nos dados. O grau de overfitting indica o quanto o modelo superajusta os dados de treinamento e falha em generalizar bem para novos dados.
Agora, vamos relacionar esses conceitos com viés e variância. No gráfico, adicionei os termos viés e variância em vermelho. À medida que a capacidade do modelo aumenta, sua variância também aumenta. Isso pode ser observado no caso de árvores de decisão profundas em comparação com árvores de decisão curtas. Modelos com maior variância são mais propensos a overfitting. Quanto maior a variância, maior o grau de overfitting, que é representado pela lacuna entre o erro de treinamento e o erro de generalização.
Por outro lado, à medida que a variância aumenta, o viés diminui. Um modelo mais complexo geralmente tem um viés menor. O gráfico pode parecer mostrar o viés diminuindo e subindo novamente, mas isso é apenas o resultado de um desenho ruim. Na realidade, o viés diminui assintoticamente à medida que a variância aumenta quando a capacidade do modelo aumenta.
Por outro lado, quando o modelo tem baixa capacidade (como um modelo simples), ele subajusta os dados, resultando em baixo desempenho nos conjuntos de treinamento e teste. Isso está associado a um viés alto. O underfitting ocorre quando o modelo é muito simplista para capturar os padrões subjacentes nos dados.
Para resumir, o viés alto está correlacionado com o underfitting, enquanto a alta variância está correlacionada com o overfitting. No próximo vídeo, exploraremos brevemente a decomposição de viés-variância da perda de 0-1, que é mais relevante para tarefas de classificação. Embora seja menos intuitivo do que decompor a perda de erro ao quadrado, ele fornece informações sobre os componentes de viés e variância em um contexto de classificação.