Frage zum Entscheidungsbaum in der Buchprogrammierung kollektiver Intelligenz
-
16-10-2019 - |
Frage
Ich studiere derzeit Kapitel 7 ("Modellierung mit Entscheidungsbäumen") des Buches "Programmierkollektive Intelligenz".
Ich finde die Ausgabe der Funktion mdclassify()
S.157 verwirrend. Die Funktion befasst sich mit fehlenden Daten. Die erbrachte Erklärung lautet:
Im grundlegenden Entscheidungsbaum hat alles ein implizites Gewicht von 1, was bedeutet, dass die Beobachtungen vollständig für die Wahrscheinlichkeit zählen, dass ein Element in eine bestimmte Kategorie passt. Wenn Sie stattdessen mehrere Zweige folgen, können Sie jedem Zweig ein Gewicht geben, das dem Anteil aller anderen Zeilen entspricht, die auf dieser Seite liegen.
Nach allem, was ich verstehe, wird eine Instanz dann zwischen Zweigen aufgeteilt.
Daher verstehe ich einfach nicht, wie wir erhalten können:
{'None': 0.125, 'Premium': 2.25, 'Basic': 0.125}
wie 0.125+0.125+2.25
fasst weder 1 noch eine Ganzzahl zusammen. Wie wurde die neue Beobachtung gespalten?
Der Code ist da:
https://github.com/arthur-e/programming-collective-intelligence/blob/master/chapter7/treepredict.py
Mit dem ursprünglichen Datensatz erhalte ich den hier gezeigten Baum:
Kann mir bitte jemand genau erklären, was die Zahlen genau bedeuten und wie genau er erhalten wurde?
PS: Das erste Beispiel des Buches ist falsch, wie auf ihrer Errata -Seite beschrieben, aber nur das zweite Beispiel (oben erwähnt) wäre schön.
Lösung
Es gibt vier Funktionen:
- Referer,
- Lage,
- FAQ,
- Seiten.
In Ihrem Fall versuchen Sie, eine Instanz zu klassifizieren, wo FAQ
und pages
sind unbekannt: mdclassify(['google','France',None,None], tree)
.
Da das erste bekannte Attribut ist google
, in Ihrem Entscheidungsbaum interessieren Sie sich nur für die Kante, aus der er kommt google
Knoten auf der rechten Seite.
Es gibt fünf Fälle: drei beschriftete Premium
, einer beschriftet Basic
und einer beschriftet None
.
Beispiele mit Etiketten Basic
und None
auf dem aufgeteilt FAQ
Attribut. Es gibt zwei davon, also ist das Gewicht für beide 0.5
.
Jetzt haben wir uns auf die geteilt pages
Attribut. Es gibt 3 Fälle mit pages
Wert größer als 20 und zwei mit pages
Wert nicht größer als 20.
Hier ist der Trick: Wir wissen bereits, dass die Gewichte für zwei davon verändert wurden 1
zu 0.5
jeder. Jetzt haben wir drei Instanzen gewichtet 1
jeweils und 2 Instanzen gewichtet 0.5
jeder. Der Gesamtwert ist also 4
.
Jetzt können wir die Gewichte für zählen pages
Attribut:
- PAGES_LARGER_THAN_20 = 3/4
- PAGES_NOT_LARGER_THAN_20 = 1/4 # Die 1 ist: 0,5 + 0,5
Alle Gewichte werden zugeschrieben. Jetzt können wir die Gewichte mit den "Frequenzen" von Instanzen multiplizieren (erinnern sich an das für Basic
und None
Die "Frequenz" ist jetzt 0.5
):
Premium
:3 * 3/4 = 2.25
# weil es drei gibtPremium
Instanzen, jede Gewichtung0.75
;Basic
:0.5 * 1/4 = 0.125
# WeilBasic
ist jetzt0.5
, und die Trennung aufpages_not_larger_than_20
ist1/4
None
:0.5 * 1/4 = 0.125
# analog
Zumindest dort kommen die Zahlen. Ich teile Ihre Zweifel an dem Maximalwert dieser Metrik und ob sie auf 1 summieren sollte, aber jetzt, wo Sie wissen, woher diese Zahlen stammen, können Sie überlegen, wie Sie sie normalisieren können.