Ich arbeite mit einem Datensatz mit einer großen Anzahl von kategorialen Merkmalen (> 80%), die eine kontinuierliche Zielvariable (dh Regression) vorhersagen. Ich habe ziemlich viel darüber gelesen, wie man mit kategorialen Merkmalen umgeht. Und erfuhr , dass One-Hot - Codierung ich in Vergangenheit verwendet habe vor allem sehr schlechte Idee ist , wenn es darum geht, eine Menge kategorischer Funktionen mit vielen Ebenen (lesen Sie diese Post , und dies ).
Während ich auf Methoden wie die zielbasierte Codierung (Glättung) von kategorialen Features gestoßen bin, die häufig auf dem Mittelwert der Zielwerte für jedes Feature basieren, möglicherweise diesen Beitrag / Kernel in Kaggle. Trotzdem kämpfe ich darum, einen konkreteren Weg zu finden, bis ich CatBoost als Open-Source-Gradienten für Entscheidungsbäume fand, die letztes Jahr von der Yandex-Gruppe veröffentlicht wurden. Sie scheinen zusätzliche statistische Zähloptionen für kategoriale Funktionen zu bieten, die wahrscheinlich viel effizienter sind als die einfache One-Hot-Codierung oder Glättung.
Das Problem ist, dass die Dokumentation nicht hilfreich ist, um CTR-Einstellungen festzulegen . Ich habe verschiedene Wege ausprobiert, aber es funktioniert einfach nicht. Das Dokument sagt CTR-Einstellung als simple_ctr , angegeben als ( Abschnitt CTR-Einstellung ):
['CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
'CtrType[:TargetBorderCount=BorderCount][:TargetBorderType=BorderType][:CtrBorderCount=Count][:CtrBorderType=Type][:Prior=num_1/denum_1]..[:Prior=num_N/denum_N]',
...]
Hier ist ein super einfaches Beispiel, die Daten sehen so aus:
import pandas as pd
import catboost
data = [{'profit': '342','country': 'holland','account': 'Jones LLC', 'saving': 150, 'debt': -60, 'age': 28},
{'profit': '875','country': 'germany','account': 'Alpha Co', 'saving': 200, 'debt': -10, 'age': 42},
{'profit': '127','country': 'italy','account': 'Blue Inc', 'saving': 50, 'debt': -300, 'age': 38 }]
df = pd.DataFrame(data)
Hier ist ein einfacher Catboost-Regressor:
X_train = df.drop(['profit'],axis=1)
Y_train = df['profit']
categorical_features_indices = [0,2]
train_pool = catboost.Pool(X_train, Y_train, cat_features=categorical_features_indices)
model = catboost.CatBoostRegressor(
depth=3,
iterations=5,
eval_metric='RMSE',
simple_ctr=None)
model.fit(train_pool);
Das simple_ctr , eine der CTR-Einstellungen, ist das Problem !! Es ist schade, denn es sieht so aus, als ob das Paket verschiedene Methoden bietet, bisher keine Möglichkeit, darauf zuzugreifen.
UPDATE 9. August 2018: Vor ein paar Tagen habe ich dieses Problem beim Catboost-Entwickler angesprochen, siehe hier , und sie haben ein Ticket dafür geöffnet, um ein Tutorial bereitzustellen.