Literatur zum Algorithmus zur optimalen Aufteilung beim Wachstum von Klassifikationsbäumen

8

In ESL , Abschnitt 9.7, gibt es einen Absatz, der besagt, dass die Berechnungszeit einer Aufteilung beim Wachstum eines Klassifizierungs- (oder Regressions-) Baums typischerweise wie skaliert, wobei die Anzahl der Prädiktoren und die Anzahl von ist Proben.p N.pNlogNpN

Ein naiver Ansatz führt zu einer Skalierung, und ich konnte keine Verweise auf die Literatur finden, die die Details für den Aufteilungsteil des Algorithmus erklärt und wie man eine typische Skalierung erreicht. p N log N.pN2 pNlogN

Bei dem naiven Ansatz wird die optimale Aufteilung für eine gegebene Variable nach einer anfänglichen Anordnung der beobachteten Werte unter den Mittelpunkten zwischen den beobachteten Werten gesucht , und die Berechnung des Verlusts für jede Aufteilung kann in einer Zeit erfolgen, die wie skaliert .N.N1N

Ich könnte (und werde wahrscheinlich) den Quellcode für einige der mir bekannten Implementierungen studieren, aber eine Literaturreferenz wäre nett insbesondere in Bezug auf die zeitliche Komplexität.

NRH
quelle

Antworten:

2

Ich werde eine andere Antwort geben, da dies zu viel für einen Kommentar ist und einen allgemeineren Ansatz behandelt.

In ESL beschreiben sie also tatsächlich die Rechenzeit für einen Branch-and-Bound (genauer gesagt, es sieht für mich wie eine Teilung und Eroberung aus).

Wir bezeichnen mit die Anzahl der Beobachtungen und mit die Anzahl der Kinderknoten, wenn wir einen Baum wachsen lassen. Ich gehe davon aus, dass wir im Allgemeinen nicht verlieren, wenn wir als fest betrachten. Wir können auch mit die Verarbeitungszeit zum Berechnen von Teilungspunkten an einem gegebenen Knoten bezeichnen.K K f ( N )NKKf(N)

Somit können wir die Formel für die Ausführungszeit rekursiv schreiben wie: Wir haben hier berücksichtigt, dass die untergeordneten Knoten den Eingabedatensatz der Größe in Teilmengen aufteilen von gleicher Größe . Wir wissen, dass dies der beste Fall ist.N K N / K.

T(N)=f(N)+KT(N/K)
NKN/K

Wir können jedoch sehen, dass dies eine bekannte Anwendung des Master-Theorems ist. Dies ist im CLRS-Buch gut dokumentiert . Ich habe die 3. Ausgabe und die Details sind in Abschnitt 4.5 und der Beweis ist im nächsten Abschnitt. Ich erinnere mich nicht gut an die Details, aber ich erinnere mich, dass es nicht zu kompliziert ist, wenn man die Rekursion erweitert und einige Begriffe zusammenfasst.

Für diesen Fall ist jedoch wichtig, dass wenn - lineare Zeit ist, die resultierende Zeit des Algorithmus . Diese Zeit wird für eine einzelne Eingangsvariable berechnet, daher wäre unsere Gesamtzeit für Variablenf(N)=O(N)T(N)=O(NlogN)PO(PNlogN)

Diese Zeit ist für das erreichbar, wenn alle Eingaben anfänglich in sortiert sind und das des Aufteilungswerts für diese sortierten Eingaben lineare Zeit benötigt. Hier können wir den Online-Varianzalgorithmus anwenden, wie ich in meiner vorherigen Antwort für . Fürist noch einfacher Median zu finden. Ich gebe zu, ich habe nie eine andere Verlustfunktion für Bäume ausprobiert.O(PNlogN)L2=1N(yy^)2L1=1N|yy^|

Beachten Sie jedoch, dass der Hauptsatz für den besten Fall gilt, wenn die Teilungen gleich groß sind. Der schlimmste Fall ist, wenn die Aufteilung sehr unausgeglichen ist. Dort kann man einen anderen Fall des Master-Theorems anwenden und die Zeit wird .O(PN2)

Als Schlussfolgerung gehe ich davon aus, dass ESL-Autoren den Begriff typischerweise so verwenden, dass er zur Beschreibung des Quick-Sort-Algorithmus verwendet wird. Typischerweise ergibt eine schnelle Sortierung die Laufzeit von mit dem ungünstigsten Fall für einige spezifische Dateneinstellungen.O ( N 2 )O(NlogN)O(N2)

Ich hoffe, es hilft.

Rapaio
quelle
2

Siehe meine Antwort von einer anderen Frage hier . Obwohl ich keine Papierreferenzen habe, können Sie trivial feststellen, dass Sie für numerische Eingaben der Länge Folgendes tun müssen:N.pN

  • iteriere über alle Eingänge -O ( p )pO(p)
  • sortiere aufsteigend jeden Eingang -O(Nlog(N))
  • Berechnen Sie 2 Laufvarianzen, eine von links und eine von rechts in linearer Zeit -O(N)

Die dominante Zeit für jedes Attribut ist die Sortierzeit, daher haben wir .O(pNlog(N))

Rapaio
quelle
+1, das ist eine gute Antwort, über die ich nicht nachgedacht habe, die aber einen quadratischen Verlust voraussetzt. Ich denke nicht, dass dies auf (alle) anderen allgemeinen Verlustfunktionen verallgemeinert werden kann, die für Klassifizierungsbäume verwendet werden. Ich nehme an, dass das typische , aber gemäß ESL Worst Case Verhalten von einem Branch-and-Bound-Algorithmus stammt, aber ich habe keine Bestätigung dafür gefunden. p N 2pNlog(N)pN2
NRH