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.
quelle
Antworten:
Ich fand heraus, dass man zum Festlegen der
ctr
Parameter und aller Komponenten eine Liste von Zeichenfolgen übergeben sollte, wobei jede Zeichenfolge diectrType
und eine ihrer Komponenten enthalten sollte:ctrType
beispielsweise a seinBorders:
(klicken Sie hier, um die Catboost-Parameter anzuzeigen).ctrType
folgen. Zum BeispielTargetBorderType=5
.'Borders:TargetBorderType=5'
.Beispiel mit zwei Komponenten:
quelle
Haben Sie versucht, das unten angegebene Format zu verwenden:
quelle