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:

screenshot

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.

War es hilfreich?

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 gibt Premium Instanzen, jede Gewichtung 0.75;
  • Basic: 0.5 * 1/4 = 0.125 # Weil Basic ist jetzt 0.5, und die Trennung aufpages_not_larger_than_20 ist 1/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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top