Ich habe kürzlich ein Projekt durchgeführt, bei dem die Zielvariable mehrere Klassen umfasste, und habe daher nach geeigneten Möglichkeiten gesucht, kategoriale Features zu codieren. Ich habe viele Artikel gefunden, in denen die Vorteile der Codierung anhand des Mittelwerts der Zielvariablen gegenüber anderen Methoden aufgeführt sind und wie diese Aufgabe in zwei Codezeilen mithilfe der Bibliothek category_encoders ausgeführt werden kann . Zu meiner Überraschung stellte ich jedoch fest, dass kein Artikel diese Methode für eine Zielvariable mit mehreren Klassen demonstrierte. Ich habe die Dokumentation zu category_encoders durchgesehen und festgestellt, dass die Bibliothek nur für binäre oder reale Variablen funktioniert. Ich habe mir die Originalarbeit von Daniele Micci-Barreca angesehen, die die mittlere Zielcodierung einführte und auch nichts Sinnvolles fand.
In diesem Artikel werde ich einen Überblick über das Dokument geben, das die Zielcodierung beschreibt, und anhand eines Beispiels zeigen, wie die Zielcodierung bei binären Problemen funktioniert.
Theorie
Also: Wenn Sie gefragt werden "0/1", "geklickt / nicht geklickt" oder "Katze / Hund", dann ist Ihr Klassifizierungsproblem binär; Wenn Sie mit "Rot oder Grün oder Blau, aber vielleicht Gelb" oder "Limousine gegen Fließheck und alle gegen SUV" antworten möchten, liegt das Problem in mehreren Klassen.
In dem oben erwähnten kategorialen Zielartikel heißt es:
Das Ergebnis einer Beobachtung kann durch eine Schätzung der Wahrscheinlichkeit der Zielvariablen angezeigt werden.
, , .
.
, .
. 0, 1. P (Y = 1 | X = Xi), ..:
n(Y) - 1 ,
n(i) - i- ,
n(iY) - 1 i- .
, 1 i- , - 1 . λ - , 0 1, n(i), .
TargetEncoder category_encoders, k - min_sample_leaf, f - .
, , , . , , , (. . Y). .
. . , . , , , . .
, .
.
, 1, «»?
: 1/2 = 0,5.
, , Target 1, «»?
: 1/4 = 0,25.
?
, «Female» 0,25, . , 4/9 = 0,4.
, «» , , .
min_sample_leaf, k = 1 , f = 1,
«Male», n = 2;
λ(‘Male’)=1/(1+exp(-(2–1)/1))=0.73 # Weight Factor for 'Male'
Target Statistic=(Weight Factor * Probability of 1 for Males)
+ ((1-Weight Factor) * Probability of 1 Overall)S(‘Male’)= (0.73 * 0.5) + ((1–0.73) * 0.4) = 0.485
, «Female» , n = 4;
λ(‘Female’)=1/(1+exp(-(4–1)/1))=0.95 #Weight Factor for 'Female'
Target Statistic=(Weight Factor * Probability of 1 for Females)
+ ((1-Weight Factor) * Probability of 1 Overall)S(‘Female’)= (0.95 * 0.25) + ((1–0.95) * 0.4) = 0.259
, , λ , . 4 «Female», 2 «Male». 0,95 0,73.
, «Male» 0,485 , «Female» 0,259. «».
! !
?
, , category_encoders:
!pip install category_encoders
import category_encoders as ce
x=['Male','Male','Female','Female','Female','Female','Other','Other','Other']
y=[1,0,0,0,0,1,1,1,0]
print(ce.TargetEncoder().fit_transform(x,y))
TargetEncoder category_encoders. , . , .
, .
!