Ich versuche zu verstehen, wie ich mithilfe der Wahrscheinlichkeitsschätzung kategoriale Variablen codieren kann, habe aber bisher nur wenig Erfolg gehabt.
Anregungen wäre sehr dankbar.
Ich versuche zu verstehen, wie ich mithilfe der Wahrscheinlichkeitsschätzung kategoriale Variablen codieren kann, habe aber bisher nur wenig Erfolg gehabt.
Anregungen wäre sehr dankbar.
Antworten:
Ich habe auch dieses Thema gelernt und Folgendes gefunden:
Diese Art der Codierung wird Likelihood-Codierung , Impact-Codierung oder Zielcodierung genannt
Die Idee ist, Ihre kategoriale Variable unter Verwendung der Zielvariablen zu codieren (kontinuierlich oder kategorial, abhängig von der Aufgabe). Wenn Sie beispielsweise eine Regressionsaufgabe haben, können Sie Ihre kategoriale Variable mit dem Mittelwert des Ziels codieren. Für jede Kategorie berechnen Sie den entsprechenden Mittelwert des Ziels (unter dieser Kategorie) und ersetzen den Wert einer Kategorie durch diesen Mittelwert.
Wenn Sie eine Klassifizierungsaufgabe haben, berechnen Sie die relative Häufigkeit Ihres Ziels in Bezug auf jeden Kategoriewert.
Aus mathematischer Sicht bedeutet diese Kodierung eine Wahrscheinlichkeit Ihres Ziels, die von jedem Kategoriewert abhängig ist.
Wenn Sie es auf einfache Weise tun, wie ich oben beschrieben habe, werden Sie wahrscheinlich eine voreingenommene Schätzung erhalten. Aus diesem Grund verwenden sie in der Kaggle-Community normalerweise zwei Ebenen der Kreuzvalidierung. Lies diesen Kommentar von raddar hier . Das entsprechende Notizbuch ist hier .
Das Zitat:
Es nimmt den Mittelwert von y an. Aber nicht einfach gemein, sondern in Kreuzvalidierung in Kreuzvalidierungsweise;
Angenommen, wir haben eine 20-fache Kreuzvalidierung. wir müssen irgendwie den Mittelwert des Merkmals für die Nr. 1-Falte berechnen, wobei wir nur Informationen von Nr. 2- Nr. 20-Falten verwenden.
Also nimmst du 2- bis 20-fach und erstellst ein weiteres Kreuzvalidierungsset (ich habe das 10-fach gemacht). Berechnen Sie den Mittelwert für jede ausgelassene Falte (am Ende erhalten Sie 10 Mittelwerte). Sie mitteln diese 10 Mittelwerte und wenden diesen Vektor für Ihren primären Validierungssatz Nr. 1 an. Wiederholen Sie dies für die restlichen 19 Falten.
Es ist schwer zu erklären, schwer zu verstehen und zu meistern :) Aber wenn es richtig gemacht wird, kann es viele Vorteile bringen :)
Eine andere Implementierung dieser Codierung ist hier .
In R library vtreat wurde die Impact-Codierung implementiert. Siehe diesen Beitrag .
In der CatBoost-Bibliothek stehen zahlreiche Optionen für die Codierung von kategorialen Variablen zur Verfügung, einschließlich der Zielcodierung .
Es gibt noch keine solche Kodierung in sklearn.
Die Zielcodierung ist jetzt in sklearn über das category_encoders-Paket verfügbar .
Ziel-Encoder
class category_encoders.target_encoder.TargetEncoder (verbose = 0, cols = None, drop_invariant = False, return_df = True, impute_missing = True, handle_unknown = 'impute', min_samples_leaf = 1, smoothing = 1)
Zielkodierung für kategoriale Merkmale. Basierend auf einem Auslassungsansatz.
Wie von Josh im Kommentar oben vermerkt.
Die Likelihood-Codierung ist beim Scikit-Lernen immer noch nicht verfügbar. Sie können dies tun, indem Sie ein Wörterbuch erstellen und dann eine Ersetzungsfunktion ausführen.
dict1 = {'cate1':1,'cate2':1,'cate3':2,'cate4':2}
for i in df.shape[0]:
df.iloc[i] = dict1[df.iloc[i]]