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.
Der folgende Code wurde in Google Colab ausgeführt. (ZENTRALPROZESSOR)
!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)
#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')
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)
Die obigen Parameter sind die Werte wie im Referenzartikel. Das Lernen endete übrigens mit "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()
Im Diagramm ist das Ergebnis wie folgt.
――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