[PYTHON] GBDT-Bibliothek: Ich habe mit CatBoost versucht, den Kraftstoffverbrauch vorherzusagen (zurück)

Ich kannte CatBoost nicht, das manchmal zusammen mit XGBoost und lightGBM verwendet wird, bei denen es sich um GBDT-Bibliotheken (Gradient Boosting Decision Trees) handelt, und habe daher versucht, es mit einer Regressionsaufgabe zu verschieben. Es war.

CatBoost?

Ich werde den Einführungstext der offiziellen Website einfügen. (Google Übersetzung)

CatBoost ist ein Algorithmus zur Erhöhung des Gradienten für Entscheidungsbäume.
Entwickelt von Yandex-Forschern und Ingenieuren
Es wird für Such-, Empfehlungssysteme, persönliche Assistenten, selbstfahrende Autos, Wettervorhersagen und viele andere Aufgaben wie Yandex, CERN, Cloudflare, Careem-Taxi verwendet.

Artikel, die ich als Referenz verwendet habe

Der diesmal verwendete Datensatz

Inhalt

Der folgende Code wurde in Google Colab ausgeführt. (ZENTRALPROZESSOR)

Installieren Sie CatBoost mit Pip

!pip install catboost -U

Datensatz herunterladen

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)

Datenvorverarbeitung

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)

#Dieses Mal ist der Zweck, sich zu bewegen, damit Nan fällt
dataset = dataset.dropna().reset_index(drop=True)

#Kategorievariable:Origin wird von Cat Boost verwaltet. Machen Sie es also zu einem String-Typ
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')

Bereiten Sie einen Datensatz für CatBoost vor

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))
)

Lernen

model = CatBoostRegressor(iterations=2000, learning_rate=0.05, depth=5)
model.fit(train_pool)

Die obigen Parameter sind die Werte wie im Referenzartikel. Das Lernen endete übrigens mit "total: 4,3 s".

Inferenz- / Ergebnisdiagramm

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()

Im Diagramm ist das Ergebnis wie folgt. catboost_result.png

Impressionen etc.

――Dieses Mal habe ich den Referenzartikel fast so verschoben, wie er ist, aber ich bin froh, dass ich die grobe Verwendung in der Regression verstanden habe.

Recommended Posts

GBDT-Bibliothek: Ich habe mit CatBoost versucht, den Kraftstoffverbrauch vorherzusagen (zurück)
Ich habe eine multiple Regressionsanalyse mit Polypoly-Regression versucht
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, mit PyCaret zu clustern
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe gRPC mit Python ausprobiert
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, Sätze mit summpy zusammenzufassen
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Essen mit SinGAN zu bewegen
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Ich habe versucht, das Gesicht mit MTCNN zu erkennen
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, Sätze mit GPT-2 zu generieren
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Sinuswellenvorhersage (Rückkehr) mit Pytorch
(Maschinelles Lernen) Ich habe versucht, die Bayes'sche lineare Regression bei der Implementierung sorgfältig zu verstehen
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Ich habe versucht, eine SMS mit Twilio zu senden
Ich habe versucht, Amazon SQS mit Django-Sellerie zu verwenden
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, Selen mit Headless-Chrom zu verwenden
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Ich habe versucht, mit Kaggles Titanic (kaggle②) zu lernen.
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, mit Python ② (Fibonacci-Zahlenfolge) aufzuklären.
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe mit Jupyter eine einfache Bilderkennung versucht
Ich habe versucht, CNN mit Resnet fein abzustimmen
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich habe versucht, mit der Bibliothek GiNZA zur Verarbeitung natürlicher Sprache eindeutige Ausdrücke zu extrahieren
Ich habe Hello World mit 64-Bit-OS + C-Sprache ohne Verwendung einer Bibliothek ausprobiert
Ich habe versucht, Cifar10 mit der SONY Deep Learning Library NNabla [Nippon Hurra] zu implementieren.