Je ne connaissais pas CatBoost, qui est parfois utilisé avec XGBoost et lightGBM, qui sont des bibliothèques GBDT (Gradient Boosting Decision Trees), jusqu'à récemment, alors j'ai essayé de le déplacer avec une tâche de régression. C'était.
CatBoost?
Je vais coller le texte d'introduction du site officiel. (Google Traduction)
CatBoost est un algorithme d'amplification de gradient pour les arbres de décision.
Développé par des chercheurs et ingénieurs Yandex
Il est utilisé pour la recherche, les systèmes de recommandation, les assistants personnels, les voitures autonomes, les prévisions météorologiques et de nombreuses autres tâches telles que Yandex, CERN, Cloudflare, Careem taxi.
--Ensemble de données MPG automatique -Ceci est l'ensemble de données utilisé dans TensorFlow Tutorials. ―― Prévoyez la consommation de carburant de la voiture. Les variables explicatives comprennent le nombre de cylindres, le volume d'échappement, la puissance, le poids, etc.
Le code suivant a fonctionné sur Google Colab. (CPU)
!pip install catboost -U
import urllib.request
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data'
file_path = './auto-mpg.data'
urllib.request.urlretrieve(url, file_path)
import pandas as pd
column_names = ['MPG','Cylinders','Displacement','Horsepower','Weight',
'Acceleration', 'Model Year', 'Origin']
dataset = pd.read_csv(file_path, names=column_names,
na_values = "?", comment='\t',
sep=" ", skipinitialspace=True)
#Cette fois le but est de bouger, donc nan va tomber
dataset = dataset.dropna().reset_index(drop=True)
#Variable de catégorie:L'origine est gérée par Cat Boost, alors faites-en un type String
dataset['Origin'] = dataset['Origin'].astype(str)
train_dataset = dataset.sample(frac=0.8,random_state=0)
test_dataset = dataset.drop(train_dataset.index)
train_labels = train_dataset.pop('MPG')
test_labels = test_dataset.pop('MPG')
import numpy as np
from catboost import CatBoostRegressor, FeaturesData, Pool
def split_features(df):
cfc = []
nfc = []
for column in df:
if column == 'Origin':
cfc.append(column)
else:
nfc.append(column)
return df[cfc], df[nfc]
cat_train, num_train = split_features(train_dataset)
cat_test, num_test = split_features(test_dataset)
train_pool = Pool(
data = FeaturesData(num_feature_data = np.array(num_train.values, dtype=np.float32),
cat_feature_data = np.array(cat_train.values, dtype=object),
num_feature_names = list(num_train.columns.values),
cat_feature_names = list(cat_train.columns.values)),
label = np.array(train_labels, dtype=np.float32)
)
test_pool = Pool(
data = FeaturesData(num_feature_data = np.array(num_test.values, dtype=np.float32),
cat_feature_data = np.array(cat_test.values, dtype=object),
num_feature_names = list(num_test.columns.values),
cat_feature_names = list(cat_test.columns.values))
)
model = CatBoostRegressor(iterations=2000, learning_rate=0.05, depth=5)
model.fit(train_pool)
Les paramètres ci-dessus sont les valeurs telles qu'elles figurent dans l'article de référence. À propos, l'apprentissage s'est terminé avec «total: 4,3 s».
import matplotlib.pyplot as plt
preds = model.predict(test_pool)
xs = list(range(len(test_labels)))
plt.plot(xs, test_labels.values, color = 'r')
plt.plot(xs, preds, color = 'k');
plt.legend(['Target', 'Prediction'], loc = 'upper left');
plt.show()
Lorsqu'il est tracé, le résultat est le suivant.
Cette fois, je viens de déplacer l'article de référence presque tel quel, mais je suis heureux d'avoir compris l'utilisation approximative de la régression.
Recommended Posts