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
Backtest sua estratégia média de custo em dólar facilmente em Python
Backtest sua estratégia média de custo em dólar facilmente em Python
Nos próximos 20 minutos, estaremos implementando uma estratégia de média de custo em dólares em Python. Essa estratégia permitirá que você avalie o desempenho da média do custo em dólar para um ativo ou índice específico durante um determinado período de tempo. Estaremos usando uma ferramenta chamada backtesting.py para implementar esta estratégia. Backtesting.py é uma estrutura amigável em Python que é menos intimidante do que outras bibliotecas como Vectorbt ou Backtrader. Se você é novo no Python, esta será uma ótima opção para você.
A estratégia de média de custo em dólar que implementaremos é relativamente simples, mas também mostrarei como estendê-la. Nossa estratégia envolve a compra de um valor fixo em dólares de um determinado ativo toda segunda ou terça-feira e a repetição desse processo até esgotarmos os dados. Para começar, abra um terminal e configure um novo ambiente virtual para garantir um ambiente limpo para nossa implementação. Depois de configurar o ambiente virtual, instale o pacote de backtesting usando pip:
teste de instalação do pip
Depois de instalar o pacote, podemos prosseguir com nosso arquivo Python. Precisamos importar alguns módulos e dados necessários. Do backtesting, importe os módulos backtest e strategy. Além disso, importe alguns dados fictícios de backtesting.test, especificamente os dados do Google. Também precisaremos do módulo pandas para manipulação de dados.
Agora, vamos definir nossa classe de estratégia. Crie uma classe chamada DCA (Dollar Cost Average) que herda da classe de estratégia. Dentro dessa classe, definiremos uma variável de classe chamada amount_to_invest, que representa o valor fixo em dólar que queremos investir. Inicialmente, defina-o como 10.
Em seguida, precisamos definir duas funções dentro desta classe: __init__ e next. A função __init__ é chamada durante a inicialização e é usada para pré-calcular quaisquer valores que possamos precisar posteriormente. No nosso caso, criaremos um indicador que nos dá o dia da semana. Para fazer isso, usaremos o método self.indicator fornecido por backtesting.py. Podemos definir nosso indicador como self.day_of_week = self.indicator(lambda x: x, self.data.close.s.dt.dayofweek). Este indicador retornará uma matriz dos valores do dia da semana (0-6, onde segunda-feira é 0 e domingo é 6) para nossos dados.
Agora, vamos para a próxima função, onde implementamos nossa lógica de negociação. Esta função é chamada para cada barra de dados e nos permite tomar decisões com base nos dados atuais. No nosso caso, vamos verificar se o dia da semana é igual a 1 (terça-feira) usando if self.day_of_week == 1:. Se for terça-feira, acionaremos um sinal de compra. Para executar a ordem de compra, usaremos a função self.buy fornecida por backtesting.py. Podemos calcular o tamanho da ordem de compra dividindo o amount_to_invest pelo preço de fechamento atual do ativo. Para garantir a compra de um número inteiro de ações, podemos usar math.floor para arredondar o resultado para baixo.
Para lidar com ações fracionárias, podemos dividir as ações multiplicando o ativo por um número pequeno, como 10 ** -6. Isso dividirá as ações em microshares, que mais tarde podem ser convertidas de volta para a quantidade real de ações compradas dividindo pelo mesmo pequeno número.
Finalmente, precisamos executar o backtest e extrair as estatísticas. Para fazer isso, podemos usar bt.run() e atribuir o resultado a uma variável chamada stats. Também podemos plotar os resultados usando bt.plot().
Como ainda não implementamos a lógica de venda, o gráfico aparece como uma linha contínua sem nenhum ponto de venda. Vamos consertar isso em breve. Mas antes, vamos extrair algumas estatísticas dos resultados do backtest.
Para fazer isso, usaremos a variável stats que definimos anteriormente. Podemos imprimir várias estatísticas, como retorno total, retorno anualizado, rebaixamento máximo e muito mais.
Sinta-se à vontade para adicionar mais estatísticas se estiver interessado em explorar outras métricas de desempenho.
Agora vamos passar para a implementação da lógica de venda. Como estamos usando uma estratégia de custo médio em dólar, venderemos o mesmo valor fixo em dólar toda semana. No nosso caso, vamos vender às sextas-feiras.
Aqui, verificamos se o dia da semana é 4 (sexta-feira) usando o indicador day_of_week que criamos anteriormente. Se for sexta-feira, vendemos a mesma quantia em dólar que compramos anteriormente, dividindo a quantidade_a_investir pelo preço de fechamento atual. Isso garante que vendamos o número apropriado de ações para corresponder ao valor do nosso investimento.
Agora, quando executamos o backtest, devemos ver os pontos de venda no gráfico, indicando as sextas-feiras em que vendemos nossa posição.
Sinta-se à vontade para experimentar diferentes variações dessa estratégia, como ajustar os dias de compra/venda ou implementar condições adicionais com base nos movimentos de preços. Essa estrutura permite estender e personalizar facilmente sua estratégia de acordo com seus requisitos.
Lembre-se de ajustar a variável amount_to_invest e explorar diferentes dados de ativos para ver o desempenho da estratégia.
Espero que isso ajude você a implementar e explorar a estratégia de média de custo em dólar usando a biblioteca backtesting.py em Python. Entre em contato se tiver mais perguntas!
Indicadores personalizados em Backtesting.py - Python Deep Dive
Indicadores personalizados em Backtesting.py - Python Deep Dive
Neste vídeo, vamos explorar o processo de criação de indicadores personalizados na biblioteca backtesting.py. Esse recurso nos permitirá testar facilmente qualquer estratégia de negociação, criando indicadores e traduzindo as funções do Python em um formato compatível com o ecossistema backtesting.py.
Antes de nos aprofundarmos nos detalhes da criação do indicador, é recomendável conferir um curso disponível gratuitamente no YouTube que cobre a maioria dos aspectos do backtesting.py. Este curso fornecerá uma compreensão de alto nível da biblioteca, o que será benéfico ao explorar a criação de indicadores neste vídeo.
Neste vídeo, vamos nos concentrar em três exemplos diferentes para cobrir várias ideias de indicadores. O primeiro exemplo envolve o uso de sinais gerados em um programa Python externo e sua integração em backtesting.py. Essa abordagem é útil quando você já possui sinais de compra e venda de uma fonte externa e deseja incorporá-los ao seu processo de backtesting.
O segundo exemplo demonstrará o uso da biblioteca pandas-ta para retornar vários valores para cada indicador. Especificamente, trabalharemos com o indicador Bollinger Bands e mostraremos como retornar um quadro de dados contendo as bandas inferior e superior, em vez de apenas um array numpy simples. Este exemplo destacará a versatilidade de criar indicadores com vários valores.
Por fim, codificaremos manualmente uma estratégia de impulso para demonstrar como os indicadores personalizados podem ser criados usando Python puro. Este exemplo mostrará a flexibilidade de criar indicadores usando a programação Python, permitindo possibilidades ilimitadas no design do indicador.
Para acompanhar os exemplos, certifique-se de ter as bibliotecas necessárias instaladas, incluindo backtesting, pandas e pandas-ta. Depois de instalar essas bibliotecas, crie um arquivo Python para os exemplos de código.
A parte inicial do código configura o clichê necessário ao usar backtesting.py. Ele importa as classes necessárias, "backtest" e "strategy", e importa dados de amostra para ações do Google de backtesting.py. Os dados importados são um quadro de dados pandas contendo dados de preços diários, incluindo abertura, alta, baixa, fechamento e volume, com um índice de data e hora.
Para o primeiro exemplo, assumimos que você já gerou alguns sinais em um programa externo e deseja transferi-los para backtesting.py. Para demonstrar isso, criamos sinais aleatórios usando numpy e os adicionamos ao quadro de dados do Google. Esses sinais podem representar qualquer indicador que você programou em Python, onde -1 denota um sinal de venda, 0 indica nenhuma ação e 1 representa um sinal de compra.
Em seguida, definimos uma classe de estratégia chamada "SignalStrategy" que herda da classe "Strategy" importada anteriormente. Esta classe será responsável por implementar a lógica de compra e venda com base nos sinais. A classe inclui a função de inicialização " init " e a função "next".
Na função " init ", não temos muito o que fazer neste exemplo em particular, mas é uma boa prática incluí-la. A função "next" é onde a lógica de compra e venda será implementada com base nos sinais.
Para executar o backtest, criamos uma instância da classe backtest, passando o dataframe do Google e a classe "SignalStrategy". Também definimos o valor do cache como 10.000. Em seguida, executamos o backtest e armazenamos os resultados na variável "stats". Finalmente, imprimimos as estatísticas para ver o desempenho da estratégia.
A execução do código neste ponto não produzirá nenhuma negociação porque ainda não implementamos a lógica de compra e venda. No entanto, podemos acessar os valores do sinal usando "self.data.signal" dentro da função "next", que nos dará o último valor do sinal.
Para implementar a lógica de compra e venda, verificamos o valor do sinal atual e a posição atual. Se o sinal for 1 (sinal de compra) e não houver posição existente, executamos uma ordem de compra usando "self.buy". Se o sinal for -1 (sinal de venda) e houver uma posição longa existente, executamos uma ordem de venda usando "self.sell".
Estratégia de Sinal Externo:
Usando pandas-ta para indicadores personalizados:
Lembre-se de substituir espaços reservados como GOOG por seus dados reais e personalizar as estratégias de acordo com seus requisitos específicos.
Stop Loss em Backtesting.py
Stop Loss em Backtesting.py
Neste vídeo, vamos explorar o conceito de stop loss na biblioteca "backtesting.py". O vídeo abordará três exemplos de complexidade e profundidade crescentes, fornecendo uma compreensão abrangente de stop loss em "backtesting.py". O apresentador assume algum conhecimento prévio de "backtesting.py" e recomenda assistir a um curso gratuito no YouTube para iniciantes antes de mergulhar neste tópico avançado.
Para começar, abra um terminal e verifique se "backtesting.py" está instalado executando o comando "pip install backtesting". Isso instalará todos os pacotes necessários. Em seguida, crie um novo arquivo Python, vamos chamá-lo de "example.py" e importe os módulos necessários: "backtest" e "strategy" de "backtesting" e "googledale" de "backtesting.test". "googledale" é um conjunto de dados de teste que vem com "backtesting.py".
Em seguida, defina a classe de estratégia criando uma classe chamada "Strats" que herda da classe "strategy". Implemente as duas funções necessárias: " init " e "next". Neste ponto, estamos prontos para executar nosso backtest. Inicialize um novo objeto de backtest, "bt", usando a função "backtest". Passe os dados "googledale" e a classe de estratégia que acabamos de definir. Defina o valor inicial em dinheiro para $ 10.000. Por fim, execute o backtest usando o método "bt.run" e plote os resultados usando "bt.plot".
Inicialmente, a classe de estratégia não executa nenhuma ação de negociação. Para demonstrar um exemplo simples de stop loss, adicionaremos algumas lógicas básicas de compra e venda. Se tivermos uma posição existente, não tomaremos nenhuma ação. No entanto, se não tivermos uma posição, colocaremos uma ordem de compra usando o método "self.to_buy", especificando o tamanho da posição (por exemplo, 1 ação). Além disso, adicionaremos um stop loss e take profit. O stop loss será definido em 10 unidades abaixo do preço de fechamento atual, enquanto o take profit será definido em 20 unidades acima do preço de fechamento atual.
Executar o backtest irá gerar um grande número de negociações. Assim que uma negociação for fechada, uma nova negociação será aberta na próxima barra, a menos que o stop loss ou take profit seja acionado. É importante entender como "backtesting.py" lida com stop loss e take profit. Nos casos em que o stop loss e o take profit são acionados na mesma barra, a biblioteca assume que o stop loss é acionado primeiro. Esse comportamento pode levar a resultados inesperados, principalmente ao lidar com dados diários que podem ter lacunas significativas.
Para gerenciar stop loss com mais eficiência, podemos estender a classe de estratégia e usar a "trailing strategy" fornecida por "backtesting.py". Importe os módulos necessários, incluindo "crossover" e "trailing strategy" de "backtesting.lib". Na nova classe de estratégia, herde de "trailing strategy" em vez da classe base "strategy". Substitua a função " init " para chamar a função " init " da classe pai usando "super". Em seguida, use a função "set_trailing_stop_loss" da classe pai para definir um valor de trailing stop loss.
Na próxima seção do vídeo, o apresentador explica com mais detalhes como funciona a "estratégia à direita" e como personalizá-la para requisitos específicos. No entanto, nesta seção, o foco está na utilização da "estratégia à direita" em nosso código. Ao chamar a função " init " da classe pai e usar a função "set_trailing_stop_loss", podemos aproveitar a funcionalidade de trailing stop loss em nosso backtest.
No geral, o vídeo fornece uma explicação passo a passo da implementação de stop loss em "backtesting.py". Abrange exemplos simples, bem como conceitos mais avançados, como o valor de 10, o que significa que nosso stop loss seguirá o preço em 10 unidades.
Agora que configuramos nossa função de inicialização, vamos para a próxima função. É aqui que a maior parte da nossa lógica de negociação será implementada. Dentro da próxima função, primeiro chamaremos a próxima função da classe pai usando super().next(). Isso garante que a funcionalidade de trailing stop loss seja executada junto com a outra lógica de negociação.
Em seguida, adicionaremos algum código para ajustar nosso trailing stop loss. Usaremos uma instrução condicional para verificar se temos uma posição aberta (self.position não é None). Se tivermos uma posição, atualizaremos o trailing stop loss usando o método update_trailing_sl fornecido pela classe trailing_strategy. Este método usa o preço atual como argumento e atualiza o stop loss de acordo.
Validação de backtest em Python (enganado pela aleatoriedade)
Validação de backtest em Python (enganado pela aleatoriedade)
Todos nós já estivemos naquela situação em que criamos uma estratégia de negociação, a testamos e, quando finalmente a implementamos, ela falha no desempenho esperado. Uma das principais razões para essa decepção é o ajuste excessivo da estratégia a um conjunto específico de dados históricos usados no backtest. Neste vídeo, demonstrarei uma estratégia para combater o overfitting e garantir que você não confie em estratégias que carecem de uma base sólida ou sejam enganadas pela aleatoriedade.
Vamos mergulhar em um exemplo específico. Realizei um backtest em uma estratégia simples baseada em RSI usando Bitcoin como ativo. A estratégia envolve vender quando o RSI está alto e comprar quando o RSI está baixo. Os resultados do backtest mostraram um retorno modesto de cerca de três por cento, apesar do Bitcoin ter sofrido uma queda de 15 por cento no período testado. À primeira vista, pode parecer uma estratégia promissora para mercados em baixa.
No entanto, é crucial examinar o desempenho da estratégia em vários períodos de tempo para determinar se ela identifica consistentemente oportunidades lucrativas ou se simplesmente teve sorte com os valores dos parâmetros escolhidos durante o backtest. Para conseguir isso, realizei vários backtests de 30 dias, cobrindo diferentes períodos ao longo do ano.
Ao traçar a distribuição dos retornos desses backtests, podemos obter insights sobre a eficácia da estratégia. O gráfico mostra cada janela de 30 dias como um ponto, representando os retornos obtidos nesse período. O box plot que acompanha exibe o retorno mediano, quartis, valores máximos e mínimos. Analisando o gráfico, fica evidente que o retorno médio em um período de 30 dias é de -8,5%. Além disso, a distribuição dos retornos parece ser aleatória, semelhante aos resultados esperados de um gerador de números aleatórios entre -35 e 15. Essas descobertas indicam fortemente que a estratégia não é única ou eficaz além dos dados históricos específicos usados no backtest.
Para validar a estratégia e mitigar a influência do overfitting, precisamos realizar backtests em uma gama mais ampla de dados. Para isso, baixei vários arquivos de dados cobrindo todo o ano, do início de 2022 ao final de 2022. Combinei esses arquivos em um CSV mestre contendo dados de velas de um minuto para todo o período.
No código de validação, fiz alguns pequenos ajustes para acomodar o conjunto de dados estendido. A estratégia principal permanece a mesma, com foco na lógica de negociação baseada em RSI. No entanto, introduzi um loop para realizar backtests em janelas de 30 dias em todos os dados. Cada backtest calcula retornos, que são adicionados a uma lista para análise posterior.
Ao gerar um gráfico de caixa usando os retornos coletados, podemos visualizar a distribuição do desempenho da estratégia em várias janelas de 30 dias. Este gráfico revela a variabilidade dos retornos e fornece uma imagem mais clara de como a estratégia funciona em diferentes intervalos de tempo. Neste exemplo específico, o gráfico indica retornos predominantemente negativos para quase todos os meses, sugerindo que a estratégia carece de lucratividade consistente.
Essas técnicas para validar e verificar as estratégias de negociação podem ser aplicadas a qualquer estrutura de backtesting de sua escolha. O código fornecido utiliza a biblioteca backtesting.py, mas você pode adaptá-lo a outras bibliotecas como vectorbt ou backtrader. A ideia-chave é garantir que sua estratégia demonstre robustez em diversos períodos de tempo e não seja simplesmente um produto de superajuste a um conjunto específico de dados históricos.
Ao seguir essas etapas de validação, você pode reduzir o risco de depender de estratégias que não são baseadas na realidade ou de ser vítima de resultados aleatórios. É essencial ir além do desempenho do backtest e considerar a eficácia da estratégia em diferentes condições de mercado para tomar decisões informadas ao implementar estratégias de negociação.
Depois de analisar os resultados do backtest e a distribuição dos retornos em diferentes timeframes, descobrimos que o desempenho da estratégia era essencialmente aleatório. Não forneceu lucratividade consistente fora do período de tempo específico usado para backtesting. Isso indica que a estratégia sofria de overfitting e carecia de robustez.
Para evitar cair na armadilha do overfitting e aumentar as chances de desenvolver estratégias de negociação confiáveis, aqui estão algumas recomendações:
Use dados suficientes e diversos: certifique-se de que seu backtest incorpore uma quantidade significativa de dados históricos para cobrir várias condições de mercado. Isso ajuda a capturar uma gama mais ampla de cenários e reduz a probabilidade de superajuste a condições específicas do mercado.
Valide em vários prazos: em vez de confiar apenas em um único período de tempo para backtesting, teste sua estratégia em diferentes prazos. Isso fornece insights sobre seu desempenho em várias condições de mercado e ajuda a identificar se a estratégia tem rentabilidade consistente ou se os resultados observados foram devidos à aleatoriedade.
Implemente testes fora da amostra: reserve uma parte de seus dados históricos para testes fora da amostra. Depois de conduzir seu backtest primário no conjunto de dados inicial, valide a estratégia nos dados reservados que o modelo não viu antes. Isso ajuda a avaliar a capacidade da estratégia de se adaptar a condições de mercado inéditas e fornece uma avaliação mais realista de seu desempenho.
Cuidado com o ajuste de curva: Evite otimização excessiva ou ajuste de parâmetros para ajustar a estratégia muito de perto aos dados históricos. Estratégias que são muito adaptadas a padrões de dados específicos têm maior probabilidade de falhar nas negociações do mundo real. Busque robustez em vez de buscar desempenho excepcional apenas com dados históricos.
Considere a análise walk-forward: em vez de confiar apenas em backtests estáticos, considere o uso da análise walk-forward. Isso envolve reotimizar periodicamente e testar novamente sua estratégia à medida que novos dados se tornam disponíveis. Ele permite que você adapte e ajuste sua estratégia continuamente, melhorando seu desempenho em condições de mercado em constante mudança.
Use testes de significância estatística: aplique testes estatísticos para avaliar a significância do desempenho de sua estratégia. Isso ajuda a determinar se os resultados observados são estatisticamente significativos ou apenas devido ao acaso. Testes estatísticos comuns usados em backtesting incluem testes t, testes bootstrap e simulações de Monte Carlo.
Ao seguir essas diretrizes, você pode reduzir o risco de desenvolver estratégias excessivamente ajustadas aos dados históricos e aumentar a probabilidade de criar abordagens de negociação robustas e confiáveis.
Lembre-se, o objetivo é desenvolver estratégias de negociação que demonstrem lucratividade consistente em diferentes condições de mercado, em vez de estratégias que meramente tenham bom desempenho em dados históricos.
Uma introdução rápida ao Python para engenheiros de aprendizado de máquina
Uma introdução rápida ao Python para engenheiros de aprendizado de máquina
O instrutor do curso começa apresentando o conceito de modelagem preditiva e sua importância na indústria. A modelagem preditiva se concentra no desenvolvimento de modelos que podem fazer previsões precisas, mesmo que não forneçam uma explicação de por que essas previsões são feitas. O instrutor enfatiza que o curso se concentrará especificamente em dados tabulares, como planilhas ou bancos de dados. O objetivo é orientar os alunos de desenvolvedores interessados em aprendizado de máquina em Python para se tornarem proficientes no trabalho com novos conjuntos de dados, desenvolvendo modelos preditivos de ponta a ponta e aproveitando o Python e a biblioteca SCIPy para tarefas de aprendizado de máquina.
Para começar, o instrutor oferece um curso intensivo de sintaxe do Python. Eles cobrem conceitos fundamentais como variáveis e atribuições, esclarecendo a distinção entre o sinal de "igual" usado para atribuição e o sinal de "igual duplo" usado para comparações de igualdade. O instrutor demonstra como usar o Jupyter Notebook para codificação Python e fornece dicas de navegação, como criar um novo notebook, usar aliases para bibliotecas, executar células e copiar ou mover células. Eles também explicam o recurso de salvamento automático e salvamento manual de notebooks. Por fim, o vídeo aborda brevemente a interrupção da execução do kernel.
Seguindo em frente, o instrutor explica como usar a barra de ferramentas no Jupyter Notebook para navegação do mecanismo Python e como anotar blocos de anotações usando o Markdown. O vídeo aborda instruções essenciais de controle de fluxo, incluindo condições if-then-else, loops for e loops while. Essas instruções permitem a tomada de decisões e a repetição no código Python. O instrutor então apresenta três estruturas de dados cruciais para aprendizado de máquina: tuplas, listas e dicionários. Essas estruturas de dados fornecem maneiras eficientes de armazenar e manipular dados. Além disso, o vídeo inclui um curso intensivo sobre NumPy, uma biblioteca que permite operações numéricas em Python. Abrange a criação de arrays, acesso a dados e execução de operações aritméticas com arrays.
O vídeo passa a discutir duas bibliotecas essenciais, Matplotlib e Pandas, que são comumente usadas em aprendizado de máquina para análise e visualização de dados. O Matplotlib permite que os usuários criem vários gráficos e gráficos, facilitando a visualização dos dados. Pandas, por outro lado, fornece estruturas de dados e funções para manipulação e análise de dados, particularmente por meio de séries e estruturas de quadros de dados. O vídeo destaca a importância da função read_csv do Pandas para carregar arquivos CSV, o formato mais comum em aplicativos de aprendizado de máquina. Ele também enfatiza a utilidade das funções do Pandas para resumir e plotar dados para obter insights e preparar dados para tarefas de aprendizado de máquina. Estatísticas descritivas em Python são mencionadas como uma ferramenta crucial para entender as características e a natureza dos dados.
O vídeo mergulha em técnicas específicas de visualização de dados que podem ajudar na análise de dados antes de aplicar técnicas de aprendizado de máquina. Histogramas, gráficos de densidade e gráficos de caixa são introduzidos como formas de observar a distribuição de atributos e identificar potenciais outliers. Matrizes de correlação e matrizes de gráfico de dispersão são apresentadas como métodos para identificar relacionamentos entre pares de atributos. O vídeo enfatiza a importância de redimensionar, padronizar, normalizar e binarizar dados como etapas de pré-processamento necessárias para preparar dados para algoritmos de aprendizado de máquina. O método de ajuste e transformação é explicado como uma abordagem comum para o pré-processamento de dados.
O próximo tópico discutido são técnicas de pré-processamento de dados em aprendizado de máquina. O vídeo aborda normalização e padronização como duas técnicas importantes. A normalização envolve o redimensionamento dos atributos para que tenham a mesma escala, enquanto a padronização envolve a transformação dos atributos para que tenham uma média de zero e um desvio padrão de um. A binarização, que limita os dados para criar atributos binários ou valores nítidos, também é explicada. A importância da seleção de recursos é enfatizada, pois recursos irrelevantes ou parcialmente irrelevantes podem afetar negativamente o desempenho do modelo. O vídeo apresenta a seleção univariada como uma abordagem estatística para a seleção de recursos e destaca o uso de eliminação recursiva de recursos e métodos de importância de recursos que utilizam conjuntos de árvores de decisão, como floresta aleatória ou árvores extras. A análise de componentes principais (PCA) também é discutida como uma técnica de redução de dados que pode comprimir o conjunto de dados em um número menor de dimensões usando álgebra linear.
O vídeo enfatiza a importância dos métodos de reamostragem para avaliar o desempenho dos algoritmos de aprendizado de máquina em dados não vistos. Ele adverte contra avaliar algoritmos no mesmo conjunto de dados usado para treinamento, pois pode levar a overfitting e má generalização para novos dados. Técnicas como conjuntos de divisão de teste de treinamento, validação cruzada k-fold, validação cruzada de deixar um de fora e divisões repetidas de testes aleatórios são explicadas como formas de obter estimativas confiáveis do desempenho do algoritmo. O vídeo termina com uma discussão sobre várias métricas de desempenho para algoritmos de aprendizado de máquina, como precisão de classificação, perda logarítmica, área sob a curva, matriz de confusão e relatório de classificação.
O vídeo investiga as métricas de desempenho usadas para avaliar as previsões feitas pelos modelos de aprendizado de máquina. Ele cobre precisão de classificação, perda de log (para avaliar probabilidades), área sob a curva de característica de operação do receptor (ROC) (para problemas de classificação binária), matriz de confusão (para avaliar a precisão do modelo com várias classes) e o relatório de classificação (que fornece precisão , recall, pontuação F1 e suporte para cada classe). Além disso, o vídeo explica três métricas comuns de regressão: erro médio absoluto, erro médio quadrado e R-quadrado. Exemplos práticos são demonstrados para ilustrar como calcular essas métricas usando Python.
O palestrante apresenta o conceito de verificação pontual para determinar quais algoritmos de aprendizado de máquina funcionam bem para um problema específico. A verificação pontual envolve a avaliação de vários algoritmos e a comparação de seus desempenhos. O vídeo demonstra a verificação pontual de seis modelos diferentes de aprendizado de máquina, incluindo algoritmos lineares e não lineares, usando Python com a biblioteca scikit-learn. O palestrante enfatiza que os resultados podem variar devido à natureza estocástica dos modelos. A seção termina com uma introdução aos modelos de aprendizado de máquina de regressão, preparando os visualizadores para a próxima seção, verificando esses modelos no local.
Em seguida, o palestrante apresenta modelos de aprendizado de máquina lineares e não lineares usando o conjunto de dados de preços imobiliários de Boston como exemplo. Um equipamento de teste com validação cruzada de 10 vezes é empregado para demonstrar como verificar cada modelo, e o erro quadrático médio é usado como um indicador de desempenho (invertido devido a uma peculiaridade na função de pontuação de arquivo cruzado). O modelo de regressão linear, assumindo uma distribuição gaussiana para variáveis de entrada e sua relevância para a variável de saída, é discutido. A regressão Ridge, uma modificação da regressão linear que minimiza a complexidade do modelo, também é explicada. O palestrante destaca a importância de entender o pipeline ou processo, em vez de ficar preso na implementação de código específico neste estágio.
O vídeo explora o processo de compreensão e visualização de variáveis de entrada para um problema de aprendizado de máquina. Ele sugere o uso de gráficos univariados, como gráficos de caixa e bigode e histogramas para entender a distribuição das variáveis de entrada. Para análise multivariada, gráficos de dispersão podem ajudar a identificar relacionamentos estruturais entre variáveis de entrada e revelar altas correlações entre pares de atributos específicos. O vídeo também discute o processo de avaliação, usando uma estrutura de teste com validação cruzada de 10 vezes para avaliar o desempenho do modelo. A importância de criar um conjunto de dados de validação para avaliar independentemente a precisão do melhor modelo é enfatizada. Seis modelos diferentes de aprendizado de máquina são avaliados e o mais preciso é selecionado para fazer previsões. O relatório de classificação, a matriz de confusão e a estimativa de precisão são usados para avaliar as previsões. Por fim, o vídeo aborda a regressão de regularização, destacando a construção dos modelos Lasso e Elastic Net para reduzir a complexidade dos modelos de regressão.
O vídeo apresenta um problema de classificação binária em aprendizado de máquina, com o objetivo de prever metal de rocha usando o conjunto de dados Sonar Mines versus Rocks. O conjunto de dados contém 208 instâncias com 61 atributos, incluindo o atributo de classe. Estatísticas descritivas são analisadas, indicando que, embora os dados estejam no mesmo intervalo, diferentes médias sugerem que a padronização dos dados pode ser benéfica. As visualizações de dados unimodais e multimodais, como histogramas, gráficos de densidade e visualizações de correlação, são exploradas para obter informações sobre os dados. Um conjunto de dados de validação é criado e uma linha de base para o desempenho do modelo é estabelecida testando vários modelos, incluindo regressão linear, regressão logística, análise discriminante linear, árvores de regressão de classificação, máquinas de vetor de suporte (SVM), Bayes ingênuos e k vizinhos mais próximos ( KNN). A precisão de cada algoritmo é calculada usando validação cruzada de 10 vezes e comparada.
No segmento a seguir, o vídeo discute como avaliar diferentes algoritmos de aprendizado de máquina usando ajuste e dados padronizados. A padronização envolve a transformação dos dados, de modo que cada atributo tenha média 0 e desvio padrão 1, o que pode melhorar o desempenho de determinados modelos. Para evitar vazamento de dados durante o processo de transformação, recomenda-se um pipeline que padronize os dados e construa o modelo para cada dobra no chicote de teste de validação cruzada. O vídeo demonstra técnicas de ajuste para k vizinhos mais próximos (KNN) e máquinas de vetor de suporte (SVM) usando uma pesquisa de grade com validação cruzada de 10 vezes na cópia padronizada do conjunto de dados de treinamento. As configurações ótimas para KNN e SVM são identificadas e a precisão dos modelos é avaliada. Por fim, o vídeo discute brevemente KNN, regressão de árvore de decisão e SVM como modelos de aprendizado de máquina não linear.
Estatística aplicada para engenheiros de aprendizado de máquina
Estatística aplicada para engenheiros de aprendizado de máquina
O instrutor do vídeo apresenta o campo da estatística e destaca sua importância no trabalho com problemas de modelagem preditiva no aprendizado de máquina. Eles explicam que a estatística oferece uma variedade de técnicas, desde simples estatísticas resumidas até testes de hipóteses e estatísticas de estimativa. O curso é projetado para fornecer uma base passo a passo em métodos estatísticos, com exemplos práticos em Python. Abrange seis aspectos principais de estatística para aprendizado de máquina e se concentra em aplicativos do mundo real, tornando-o adequado para engenheiros de aprendizado de máquina.
O instrutor enfatiza a estreita relação entre aprendizado de máquina e estatística e sugere que os programadores possam se beneficiar ao aprimorar suas habilidades estatísticas por meio deste curso. Eles classificam o campo da estatística em duas categorias: estatística descritiva e estatística inferencial. A estatística descritiva envolve resumir e descrever dados usando medidas como médias e representações gráficas. As estatísticas inferenciais, por outro lado, são usadas para fazer inferências sobre uma população maior com base em dados de amostra.
A importância do tratamento adequado dos dados também é destacada, incluindo o tratamento de perda, corrupção e erros de dados. O vídeo aprofunda as várias etapas envolvidas na preparação de dados para modelos de aprendizado de máquina. Isso inclui limpeza de dados, seleção de dados, amostragem de dados e transformação de dados usando métodos estatísticos, como padronização e normalização. A avaliação de dados também é enfatizada, e o vídeo discute o design experimental, dados de reamostragem e seleção de modelo para estimar a habilidade de um modelo. Para prever novos dados, o vídeo recomenda o uso de estatísticas de estimativa.
O vídeo explica as diferentes escalas de medição usadas em estatística, ou seja, escalas nominal, ordinal, de intervalo e de razão. Ele discute as técnicas estatísticas aplicáveis a cada escala e como elas podem ser implementadas no aprendizado de máquina. A importância de entender e relatar a incerteza na modelagem é enfatizada, especialmente ao trabalhar com conjuntos de amostras. O vídeo foca na distribuição normal, que é comumente observada em vários conjuntos de dados. Ele demonstra como gerar dados de amostra e avaliar visualmente seu ajuste a uma distribuição gaussiana usando um histograma. Embora a maioria dos conjuntos de dados não tenha uma distribuição gaussiana perfeita, eles geralmente exibem propriedades semelhantes às gaussianas.
A importância de selecionar uma forma granular de dividir os dados para expor a distribuição gaussiana subjacente é destacada. Medidas de tendência central, como média e mediana, são exploradas, juntamente com a variância e desvio padrão como medidas de distribuição da distribuição. A aleatoriedade é discutida como uma ferramenta essencial no aprendizado de máquina, ajudando os algoritmos a se tornarem mais robustos e precisos. Várias fontes de aleatoriedade, incluindo erros de dados e ruído, são explicadas.
O vídeo explica que os algoritmos de aprendizado de máquina geralmente aproveitam a aleatoriedade para obter melhor desempenho e gerar modelos mais otimizados. A aleatoriedade permite que os algoritmos explorem diferentes possibilidades e encontrem melhores mapeamentos de dados. Fontes controláveis e incontroláveis de aleatoriedade são discutidas e o uso da função de semente para tornar a aleatoriedade consistente dentro de um modelo é explicado. O vídeo fornece um exemplo usando o módulo aleatório do Python para gerar números aleatórios e destaca a diferença entre o gerador de números pseudoaleatórios da biblioteca numpy e o gerador de números pseudoaleatórios da biblioteca padrão. Dois casos para quando propagar o gerador de números aleatórios também são discutidos, ou seja, durante a preparação de dados e divisões de dados.
A divisão consistente dos dados e o uso de geradores de números pseudo-aleatórios ao avaliar um algoritmo são enfatizados. O vídeo recomenda avaliar o modelo de uma forma que incorpore a incerteza medida e o desempenho do algoritmo. Avaliar um algoritmo em várias divisões dos dados fornece informações sobre como seu desempenho varia com diferentes dados de treinamento e teste. Avaliar um algoritmo várias vezes nas mesmas divisões de dados ajuda a entender como seu desempenho varia por conta própria. O vídeo também apresenta a lei dos grandes números e o teorema do limite central, destacando que ter mais dados melhora o desempenho do modelo e que, à medida que o tamanho da amostra aumenta, a distribuição da média se aproxima de uma distribuição gaussiana.
O vídeo demonstra o teorema do limite central usando jogadas de dados e código, mostrando como as médias amostrais se aproximam de uma distribuição Gaussiana à medida que o tamanho da amostra aumenta.
O vídeo enfatiza a importância de avaliar modelos de aprendizado de máquina e entender a incerteza envolvida em suas previsões. Ele apresenta métricas de avaliação, como exatidão, precisão, recuperação e pontuação F1, que são comumente usadas para avaliar o desempenho de modelos de classificação. O vídeo explica que a precisão mede a correção geral das previsões, a precisão mede a proporção de previsões positivas verdadeiras de todas as previsões positivas, a revocação mede a proporção de previsões positivas verdadeiras de todas as instâncias positivas reais e a pontuação F1 combina precisão e revocação em uma única métrica. Ele também discute o conceito de uma matriz de confusão, que fornece uma visão mais detalhada do desempenho de um modelo de classificação, mostrando o número de previsões de verdadeiro positivo, verdadeiro negativo, falso positivo e falso negativo.
O palestrante demonstra como calcular essas métricas de avaliação usando a biblioteca scikit-learn do Python. Ele mostra como importar os módulos necessários, dividir os dados em conjuntos de treinamento e teste, treinar um modelo de classificação, fazer previsões no conjunto de teste e avaliar o desempenho do modelo usando exatidão, precisão, recuperação e pontuação F1. O vídeo destaca a importância de avaliar modelos em dados não vistos para garantir suas capacidades de generalização.
Além disso, o vídeo apresenta o conceito de curvas de características de operação do receptor (ROC) e área sob a curva (AUC) como métricas de avaliação para modelos de classificação binária. As curvas ROC plotam a taxa de verdadeiros positivos em relação à taxa de falsos positivos em vários limites de classificação, fornecendo uma representação visual do desempenho do modelo em diferentes valores de limite. A AUC representa a área sob a curva ROC e fornece uma única métrica para comparar o desempenho de diferentes modelos. O vídeo explica como plotar uma curva ROC e calcular a AUC usando a biblioteca scikit-learn do Python.
O conceito de superajuste é discutido como um problema comum no aprendizado de máquina, em que um modelo funciona bem nos dados de treinamento, mas não consegue generalizar para dados novos e não vistos. O vídeo explica que o overfitting ocorre quando um modelo se torna muito complexo e aprende padrões específicos para os dados de treinamento que não se aplicam à população em geral. O vídeo demonstra como o overfitting pode ser visualizado comparando o desempenho de treinamento e teste de um modelo. Isso explica que um modelo de overfit terá baixo erro de treinamento, mas alto erro de teste, indicando generalização ruim. O vídeo sugere técnicas de regularização, como regressão de ridge e regressão de laço, como formas de mitigar o overfitting adicionando um termo de penalidade à função objetivo do modelo.
O conceito de validação cruzada é introduzido como uma técnica para avaliar o desempenho e a generalização de modelos de aprendizado de máquina. O vídeo explica que a validação cruzada envolve dividir os dados em vários subconjuntos, treinar o modelo em uma parte dos dados e avaliar seu desempenho na parte restante. Esse processo é repetido várias vezes, com diferentes subconjuntos usados para treinamento e teste, e os resultados são calculados para fornecer uma estimativa do desempenho do modelo. O vídeo demonstra como executar a validação cruzada usando a biblioteca scikit-learn do Python, especificamente o método de validação cruzada K-fold.
A seguir, o vídeo discute o conceito de seleção de recursos e a importância no aprendizado de máquina. Ele explica que a seleção de recursos envolve a identificação dos recursos ou variáveis mais relevantes que contribuem para o desempenho do modelo. O vídeo destaca a importância de selecionar recursos informativos para melhorar a precisão do modelo, reduzir o overfitting e aprimorar a interpretabilidade. Ele apresenta diferentes técnicas de seleção de recursos, como seleção univariada, eliminação recursiva de recursos e pontuações de importância de recursos. O vídeo demonstra como implementar a seleção de recursos usando a biblioteca scikit-learn do Python.
O conceito de redução de dimensionalidade também é discutido como uma técnica para abordar a maldição da dimensionalidade no aprendizado de máquina. O vídeo explica que a redução de dimensionalidade envolve a redução do número de recursos ou variáveis em um conjunto de dados, preservando a maior parte das informações relevantes. Ele apresenta a análise de componentes principais (PCA) como uma técnica de redução de dimensionalidade comumente usada. O PCA visa transformar os dados em um espaço de menor dimensão, identificando as direções de variação máxima nos dados. O vídeo explica que o PCA cria novos recursos, chamados de componentes principais, que são combinações lineares dos recursos originais. Esses componentes principais capturam as informações mais importantes nos dados e podem ser usados como entrada para modelos de aprendizado de máquina.
O vídeo demonstra como executar o PCA usando a biblioteca scikit-learn do Python. Ele mostra como importar os módulos necessários, padronizar os dados, inicializar um objeto PCA, ajustar o modelo PCA aos dados e transformar os dados no espaço de dimensão inferior. O vídeo também explica como determinar o número ideal de componentes principais a serem retidos com base na razão de variância explicada.
O conceito de ensemble learning é introduzido como uma técnica para melhorar o desempenho de modelos de aprendizado de máquina combinando vários modelos individuais. O vídeo explica que o aprendizado conjunto aproveita a sabedoria das multidões, onde cada modelo individual contribui com suas próprias previsões, e a previsão final é determinada com base em um mecanismo de votação ou média. O vídeo discute dois métodos populares de aprendizagem em conjunto: bagging e boosting. Bagging envolve o treinamento de vários modelos em diferentes subconjuntos de dados e a agregação de suas previsões, enquanto o reforço se concentra nos modelos de treinamento sequencial, com cada modelo dando mais importância às instâncias que foram classificadas incorretamente pelos modelos anteriores.
O vídeo demonstra como implementar o aprendizado de conjunto usando a biblioteca scikit-learn do Python. Ele mostra como importar os módulos necessários para bagging e boosting, inicializar os modelos de conjunto, ajustá-los aos dados e fazer previsões usando os modelos de conjunto. O vídeo enfatiza que o aprendizado conjunto geralmente pode melhorar o desempenho geral e a robustez dos modelos de aprendizado de máquina.
Por fim, o vídeo aborda brevemente tópicos avançados em aprendizado de máquina, como aprendizado profundo e processamento de linguagem natural (NLP). Ele menciona que o aprendizado profundo envolve o treinamento de redes neurais profundas com várias camadas para aprender padrões complexos em dados. A NLP se concentra no desenvolvimento de modelos e técnicas para compreender e processar a linguagem humana, permitindo aplicações como classificação de texto, análise de sentimento e tradução automática. O vídeo conclui destacando que o aprendizado de máquina é um campo vasto e em rápida evolução, com inúmeras aplicações e oportunidades para exploração e aprendizado adicionais.
O vídeo fornece uma visão geral abrangente de conceitos e técnicas essenciais em aprendizado de máquina, incluindo avaliação de modelo, overfitting, regularização, validação cruzada, seleção de recursos, redução de dimensionalidade, aprendizado conjunto e uma introdução ao aprendizado profundo e PNL. Ele demonstra implementações práticas usando Python e a biblioteca scikit-learn, tornando-o um recurso valioso para iniciantes e para aqueles que procuram aprimorar sua compreensão do aprendizado de máquina.
Álgebra linear aplicada para engenheiros de aprendizado de máquina
Álgebra linear aplicada para engenheiros de aprendizado de máquina
O vídeo enfatiza a importância de aprender álgebra linear para engenheiros de aprendizado de máquina, pois serve como um bloco de construção fundamental para a compreensão de cálculo e estatística, que são essenciais no aprendizado de máquina. Ter uma compreensão mais profunda da álgebra linear fornece aos profissionais uma melhor intuição de como os métodos de aprendizado de máquina funcionam, permitindo que personalizem algoritmos e desenvolvam novos.
O curso adota uma abordagem de cima para baixo para ensinar os fundamentos da álgebra linear, usando exemplos concretos e estruturas de dados para demonstrar operações em matrizes e vetores. A álgebra linear é descrita como a matemática de matrizes e vetores, fornecendo uma linguagem para manipulação de dados e permitindo a criação de novas colunas ou matrizes de números por meio de operações nessas estruturas de dados. Inicialmente desenvolvida no final de 1800 para resolver sistemas de equações lineares, a álgebra linear tornou-se um pré-requisito fundamental para entender o aprendizado de máquina.
O palestrante apresenta o conceito de álgebra linear numérica, que envolve a aplicação da álgebra linear em computadores. Isso inclui implementar operações de álgebra linear e abordar os desafios que surgem ao trabalhar com precisão limitada de ponto flutuante em computadores digitais. A álgebra linear numérica desempenha um papel crucial no aprendizado de máquina, particularmente em algoritmos de aprendizado profundo que dependem fortemente de unidades de processamento gráfico (GPUs) para realizar cálculos de álgebra linear com eficiência. Várias bibliotecas de álgebra linear numérica de código aberto, com bibliotecas baseadas em Fortran como base, são comumente usadas para calcular operações de álgebra linear, geralmente em conjunto com linguagens de programação como Python.
A importância da álgebra linear nas estatísticas é destacada, particularmente na análise estatística multivariada, análise de componentes principais e resolução de problemas de regressão linear. O vídeo também menciona a ampla gama de aplicações da álgebra linear em campos como processamento de sinais, computação gráfica e até física, com exemplos como a teoria da relatividade de Albert Einstein utilizando tensores e cálculo de tensores, um tipo de álgebra linear.
O vídeo explora ainda mais a aplicação prática da álgebra linear em tarefas de aprendizado de máquina. Ele apresenta o conceito de usar operações de álgebra linear, como corte, dimensionamento e cisalhamento, para manipular imagens, demonstrando como a notação e as operações de álgebra linear podem ser empregadas nesse contexto. Além disso, o vídeo explica a popular técnica de codificação chamada codificação one-hot para variáveis categóricas. A principal estrutura de dados usada no aprendizado de máquina, matrizes N-dimensionais ou matrizes ND, é apresentada, com a biblioteca NumPy em Python discutida como uma ferramenta poderosa para criar e manipular essas matrizes. O vídeo aborda funções importantes, como v-stack e empilhamento horizontal, que permitem a criação de novos arrays a partir de arrays existentes.
A manipulação e o acesso a dados em arrays NumPy, comumente usados para representar dados de aprendizado de máquina, são explicados. O vídeo demonstra como converter listas unidimensionais em arrays usando a função array e criar arrays de dados bidimensionais usando listas de listas. Ele também abrange operações de indexação e divisão em matrizes NumPy, incluindo o uso do operador de dois-pontos para divisão e indexação negativa. A importância do fatiamento na especificação de variáveis de entrada e saída no aprendizado de máquina é destacada.
Técnicas para trabalhar com conjuntos de dados multidimensionais em aprendizado de máquina são discutidas no vídeo. Ele começa com fatias unidimensionais e progride para fatias bidimensionais, juntamente com a separação de dados em valores de entrada e saída para treinamento e teste. A reformulação da matriz é abordada, explicando como remodelar matrizes unidimensionais em matrizes bidimensionais com uma coluna e transformar dados bidimensionais em matrizes tridimensionais para algoritmos que requerem várias amostras de uma ou mais etapas de tempo e recursos. É introduzido o conceito de array broadcasting, que permite que arrays com tamanhos diferentes sejam usados em operações aritméticas, permitindo que conjuntos de dados com tamanhos variados sejam processados de forma eficaz.
O vídeo também aborda as limitações da aritmética de array no NumPy, especificamente que as operações aritméticas só podem ser executadas em arrays com as mesmas dimensões e dimensões com o mesmo tamanho. No entanto, essa limitação é superada pelo recurso de transmissão integrado do NumPy, que replica a matriz menor ao longo da última dimensão incompatível, permitindo a aritmética entre matrizes com diferentes formas e tamanhos. O vídeo fornece três exemplos de transmissão, incluindo matrizes escalares e unidimensionais, escalar em uma matriz bidimensional e matriz unidimensional em uma matriz bidimensional. Note-se que a transmissão segue uma regra rígida, afirmando que a aritmética só pode ser realizada quando a forma de cada dimensão nas matrizes é igual ou uma delas tem um tamanho de dimensão de um.
Seguindo em frente, o palestrante introduz o conceito de vetores, que são tuplas de um ou mais valores chamados escalares. Os vetores geralmente são representados usando caracteres minúsculos como "v" e podem ser vistos como pontos ou coordenadas em um espaço n-dimensional, onde "n" representa o número de dimensões. A criação de vetores como matrizes NumPy em Python é explicada. O vídeo também abrange operações aritméticas vetoriais, como adição e subtração de vetores, que são executadas elemento a elemento para vetores de igual comprimento, resultando em um novo vetor de mesmo comprimento. Além disso, o palestrante explica como os vetores podem ser multiplicados por escalares para dimensionar sua magnitude e demonstra como realizar essas operações usando matrizes NumPy em Python. O produto escalar de dois vetores também é discutido, o que produz um escalar e pode ser usado para calcular a soma ponderada de um vetor.
O foco então muda para as normas vetoriais e sua importância no aprendizado de máquina. As normas vetoriais referem-se ao tamanho ou comprimento de um vetor e são calculadas usando uma medida que resume a distância do vetor desde a origem do espaço vetorial. É enfatizado que as normas vetoriais são sempre positivas, exceto para um vetor de todos os valores zero. O vídeo apresenta quatro cálculos de normas vetoriais comuns usados no aprendizado de máquina. Começa com a norma do vetor L1, seguida pela norma L2 (norma euclidiana) e a norma max. A seção também define matrizes e explica como manipulá-las em Python. Aritmética de matrizes, incluindo multiplicação matriz-matriz (produto escalar), multiplicação matriz-vetor e multiplicação escalar, é discutida. Uma matriz é descrita como uma matriz bidimensional de escalares com uma ou mais colunas e uma ou mais linhas, normalmente representada por letras maiúsculas como "A".
Em seguida, é introduzido o conceito de operações matriciais para aprendizado de máquina. Isso inclui multiplicação de matrizes, divisão de matrizes e multiplicação escalar de matrizes. A multiplicação de matrizes, também conhecida como produto escalar de matrizes, exige que o número de colunas da primeira matriz seja igual ao número de linhas da segunda matriz. O vídeo menciona que a função de ponto no NumPy pode ser usada para implementar esta operação. O conceito de matriz transposta também é explicado, onde uma nova matriz é criada invertendo o número de linhas e colunas da matriz original. Por fim, discute-se o processo de inversão de matrizes, que envolve encontrar outra matriz que, ao ser multiplicada pela matriz original, resulte em uma matriz identidade.
Continuando com a discussão sobre inversão de matrizes, o vídeo explora ainda mais esse conceito. A inversão de uma matriz é indicada por um sobrescrito 1 negativo ao lado da matriz. O vídeo explica que a inversão de matrizes envolve encontrar métodos numéricos eficientes. É introduzida a operação de rastreamento de uma matriz quadrada, que calcula a soma dos elementos diagonais e pode ser calculada usando a função de rastreamento no NumPy. O determinante de uma matriz quadrada é definido como uma representação escalar do volume da matriz e também pode ser calculado usando a função det em NumPy. A classificação de uma matriz é brevemente mencionada, que estima o número de linhas ou colunas linearmente independentes na matriz e é comumente calculada usando a decomposição de valor singular. Por fim, o conceito de matrizes esparsas é explicado, destacando que elas contêm predominantemente valores zero e podem ser computacionalmente caras para representar e trabalhar.
O vídeo então se aprofunda em matrizes esparsas, que são matrizes compostas principalmente de valores zero e diferem de matrizes densas que geralmente possuem valores diferentes de zero. A dispersão é quantificada pelo cálculo da pontuação de dispersão, que é o número de valores zero dividido pelo número total de elementos na matriz. O vídeo enfatiza dois problemas principais associados à dispersão: complexidade de espaço e complexidade de tempo. Nota-se que representar e trabalhar com matrizes esparsas pode ser computacionalmente caro.
Para enfrentar esses desafios, o vídeo menciona que o Scipy fornece ferramentas para criar e manipular matrizes esparsas. Além disso, destaca que muitas funções de álgebra linear em NumPy e Scipy podem operar em matrizes esparsas, permitindo cálculos e operações eficientes em dados esparsos.
Matrizes esparsas são comumente usadas em aprendizado de máquina aplicado para observações de dados e preparação de dados. Sua dispersão permite armazenamento e processamento mais eficientes de grandes conjuntos de dados com um número significativo de valores zero. Aproveitando a estrutura esparsa, os algoritmos de aprendizado de máquina podem se beneficiar do uso reduzido de memória e cálculos mais rápidos.
Seguindo em frente, o vídeo discute diferentes tipos de matrizes comumente usadas em álgebra linear, particularmente aquelas relevantes para aprendizado de máquina. São introduzidas matrizes quadradas, onde o número de linhas é igual ao número de colunas. Matrizes retangulares, que possuem diferentes números de linhas e colunas, também são mencionadas. O vídeo explica a diagonal principal de uma matriz quadrada, que consiste em elementos com os mesmos índices de linha e coluna. A ordem de uma matriz quadrada, definida como o número de linhas ou colunas, também é abordada.
Além disso, o vídeo apresenta matrizes simétricas, que são matrizes quadradas iguais à sua transposta. Matrizes triangulares, incluindo matrizes triangulares superiores e inferiores, são explicadas. Matrizes diagonais, onde todos os elementos não diagonais são zero, também são discutidas. Matrizes de identidade, que são matrizes quadradas com uns na diagonal principal e zeros em outros lugares, são explicadas no contexto de seu papel como identidades multiplicativas. Matrizes ortogonais, formadas quando dois vetores têm produto escalar igual a zero, também são introduzidas.
O vídeo prossegue discutindo matrizes e tensores ortogonais. Uma matriz ortogonal é um tipo específico de matriz quadrada onde as colunas e linhas são vetores unitários ortogonais. Essas matrizes são computacionalmente eficientes e estáveis para calcular seu inverso, tornando-as úteis em várias aplicações, incluindo modelos de aprendizado profundo. O vídeo menciona ainda que, no TensorFlow, os tensores são uma estrutura de dados fundamental e uma generalização de vetores e matrizes. Os tensores são representados como matrizes multidimensionais e podem ser manipulados em Python usando matrizes n-dimensionais, semelhantes às matrizes. O vídeo destaca que as operações de tensores elementares, como adição e subtração, podem ser executadas em tensores, matrizes e vetores, fornecendo uma intuição para dimensões superiores.
Em seguida, o vídeo apresenta a decomposição de matrizes, que é um método para dividir uma matriz em suas partes constituintes. A decomposição de matrizes simplifica operações complexas de matrizes e permite cálculos eficientes. Duas técnicas de decomposição de matriz amplamente utilizadas são abordadas: decomposição LU (inferior-superior) para matrizes quadradas e decomposição QR (fatorização QR) para matrizes retangulares.
A decomposição LU pode simplificar equações lineares no contexto de problemas de regressão linear e facilitar cálculos como determinante e inverso de uma matriz. A decomposição QR tem aplicações na resolução de sistemas de equações lineares. Ambos os métodos de decomposição podem ser implementados usando funções integradas no pacote NumPy em Python, fornecendo soluções eficientes e confiáveis para vários problemas de álgebra linear.
Além disso, o vídeo discute a decomposição de Cholesky, que é usada especificamente para matrizes simétricas e definidas positivas. A decomposição de Cholesky é representada por uma matriz triangular inferior e é considerada quase duas vezes mais eficiente que a decomposição LU para decompor matrizes simétricas.
O vídeo menciona brevemente que os métodos de decomposição de matrizes, incluindo a decomposição de Eigen, são empregados para simplificar operações complexas. A decomposição Eigen decompõe uma matriz em seus autovetores e autovalores. Autovetores são coeficientes que representam direções, enquanto autovalores são escalares. Tanto os autovetores quanto os autovalores têm aplicações práticas, como redução de dimensionalidade e realização de operações matriciais complexas.
Por fim, o vídeo aborda o conceito de decomposição de valor singular (SVD) e suas aplicações no aprendizado de máquina. O SVD é usado em várias operações de matriz e métodos de redução de dados no aprendizado de máquina. Ele desempenha um papel crucial em cálculos como regressão linear de mínimos quadrados, compactação de imagem e dados de redução de ruído.
O vídeo explica que SVD permite que uma matriz seja decomposta em três matrizes separadas: U, Σ e V. A matriz U contém os vetores singulares esquerdos, Σ é uma matriz diagonal contendo os valores singulares e V contém os vetores singulares direitos. Ao reconstruir a matriz original a partir desses componentes, pode-se obter uma aproximação dos dados originais, reduzindo sua dimensionalidade.
Uma das principais aplicações do SVD é a redução de dimensionalidade. Ao selecionar um subconjunto dos valores singulares mais significativos e seus vetores singulares correspondentes, é possível representar os dados em um espaço de dimensão inferior sem perder informações cruciais. Essa técnica é particularmente útil nos casos em que os dados possuem alta dimensionalidade, pois permite armazenamento e computação mais eficientes.
O vídeo destaca que o SVD foi aplicado com sucesso no processamento de linguagem natural usando uma técnica chamada análise semântica latente (LSA) ou indexação semântica latente (LSI). Ao representar documentos de texto como matrizes e executar SVD, o LSA pode capturar a estrutura semântica subjacente dos documentos, permitindo tarefas como similaridade de documentos e modelagem de tópicos.
Além disso, o vídeo apresenta a classe SVD truncada, que implementa diretamente a capacidade de reduzir a dimensionalidade de uma matriz. Com o SVD truncado, torna-se possível transformar a matriz original em uma representação de menor dimensão, preservando as informações mais importantes. Essa técnica é particularmente benéfica ao lidar com grandes conjuntos de dados, pois permite processamento e análise mais eficientes.
Em resumo, o vídeo abordou vários tópicos relacionados à álgebra linear para aprendizado de máquina. Enfatizou a importância de aprender álgebra linear como um bloco de construção fundamental para a compreensão do cálculo e da estatística no contexto do aprendizado de máquina. O vídeo discutiu as aplicações da álgebra linear no aprendizado de máquina, como personalização e desenvolvimento de algoritmos, álgebra linear numérica, análise estatística e vários outros campos, como processamento de sinais e computação gráfica.
Além disso, o vídeo explorou os principais conceitos da álgebra linear, incluindo vetores, matrizes, operações com matrizes, normas vetoriais, técnicas de decomposição de matrizes e matrizes esparsas. Ele explicou como esses conceitos são usados no aprendizado de máquina e forneceu informações sobre suas aplicações práticas.
Ao entender a álgebra linear, os profissionais de aprendizado de máquina podem obter uma intuição mais profunda dos fundamentos matemáticos subjacentes dos algoritmos de aprendizado de máquina e aplicá-los efetivamente a problemas do mundo real. A álgebra linear serve como uma ferramenta poderosa para manipulação de dados, redução de dimensionalidade e otimização, permitindo soluções de aprendizado de máquina eficientes e eficazes.
Uma introdução completa ao XGBoost para engenheiros de aprendizado de máquina
Uma introdução completa ao XGBoost para engenheiros de aprendizado de máquina
No vídeo, o instrutor fornece uma introdução abrangente ao XGBoost para engenheiros de aprendizado de máquina. Eles explicam que o XGBoost é uma biblioteca de aprendizado de máquina de código aberto conhecida por sua capacidade de criar rapidamente modelos de classificação e regressão altamente precisos. Ele ganhou popularidade como a melhor escolha para a construção de modelos do mundo real, principalmente ao lidar com conjuntos de dados altamente estruturados. O XGBoost foi criado por Taiki Chen e é baseado na técnica de árvores de decisão de aumento de gradiente, que permite a construção de modelos rápida e eficiente.
O instrutor destaca que o XGBoost oferece suporte a várias interfaces, incluindo implementações Python e scikit-learn. Eles fazem uma demonstração do XGBoost, mostrando vários módulos para carregar dados e construir modelos.
O vídeo se concentra na preparação do conjunto de dados para treinar um modelo XGBoost. O instrutor enfatiza a importância de separar os dados em conjuntos de treinamento e teste. Eles identificam a variável de destino como um problema de classificação binária e explicam o processo de configuração dos hiperparâmetros necessários para o modelo XGBoost. Depois que o modelo é treinado nos dados de treinamento, eles avaliam sua precisão nos dados de teste usando a pontuação de precisão como métrica.
Para fornecer uma melhor compreensão do XGBoost, o instrutor investiga o conceito de aumento de gradiente e seu papel na categoria mais ampla de modelos tradicionais de aprendizado de máquina. Eles explicam que o aumento de gradiente é uma técnica que combina um modelo fraco com outros modelos do mesmo tipo para criar um modelo mais preciso. Neste processo, cada árvore sucessiva é construída para os resíduos de previsão da árvore anterior. O instrutor enfatiza que as árvores de decisão são usadas no aumento de gradiente, pois fornecem uma representação gráfica de possíveis soluções de decisão com base em determinadas condições. Eles também mencionam que projetar uma árvore de decisão requer um processo de pensamento bem documentado para identificar soluções potenciais de forma eficaz.
O vídeo explora ainda mais a criação de árvores de decisão binárias usando divisão binária recursiva. Esse processo envolve a avaliação de todas as variáveis de entrada e pontos de divisão de maneira gananciosa para minimizar uma função de custo que mede a proximidade dos valores previstos com os valores reais. O instrutor explica que a divisão com o menor custo é escolhida e os grupos resultantes podem ser subdivididos recursivamente. Ressaltam que o algoritmo utilizado é ganancioso, pois foca em tomar a melhor decisão a cada passo. No entanto, é preferível ter árvores de decisão com menos divisões para garantir melhor compreensão e reduzir o risco de sobreajuste dos dados. O instrutor destaca que o XGBoost fornece mecanismos para evitar overfitting, como limitar a profundidade máxima de cada árvore e podar ramos irrelevantes. Além disso, eles abordam a codificação de rótulos e demonstram o carregamento do conjunto de dados da íris usando o scikit-learn.
Seguindo em frente, o vídeo cobre o processo de codificação do rótulo de destino como uma variável numérica usando o método do codificador de rótulo. Depois de dividir os dados em conjuntos de dados de treinamento e teste, o instrutor define e treina o classificador XGBoost nos dados de treinamento. Eles então usam o modelo treinado para fazer previsões no conjunto de dados de teste, alcançando uma precisão de 90%. O conceito de aprendizado conjunto é apresentado como um método para combinar vários modelos para melhorar a precisão da previsão, aumentando a eficiência do algoritmo de aprendizado. O instrutor enfatiza a importância de selecionar o modelo certo para problemas de classificação ou regressão para alcançar os melhores resultados.
O vídeo mergulha no conceito de viés e variação em modelos de aprendizado de máquina e enfatiza a necessidade de um equilíbrio entre os dois. O aprendizado conjunto é apresentado como uma técnica para abordar esse equilíbrio, combinando grupos de alunos fracos para criar modelos mais complexos. Duas técnicas de ensemble, bagging e boosting, são introduzidas. Bagging visa reduzir a variância criando subconjuntos de dados para treinar árvores de decisão e criar um conjunto de modelos com alta variância e baixo viés. O boosting, por outro lado, envolve o aprendizado sequencial de modelos com árvores de decisão, permitindo a correção de erros cometidos por modelos anteriores. O instrutor destaca que o aumento de gradiente é um tipo específico de aumento que otimiza uma função de perda diferenciável usando aprendizes fracos na forma de árvores de regressão.
O vídeo explica o conceito de aumento de gradiente em detalhes, descrevendo seu processo de três etapas. A primeira etapa envolve a adição iterativa de aprendizes fracos (por exemplo, árvores de decisão) para minimizar perdas. A segunda etapa é a adição sequencial de árvores e a etapa final se concentra na redução do erro do modelo por meio de novas iterações. Para demonstrar o processo, o vídeo mostra o uso da validação cruzada k-fold para segmentar os dados. Por meio do XGBoost, são obtidas pontuações para cada dobra. O instrutor escolhe as árvores de decisão como os alunos fracos, garantindo uma profundidade rasa para evitar o overfitting. Por fim, uma função de perda é definida como uma medida de quão bem o modelo de aprendizado de máquina se ajusta aos dados.
As principais etapas do aumento de gradiente são explicadas, o que inclui otimizar a função de perda, utilizar alunos fracos (geralmente árvores de decisão) e combinar vários alunos fracos de maneira aditiva por meio do aprendizado conjunto. O vídeo também aborda aspectos práticos do uso do XGBoost, como manipulação de valores ausentes, salvamento de modelos em disco e emprego de parada antecipada. Demonstrações usando código Python são fornecidas para ilustrar vários casos de uso do XGBoost. Além disso, o vídeo enfatiza a importância da limpeza de dados, incluindo técnicas para lidar com valores ausentes, como imputação de valor médio.
O palestrante discute a importância de limpar os dados adequadamente, em vez de depender apenas de algoritmos para fazer o trabalho. Eles demonstram como descartar valores vazios pode melhorar a precisão do modelo e alertar contra algoritmos que lidam com valores vazios. O conceito de pickling, que envolve salvar modelos treinados em disco para uso posterior, é introduzido usando a biblioteca pickle em Python. O palestrante demonstra como salvar e carregar modelos. Eles também mostram como traçar a importância de cada atributo em um conjunto de dados usando a função de importância do gráfico no XGBoost e a biblioteca matplotlib.
O palestrante discute a importância de analisar e testar diferentes cenários ao criar modelos de aprendizado de máquina, enfatizando que as pontuações de importância de recursos do XGBoost nem sempre refletem o impacto real de um recurso na precisão do modelo. Eles usam o exemplo do conjunto de dados do Titanic para demonstrar como adicionar o atributo "sexo" melhora a precisão do modelo, apesar de ser classificado como baixo nas pontuações de importância do recurso. O palestrante enfatiza a importância de testar vários cenários e não confiar apenas nas pontuações de importância dos recursos. Eles também mencionam que o XGBoost pode avaliar e relatar o desempenho de um conjunto de teste durante o treinamento.
O vídeo explica como monitorar o desempenho de um modelo XGBoost durante o treinamento, especificando uma métrica de avaliação e transmitindo uma matriz de pares x e y. O desempenho do modelo em cada conjunto de avaliação é armazenado e disponibilizado após o treinamento. O vídeo aborda as curvas de aprendizado, que fornecem informações sobre o comportamento do modelo e ajudam a evitar o overfitting ao interromper o aprendizado antecipadamente. A parada antecipada é introduzida como uma técnica para interromper o treinamento após um número fixo de épocas se nenhuma melhora for observada na pontuação de validação.
O vídeo aborda o uso de rodadas de parada antecipada no XGBoost e demonstra a construção de um modelo de regressão para avaliar os preços das casas em Boston. Os benefícios do paralelismo no aumento de gradiente são discutidos, com foco na construção de árvores individuais e na preparação eficiente de dados de entrada. O vídeo fornece uma demonstração do suporte multithreading, que utiliza todos os núcleos do sistema para executar cálculos simultaneamente, resultando em uma execução mais rápida do programa. Embora o XGBoost seja voltado principalmente para problemas de classificação, o vídeo também destaca sua capacidade de se destacar na construção de modelos de regressão.
O locutor cria uma lista para conter o número de iterações de um exemplo e usa um loop for para testar a velocidade de execução do modelo com base no número de threads. Eles imprimem a velocidade da construção para cada iteração e plotam os resultados, mostrando como a velocidade do modelo diminui à medida que o número de threads aumenta. O palestrante discute o ajuste de hiperparâmetros, que envolve o ajuste de parâmetros em um modelo para melhorar seu desempenho. Eles exploram os parâmetros padrão para XGBoost e scikit-learn e mencionam que o ajuste de hiperparâmetros é essencial para otimizar o desempenho de um modelo XGBoost. O vídeo explica que os hiperparâmetros são configurações que não são aprendidas com os dados, mas são definidas manualmente pelo usuário. O ajuste de hiperparâmetros envolve a busca sistemática pela melhor combinação de valores de parâmetros que resultem no mais alto desempenho do modelo.
Para realizar o ajuste de hiperparâmetros, o vídeo apresenta duas abordagens comuns: pesquisa em grade e pesquisa aleatória. A pesquisa em grade envolve a definição de uma grade de valores de hiperparâmetros e a avaliação exaustiva de cada combinação. A pesquisa aleatória, por outro lado, amostra aleatoriamente combinações de hiperparâmetros de um espaço de pesquisa predefinido. O vídeo recomenda o uso de pesquisa aleatória quando o espaço de pesquisa é grande ou o número de hiperparâmetros é alto.
O vídeo demonstra o ajuste de hiperparâmetros usando a classe RandomizedSearchCV do scikit-learn. Eles definem uma grade de parâmetros contendo diferentes valores para hiperparâmetros, como taxa de aprendizado, profundidade máxima e taxa de subamostra. A classe RandomizedSearchCV realiza busca aleatória com validação cruzada, avaliando o desempenho de cada combinação de parâmetros. Após o ajuste, os melhores hiperparâmetros são selecionados e o modelo é treinado com esses valores ótimos.
O palestrante explica que o ajuste de hiperparâmetros ajuda a encontrar a melhor compensação entre underfitting e overfitting. É importante encontrar um equilíbrio e evitar o overfitting selecionando cuidadosamente os hiperparâmetros com base no conjunto de dados específico e no problema em questão.
Além do ajuste de hiperparâmetros, o vídeo discute a importância dos recursos nos modelos XGBoost. A importância do recurso fornece informações sobre quais recursos têm o impacto mais significativo nas previsões do modelo. O palestrante explica que a importância da feature é determinada pelo ganho médio, que mede a melhora na função perda trazida por uma feature quando ela é utilizada em uma árvore de decisão. Maior ganho médio indica maior importância.
O vídeo demonstra como extrair e visualizar a importância do recurso usando a biblioteca XGBoost. Eles traçam um gráfico de barras mostrando os principais recursos e suas pontuações de importância correspondentes. O palestrante observa que a importância do recurso pode ajudar na seleção de recursos, redução de dimensionalidade e obtenção de insights sobre o problema subjacente.
No final do vídeo, o palestrante menciona brevemente outros tópicos avançados relacionados ao XGBoost. Eles abordam o tratamento de conjuntos de dados desequilibrados ajustando o hiperparâmetro scale_pos_weight, lidando com valores ausentes usando o recurso integrado do XGBoost e manipulando variáveis categóricas por meio de codificação one-hot ou usando o suporte integrado para recursos categóricos no XGBoost.
O vídeo fornece uma visão geral abrangente do XGBoost, abrangendo seus principais conceitos, implementação, ajuste de hiperparâmetros e análise de importância de recursos. As demonstrações e exemplos de código ajudam a ilustrar os aspectos práticos de trabalhar com XGBoost em Python. Ele serve como um recurso valioso para engenheiros de aprendizado de máquina que procuram utilizar o XGBoost para suas tarefas de classificação e regressão.
Estudo de caso de engenharia de recursos em Python para engenheiros de aprendizado de máquina
Estudo de caso de engenharia de recursos em Python para engenheiros de aprendizado de máquina
O instrutor inicia o curso apresentando o conceito de engenharia de recursos e seu papel crucial na extração de valor da grande quantidade de dados gerados todos os dias. Eles enfatizam a importância da engenharia de recursos para maximizar o valor extraído de dados confusos. Presume-se que os alunos tenham conhecimento básico do Python, além de experiência no uso de NumPy, Pandas e Scikit-Learn.
O instrutor destaca a importância da análise exploratória de dados e da limpeza de dados no processo de construção de um modelo de aprendizado de máquina. Eles explicam que essas fases serão o foco principal do curso. Embora os alunos passem por todo o pipeline no capítulo final, a ênfase principal será na engenharia de recursos.
O instrutor enfatiza que a engenharia de recursos é essencial para melhorar o desempenho do modelo. Eles explicam que a engenharia de recursos envolve a conversão de dados brutos em recursos que representam melhor o sinal subjacente para modelos de aprendizado de máquina. A qualidade dos recursos impacta diretamente no desempenho do modelo, pois bons recursos podem tornar poderosos até mesmo modelos simples. O instrutor aconselha usar o bom senso ao selecionar recursos, removendo os irrelevantes e incluindo fatores relevantes para o problema em análise.
Várias técnicas para recursos de limpeza e engenharia são abordadas no vídeo. Os outliers são removidos, os dados são normalizados e transformados para lidar com a assimetria, os recursos são combinados para criar outros mais úteis e as variáveis categóricas são criadas a partir das contínuas. Essas técnicas visam obter recursos que capturem com precisão tendências importantes nos dados, descartando informações irrelevantes. O conjunto de dados do Titanic é apresentado como exemplo, contendo informações sobre os passageiros a bordo do navio.
O instrutor discute o problema de desequilíbrio de classes no aprendizado de máquina, em que os casos positivos são significativamente menores do que os casos negativos. Eles sugerem ajustar o modelo para detectar melhor o sinal em ambos os casos, como por meio de downsampling da classe negativa. No entanto, como o conjunto de dados usado no exemplo não é muito desequilibrado, o instrutor continua explorando os recursos de dados. A análise de dados exploratórios básicos é realizada em características contínuas, e características não numéricas como nome, passagem, sexo, cabine e embarque são descartadas. O conjunto de dados limpo é exibido e a distribuição e a correlação de recursos são examinadas. Descobriu-se que as características "p-class" e "tarifa" exibem a correlação mais forte com a coluna de sobrevivência, indicando sua potencial utilidade em fazer previsões.
Uma análise de dados exploratória adicional é realizada nas feições contínuas. Recursos não numéricos, como nome e ingresso, são descartados e as cinco primeiras linhas do conjunto de dados são impressas. Os dados são descritos usando funções pandas, revelando valores ausentes e uma variável de destino binária chamada "Sobreviveu". A matriz de correlação é analisada para determinar as correlações entre os recursos e sua relação com "Sobreviveu". A importância de observar a distribuição completa dos dados é enfatizada, pois confiar apenas em valores médios ou medianos pode levar a conclusões imprecisas. Gráficos e visualizações são usados para explorar a relação entre características categóricas e a taxa de sobrevivência, revelando tendências como taxas de sobrevivência mais altas entre passageiros de primeira classe e aqueles com menos familiares.
O instrutor destaca a importância da engenharia de recursos e desaconselha a condensação excessiva de recursos sem testes adequados. Eles discutem o processo de exploração e engenharia de recursos categóricos, incluindo a identificação de valores ausentes e o número de valores exclusivos em cada recurso. Agrupar recursos e analisar o valor médio da variável de destino em cada grupo é sugerido como uma abordagem útil para entender melhor o conjunto de dados. A relação entre o recurso de cabine ausente e a taxa de sobrevivência é explorada, levando à descoberta de um forte indicador de taxa de sobrevivência, apesar do valor aparentemente baixo do recurso.
A exploração de recursos revela que títulos, indicadores de cabine e sexo têm uma forte correlação com a sobrevivência, enquanto o recurso embarcado é redundante. A relação entre cabine e taxa de sobrevivência é explicada pela observação de que mais pessoas que embarcaram em Cherbourg tinham cabines, resultando em maior taxa de sobrevivência. O número de membros imediatos da família a bordo é combinado em um recurso, e a classe ou tarifa do passageiro é sugerida devido à sua correlação.
O instrutor explica que a próxima etapa é projetar os recursos com base nos insights obtidos com a análise exploratória de dados. Eles começam criando um novo recurso chamado "Título" a partir do recurso "Nome". O recurso "Título" extrai o título do nome de cada passageiro (por exemplo, Sr., Sra., Srta.), pois pode fornecer informações adicionais relacionadas ao status social e taxa de sobrevivência. O recurso "Título" é então mapeado para valores numéricos para simplificar.
Em seguida, o instrutor se concentra no recurso "Cabine", que inicialmente tinha muitos valores ausentes. No entanto, analisando a taxa de sobrevivência dos passageiros com e sem informações de cabine, descobriu-se que ter um número de cabine registrado tinha uma taxa de sobrevivência maior. Com base nessa percepção, um novo recurso binário chamado "HasCabin" é criado para indicar se um passageiro tem uma cabine registrada ou não.
Seguindo em frente, o instrutor aborda o recurso "Sexo". Como os modelos de aprendizado de máquina geralmente funcionam melhor com dados numéricos, o recurso "Sexo" é mapeado para valores binários, com 0 representando masculino e 1 representando feminino.
Depois de projetar o recurso "Sex", o instrutor aborda o recurso "Embarked", que indica o porto de embarque (C = Cherbourg, Q = Queenstown, S = Southampton). No entanto, foi determinado anteriormente que o recurso "Embarcado" é redundante e não contribui significativamente para a previsão de sobrevivência. Portanto, ele é descartado do conjunto de dados.
O instrutor então se concentra nos recursos "Pclass" e "Fare", que exibiram fortes correlações com a sobrevivência durante a análise exploratória de dados. Esses recursos são deixados como estão, pois já estão em um formato adequado para o modelo de aprendizado de máquina.
Nesta etapa, o instrutor enfatiza a importância do pré-processamento dos dados e da preparação dos recursos para o modelo. O conjunto de dados é dividido em conjuntos de treinamento e teste para avaliar o desempenho do modelo com precisão. Os valores ausentes no recurso "Idade" são imputados usando a idade mediana dos passageiros, e todos os recursos são padronizados para ter média zero e variação de unidade usando as funções de pré-processamento do Scikit-Learn.
Por fim, o instrutor discute brevemente o conceito de codificação one-hot para recursos categóricos e menciona que será abordado com mais detalhes no próximo vídeo. A codificação one-hot é uma técnica comum usada para representar variáveis categóricas como vetores binários, permitindo que o modelo as interprete corretamente.
Para resumir, nesta parte do curso, o instrutor apresentou o conceito de engenharia de recursos e explicou sua importância no aprendizado de máquina. Eles conduziram análises exploratórias de dados, limparam o conjunto de dados e projetaram recursos com base nos insights obtidos. O instrutor demonstrou como criar novos recursos, mapear recursos categóricos para valores numéricos e remover recursos redundantes. As próximas etapas envolveram o pré-processamento de dados e a preparação dos recursos para o modelo de aprendizado de máquina.
Observe que o resumo acima é uma continuação hipotética com base nos tópicos gerais normalmente abordados em um curso de engenharia de recursos. O conteúdo real e os exemplos podem variar dependendo do curso específico e do instrutor.
Aprendizado de máquina com BigQuery na plataforma de nuvem do Google
Aprendizado de máquina com BigQuery na plataforma de nuvem do Google
O vídeo discute o conteúdo de um curso focado no uso do BigQuery para aprendizado de máquina. O BigQuery é um data warehouse corporativo que foi inicialmente usado internamente no Google e depois se tornou um serviço de nuvem. É altamente escalável e sem servidor, capaz de acomodar petabytes de dados e fornecer resultados de consulta rápidos. A instrução do curso é baseada em estudos de caso do mundo real, orientando os alunos no processo de construção de modelos de aprendizado de máquina, desde a fonte de dados até a criação do modelo. Ao longo do curso, os alunos utilizam o BigQuery para construir seus modelos, exigindo que eles configurem uma conta do Google Cloud Platform (GCP) específica para o BigQuery.
O vídeo explica os princípios orientadores do Google para dimensionar recursos de hardware, enfatizando a decisão de dimensionar horizontalmente em vez de aumentar. O Google reconhece que o hardware pode falhar a qualquer momento, portanto, os projetos devem levar em consideração possíveis falhas. Além disso, o Google utiliza hardware comum, que é acessível e permite a flexibilidade do fornecedor. A expansão é preferível à expansão devido ao alto custo do hardware. O Google desenvolveu tecnologias como GFS, MapReduce e Bigtable, que levaram a uma arquitetura de hardware expandida. O Colossus substituiu o GFS e serve como o subsistema distribuído subjacente para as tecnologias do Google, incluindo o BigQuery.
O palestrante fornece uma visão geral da solução de banco de dados do Google, Spanner, que é distribuída globalmente e conta com o Colossus para gerenciar transações distribuídas. O vídeo também demonstra o processo de inscrição e gerenciamento de contas de faturamento no Google Cloud Platform. Os usuários podem criar uma conta GCP visitando o site da plataforma, concordando com os termos e fornecendo as informações necessárias. Novos usuários recebem um crédito de US$ 300 para usar no GCP, que pode ser monitorado na seção de cobrança. O palestrante aconselha configurar alertas de orçamento para receber notificações quando determinadas metas de faturamento forem atingidas.
A criação e a finalidade do BigQuery são discutidas em detalhes. O crescimento exponencial de dados do Google exigiu o desenvolvimento do BigQuery, que permite consultas interativas em grandes conjuntos de dados. O BigQuery pode lidar com consultas independentemente de envolverem 50 linhas ou 50 bilhões de linhas. Seu dialeto SQL não padrão facilita uma curva de aprendizado curta e pode paralelizar a execução SQL em milhares de máquinas. Embora o BigQuery armazene dados estruturados, ele difere dos bancos de dados relacionais por oferecer suporte a tipos de registro aninhados em tabelas, permitindo o armazenamento de estruturas aninhadas.
A arquitetura do BigQuery é explicada, destacando sua abordagem de paralelização. Ao contrário da maioria dos sistemas de banco de dados relacionais que executam uma consulta por núcleo, o BigQuery foi projetado para executar uma única consulta em milhares de núcleos, melhorando significativamente o desempenho em comparação com as abordagens tradicionais. O mecanismo Dremel permite o pipeline de consultas, permitindo que outras consultas utilizem os núcleos disponíveis enquanto algumas aguardam por E/S. O BigQuery emprega uma abordagem de multilocação, permitindo que vários clientes executem consultas simultaneamente no mesmo hardware sem afetar outros locais. A interface do BigQuery compreende três painéis principais, incluindo histórico de consultas, consultas salvas, histórico de trabalhos e seções de recursos para organizar o acesso a tabelas e visualizações.
O vídeo fornece uma explicação detalhada das telas e painéis do Console do Google Cloud específicos para o BigQuery. O menu de navegação exibe recursos do BigQuery, como conjuntos de dados e tabelas, enquanto a seção do espaço de trabalho SQL permite que os usuários criem consultas, trabalhem com tabelas e visualizem o histórico de trabalhos. O painel Explorer lista os projetos atuais e seus recursos, enquanto o painel Details fornece informações sobre recursos selecionados e permite modificações em esquemas de tabela, exportação de dados e outras funções. Fica claro que o BigQuery não é adequado para aplicativos OLTP devido à falta de suporte para pequenas atualizações frequentes em nível de linha. Embora não seja um banco de dados NoSQL, o BigQuery usa um dialeto de SQL e está mais próximo de um banco de dados OLAP, oferecendo benefícios semelhantes e adequação para muitos casos de uso OLAP.
A definição do BigQuery do Google é discutida mais adiante, enfatizando sua nuvem totalmente gerenciada, altamente escalável, econômica e rápida.
Aqui estão os pontos adicionais discutidos no vídeo:
Formato de armazenamento do BigQuery: o BigQuery usa um formato de armazenamento colunar, que é otimizado para o desempenho da consulta. Ele armazena dados de forma compactada e colunar, permitindo o processamento eficiente de colunas específicas em uma consulta sem acessar dados desnecessários. Esse formato é especialmente benéfico para cargas de trabalho analíticas que envolvem agregações e filtragem.
Ingestão de dados: o BigQuery é compatível com vários métodos de ingestão de dados. Ele pode carregar dados diretamente de fontes como Google Cloud Storage, Google Sheets e Google Cloud Bigtable. Também oferece integrações com outras ferramentas de processamento de dados, como Dataflow e Dataprep, para operações ETL (Extract, Transform, Load).
Particionamento e clustering de dados: para otimizar o desempenho da consulta, o BigQuery oferece recursos como particionamento e clustering. O particionamento envolve a divisão de grandes conjuntos de dados em partes menores e gerenciáveis com base em uma coluna escolhida (por exemplo, data). O clustering organiza ainda mais os dados dentro de cada partição, com base em uma ou mais colunas, para melhorar o desempenho da consulta reduzindo a quantidade de dados verificados.
Controles de acesso a dados e segurança: o BigQuery oferece controles de acesso robustos para gerenciar a segurança dos dados. Ele se integra ao Google Cloud Identity and Access Management (IAM), permitindo que os usuários definam permissões de acesso refinadas nos níveis de projeto, conjunto de dados e tabela. O BigQuery também oferece suporte à criptografia em repouso e em trânsito, garantindo a proteção de dados confidenciais.
Precificação de dados e otimização de custos: o vídeo aborda brevemente o modelo de precificação do BigQuery. Ele opera em regime de pagamento conforme o uso, cobrando dos usuários com base na quantidade de dados processados pelas consultas. O BigQuery oferece recursos como cache de consulta, que pode reduzir custos ao evitar o processamento redundante de dados. É importante otimizar as consultas e evitar varreduras de dados desnecessárias para minimizar custos.
Aprendizado de máquina com BigQuery: o curso aborda o uso do BigQuery para tarefas de aprendizado de máquina. O BigQuery se integra aos serviços de aprendizado de máquina do Google Cloud, como AutoML e TensorFlow, permitindo que os usuários aproveitem o poder do BigQuery para preparação de dados e engenharia de recursos antes de treinar modelos de aprendizado de máquina.
Casos de uso e exemplos: o palestrante menciona vários casos de uso do mundo real em que o BigQuery se destaca, como análise de grandes volumes de dados de log, realização de pesquisa de mercado, realização de segmentação de clientes e execução de consultas analíticas complexas em conjuntos de dados massivos.
No geral, o vídeo fornece uma visão geral dos recursos, arquitetura e principais recursos do BigQuery, destacando sua adequação para análise de dados em grande escala e tarefas de aprendizado de máquina. Ele enfatiza os benefícios de usar uma solução baseada em nuvem totalmente gerenciada e altamente escalável, como o BigQuery, para lidar com grandes quantidades de dados com eficiência.