CatBoost - Categorical Boosting da Yandex
CatBoost é um algoritmo e biblioteca de código aberto de alto desempenho para aumento (boosting) de gradiente em árvores de decisão. Lançado em 2017, o algoritmo ganhou popularidade na comunidade de machine learning devido à sua eficiência, precisão e facilidade de uso. Ele é utilizado, por exemplo, pela JetBrains para completar códigos e pela Cloudflare para detecção de bots.
CatBoost pode ser usado para tarefas de classificação e regressão e possui um número grande de recursos independentes. Projetado pela Yandex, esse algoritmo é empregado em pesquisas, sistemas de recomendação, assistentes pessoais, carros autônomos, previsão do tempo e muitas outras tarefas.
Em termos de permissões de uso, CatBoost é de código aberto, pode ser usado por qualquer pessoa e tem licença Apache 2.0. Ou seja, CatBoost é um algoritmo importante para você ter na sua caixa de ferramentas. Adicionalmente, de acordo com pesquisas do Kaggle de 2020 e 2022, cerca de 60% dos cientistas de dados usam algoritmos de boosting (XGBoost, CatBoost, LightGBM, AdaBoost) regularmente. Ou seja, nao faltam razões para você conhecer o CatBoost. Por isso, ele será o tema deste post.
Árvores de decisão simétricas
Tecnicamente, o algoritmo Catboost é uma variante dos algoritmos de boosting. Portanto, ele pertence às técnicas de aprendizado em conjunto.
Ele utiliza uma combinação de boosting ordenado, permutações aleatórias e otimização baseada em gradiente para obter alto desempenho em conjuntos de dados grandes e complexos. Porém, ele se diferencia de outros algoritmos de boosting, como XGBoost e LightGBM, porque cria árvores de decisão simétricas. Isso significa que, em cada etapa, o mesmo par de divisão de recursos que resulta na menor perda é escolhido e aplicado a todos os nós nesse nível.
Outra particularidade reside no fato do CatBoost treinar o modelo em um subconjunto de dados enquanto calcula os resíduos em outro.
A arquitetura balanceada do CatBoost tem várias vantagens. Em termos computacionais, ela permite a implementação eficiente em CPUs e GPUs e reduz o tempo de previsão. A arquitetura simétrica também atua como uma forma de regularização para evitar o sobreajuste (overfitting).
Processamento automático de recursos categóricos
Um dos recursos mais interessantes do CatBoost é a sua capacidade de lidar automaticamente com recursos categóricos. Ou seja, ele converte recursos categóricos em recursos numéricos automaticamente, economizando tempo e esforço na preparação de dados. Portanto, ele não requer nenhuma técnica de codificação de recursos, como One-Hot Encoder ou Label Encoder.
Alto desempenho livre de ajuste intensivo de parâmetros e sem overfitting
O CatBoost consegue obter resultados de alta qualidade com parâmetros padrão. Portanto, sua implementação evita a necessidade de ajustes extensivos do modelo.
Outra grande vantagem do algoritmo é a presença de um detector de overfitting. Ele interrompe o treinamento do modelo quando percebe antes do sobreajuste se instalar. Esse recurso ajuda a melhorar o desempenho de generalização do modelo e torná-lo mais robusto para novos dados.
Interpretabilidade
Interpretabilidade é um problema comum em algoritmos de machine learning. Para superar essa limitação, a biblioteca do CatBoost fornece várias ferramentas para interpretação. Essas ferramentas auxiliam os desenvolvedores a entender o comportamento do modelo e tomar decisões informadas sobre os dados.
CatBoost em Código
Para ilustrar como usar CatBoost em código, usaremos a biblioteca em combinação com Scikit-learn. Para instalar CatBoost, o comando com pip e conda são mostrados abaixo:
# com pip
pip install catboost
# com conda
conda install conda-forge::catboost
Em código, o uso de CatBoost pode ser feito de maneira equivalente a outros algoritmos de boosting como AdaBoost. Usaremos o mesmo exemplo mostrado aqui para o Adaboost. Você pode consultar mais exemplos aqui.
No nosso exemplo, realizamos a classificação do conjunto de dados iris com CatBoost como classificador. O código inteiro é mostrado abaixo:
import pandas as pd
from catboost import CatBoostClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Correga os dados
iris = load_iris()
# separa atributos e classes
X = iris.data
y = iris.target
# Divide os dados
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Cria o classificador
clf = CatBoostClassifier()
# Treina o modelo
clf.fit(X_train, y_train)
# Realiza predições no conjunto de teste
y_pred = clf.predict(X_test)
# Verifica acurácia
accuracy = accuracy_score(y_test, y_pred)
print("Acurácia:", round(accuracy*100, 3), "%")
# Acurácia: 96.667 %
Pela acurácia obtida com esse código simples, fica claro que CatBoost é um excelente algoritmo. Para conhecer melhor sobre ele, consulte a documentação oficial.
Veja também:
O que é machine learning (aprendizado de máquina)?
Como machine learning (aprendizado de máquina) funciona?
Como machine learning (aprendizado de máquina) aprende?
Como implementar um modelo de machine learning?
Como escolher um bom modelo de machine learning?
Classificação e regressão em machine learning
O que é conjunto de dados (dataset) em machine learning?
Onde conseguir conjuntos de dados para machine learning?
Salve localmente conjuntos de dados para machine learning
Pré-processamento de dados em machine learning
Regressão Linear e Machine Learning
Conjuntos de treinamento e teste em machine learning
Função de perda em machine learning
Scikit-learn para machine learning
Matrizes de Confusão em Machine Learning
Floresta aleatória com Scikit-learn
Detecção de anomalias com Isolation Forest
Máquinas de vetores de suporte (SVMs)
Encontrou algum erro ou quer fazer uma sugestão? Por favor, entre em contato usando nosso formulário de contatos.