Algoritmos passivo-agressivos online

Algoritmos de machine learning já dominam nosso cotidiano, alimentando plataformas de streaming, chatbots inteligentes como Gemini e ChatGPT, entre muitas outras aplicações.
A maioria dos algoritmos de machine learning aprende através do aprendizado em lote tradicional. Neste modo, todo o conjunto de dados está disponível no início do treinamento. O conjunto é processado simultaneamente para gerar um modelo preditivo. No entanto, em muitos cenários reais, como redes sociais e dispositivos IoT, novos pontos de dados chegam continuamente. Esse fluxo contínuo de dados torna imperativo o uso de modelos de machine learning que podem ser atualizados em tempo real. Nestes casos, podemos usar algoritmos online.
O aprendizado de máquina online representa um paradigma distinto no qual os dados são processados sequencialmente, uma instância de cada vez. Entre os algoritmos online disponíveis estão os passivo-agressivos.
Algoritmos passivo-agressivos online referem-se a modelos de machine learning projetados para tarefas de previsão em linha, onde os dados chegam de forma incremental, um por um. Essa forma de aprendizado difere dos ambientes tradicionais de aprendizado offline, onde o conjunto completo de dados está disponível antes do início do treinamento.
Aprendizado online para aplicações modernas
O surgimento do “big data” impulsionou significativamente a necessidade do aprendizado online. Os conjuntos de dados em aplicativos modernos geralmente são imensos demais para serem carregados inteiramente na memória dos computadores ou treinados em um único lote. Eles exigem o uso de algoritmos que podem processar dados de forma incremental. Portanto, o design dos algoritmos online supera as restrições computacionais e de memória que podem ocorrer com algoritmos tradicionais.
Algoritmos online são particularmente adequados para grandes conjuntos de dados de streaming. Nesses ambientes, os modelos devem se adaptar dinamicamente a novas informações conforme elas se tornam disponíveis. A mudança contínua de um modelo permite que ele permaneça relevante e eficaz em ambientes onde as características dos dados não são fixas. Desta forma, os algoritmos online proporcionam uma vantagem crítica para sistemas que exigem respostas rápidas a novas informações.
Algoritmos passivo-agressivos (PA)
Os algoritmos passivo-agressivos (PA) representam um tipo distinto de algoritmo de aprendizado online. Eles são utilizados principalmente para tarefas de classificação, mas também podem ser usados para regressão.
O nome passivo-agressivo se refere à filosofia de atualização destes algoritmos, a qual determina como o modelo ajusta seus parâmetros em resposta às instâncias de dados de entrada. A filosofia passivo-agressiva é um mecanismo central para alcançar a eficiência. Ela concentra o esforço computacional do algoritmo somente em instâncias problemáticas, garantindo que os ajustes de um modelo sejam direcionados. Essa atualização orientada por erros é uma escolha deliberada de design para reduzir custos computacionais. Portanto, uma marca registrada dos algoritmos de PA é a sua eficiência computacional.
Como os algoritmos online se tornam passivo-agressivo?
Algoritmos passivo-agressivos convergem através de uma estratégia única. Eles exibem comportamento passivo quando um exemplo de treinamento atual é classificado corretamente. Nesses casos, o algoritmo não faz alterações em seus pesos, indicando que o ponto de dados atual não fornece novas informações que justifiquem um ajuste no modelo existente. Essa abordagem conserva recursos computacionais, evitando atualizações desnecessárias.
Os algoritmos PA se tornam agressivos quando um erro é cometido ao classificar um exemplo. Nestes casos, o algoritmo atualiza os parâmetros do modelo para corrigir o erro.
Margem e parâmetro de regularização
Um conceito-chave nos classificadores de PA é a margem, que quantifica a confiança em uma previsão. O algoritmo visa maximizar essa margem para previsões corretamente classificadas, garantindo uma separação clara entre as classes. No entanto, a natureza agressiva do algoritmo PA básico, que força a perda zero em todas as instâncias classificadas incorretamente, pode ser problemática na presença de ruído ou ao lidar com dados não separáveis (overlap). Para mitigar esse problema, duas variantes do PA sao mais comumente usadas: PA-I e PA-II. Essas variantes incorporam uma variável de folga não negativa ξ e um parâmetro de regularização C, para obter uma resposta mais controlada aos erros.
O parâmetro C é fundamental para controlar o trade-off entre maximizar a dimensão da margem e minimizar o número de classificações incorretas. C geralmente funciona como um tamanho máximo de etapa para atualizações. Um valor mais alto de C normalmente resulta em uma atualização mais agressiva, permitindo que o modelo responda mais fortemente aos erros.
Aplicações principais dos algoritmos passivo-agressivos online
Os algoritmos passivo-agressivos são altamente eficazes em cenários envolvendo grandes conjuntos de dados em fluxo, onde a adaptação em tempo real é essencial. Algumas de suas principais aplicações incluem:
- Filtros de spam
- Análise de sentimento
- Detecção de notícias falsas
- Detecção de transações financeiras fraudulentas
- Previsão de clique de anúncios
- Sistemas de recomendação
- Auxilio no diagnóstico médico
Algoritmos passivo-agressivos online em código com scikit-learn
Para aproveitar todo o poder dos algoritmos passivo-agressivos de forma simples e eficiente, a melhor maneira é utilizar as implementações disponíveis através da biblioteca scikit-learn. Ela conta com PA-I e PA-II para tarefas de classificação e regressão. Para ilustrar como você pode usá-la facilmente, faremos um código demonstrativo. Primeiro, num código Python, importamos as classes que usaremos:
from sklearn.datasets import load_iris
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.metrics import classification_report, accuracy_score
from sklearn.model_selection import train_test_split
Em seguida, abrimos o conjunto de dados iris para ilustrar o uso do algoritmo PA e o separamos em conjunto de treinamento e teste:
# Carrega dados
dataset = load_iris()
X = dataset.data
y = dataset.target
# Divide o conjunto de dados da íris em conjuntos de treinamento e teste
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size = 0.1)
Depois, fazemos o treinamento:
# Cria modelo
cl = PassiveAggressiveClassifier(C = 0.5)
# Treina modelo
cl.fit(X_treino, y_treino)
Para selecionar PA-I ou PA-II, basta mudar a perda usada no modelo (não precisa inserir isso no seu código):
clf1 = PassiveAggressiveClassifier(loss='hinge') # PA-I
clf2 = PassiveAggressiveClassifier(loss='squared_hinge') # PA-II
Por fim, testamos o modelo treinado:
# Realiza previsão no conjunto de teste
teste_pred = cl.predict(X_teste)
# Avaliação do modelo
print(f'Precisão do conjunto de teste: {accuracy_score(y_teste, teste_pred) * 100}%')
Obtivemos acurácia de 96.334%, mas ela pode variar um pouco devido à estocasticidade da implementação.
Conclusões
Os algoritmos passivo-agressivos online representam uma classe robusta e eficiente de modelos de machine learning. Eles são ideias para enfrentar os desafios dos ambientes de dados modernos caracterizados por alto volume, velocidade e variabilidade. Sua natureza passivo-agressiva, que atualiza o modelo apenas quando ele erra, concentra os recursos onde eles são mais necessários e garante uma implementação computacionalmente econômica.