Gibt es Bibliotheken für CART-ähnliche Methoden, die spärliche Prädiktoren und Antworten verwenden?

11

Ich arbeite mit einigen großen Datenmengen unter Verwendung des gbm-Pakets in R. Sowohl meine Prädiktormatrix als auch mein Antwortvektor sind ziemlich spärlich (dh die meisten Einträge sind Null). Ich hatte gehofft, Entscheidungsbäume mit einem Algorithmus zu erstellen, der diese Spärlichkeit ausnutzt, wie hier ). In diesem Artikel haben, wie in meiner Situation, die meisten Elemente nur einige der vielen möglichen Merkmale, so dass sie eine Menge verschwendeter Berechnungen vermeiden konnten, indem sie davon ausgegangen sind, dass ihren Elementen ein bestimmtes Merkmal fehlt, sofern in den Daten nicht ausdrücklich etwas anderes angegeben ist. Ich hoffe, dass ich mit dieser Art von Algorithmus eine ähnliche Beschleunigung erzielen kann (und dann einen Boosting-Algorithmus darum wickle, um meine Vorhersagegenauigkeit zu verbessern).

Da sie ihren Code nicht zu veröffentlichen schienen, fragte ich mich, ob es Open-Source-Pakete oder -Bibliotheken (in einer beliebigen Sprache) gibt, die für diesen Fall optimiert sind. Idealerweise hätte ich gerne etwas, das eine spärliche Matrix direkt aus Rs MatrixPaket nehmen könnte, aber ich werde nehmen, was ich bekommen kann.

Ich habe mich umgesehen und es scheint, als sollte so etwas da draußen sein:

  • Chemiker scheinen häufig auf dieses Problem zu stoßen (in dem oben verlinkten Artikel ging es darum, neue Arzneimittelverbindungen zu finden), aber die Implementierungen, die ich finden konnte, waren entweder proprietär oder hochspezialisiert für die chemische Analyse. Es ist jedoch möglich, dass einer von ihnen neu bestimmt wird.

  • Die Klassifizierung von Dokumenten scheint auch ein Bereich zu sein, in dem das Lernen aus spärlichen Feature-Spaces nützlich ist (die meisten Dokumente enthalten nicht die meisten Wörter). Zum Beispiel gibt es in diesem Dokument einen schrägen Verweis auf eine spärliche Implementierung von C4.5 (einem CART-ähnlichen Algorithmus) , aber keinen Code.

  • Laut der Mailingliste kann WEKA spärliche Daten akzeptieren, aber im Gegensatz zu der Methode in dem oben verlinkten Artikel ist WEKA nicht optimiert, um tatsächlich davon zu profitieren, um verschwendete CPU-Zyklen zu vermeiden.

Danke im Voraus!

David J. Harris
quelle
2
Nicht R, aber Python scikits.learn unterstützt zunehmend spärliche Matrizen.
Chl
@ ch1 danke. Sieht so aus, als hätten sie noch keine Baummethoden hinzugefügt. Jemand arbeitet an einer Implementierung , aber ich bin nicht sicher, ob spärliche Daten verwendet werden können. Ich werde auf jeden Fall die spärlichen SVM-Methoden im Auge behalten!
David J. Harris
Wenn Sie "CART-like" sagen, möchten Sie speziell Entscheidungsbäume oder ein Vorhersagemodell?
Michael McGowan
@Michael - Ich hätte gerne Bäume, da ich sie einem Boosting-Verfahren unterziehen werde und sie eine hohe Varianz aufweisen.
David J. Harris
2
Ich weiß nicht , von einer Baummodelle, sondern glmnetund e1071::svmbeide unterstützen spärlich MatrixObjekte. GAMboostund GLMboost(aus Paket GAMboost) kann auch.
Zach

Antworten:

2

Ich würde gerne einen Benchmark ihrer spärlichen Implementierung mit modernen CART-Implementierungen sehen, die in RFs verwendet werden. Dieses Papier ist in Bezug auf die Fortschritte in diesem Bereich ziemlich alt, und ich wäre überrascht, wenn es noch eine erhebliche Beschleunigung bewirken würde.

Ein Grund dafür ist, dass die Verwendung eines cleveren Sortieralgorithmus wie Quicksort bei der geteilten Suche eine nahezu O (n) -Leistung für nahezu konstante Features (einschließlich spärlicher Features) bieten kann. Schnelle Implementierungen verfolgen auch, wann ein Feature innerhalb eines Zweigs eines Baums konstant geworden ist und nicht mehr untersucht werden sollte. Dichte Feature-Darstellungen bieten schnelle Suchanfragen auf CPU-Cache-freundliche Weise, sodass Sie eine wirklich clevere, spärliche Darstellung benötigen, um in CPU-Zyklen zu gewinnen.

Dies wird hier , hier , hier diskutiert .

Ich habe tatsächlich eine spärliche Datendarstellung von Daten an einem Punkt in meinem HF- Paket CloudForest implementiert , fand sie jedoch langsamer als eine dichte Darstellung der Daten und gab sie auf, obwohl sie einige Speichervorteile bot.

Meine Empfehlung wäre, Scikit Learn oder Cloudforest zu probieren, um zu sehen, ob es schnell genug ist. Beide können mit benutzerdefinierten Boosting-Kriterien erweitert werden, wenn Sie etwas tun möchten, das nicht dem Standard entspricht. (Ich habe Cloudforest ursprünglich geschrieben, um mit großen, hochdimensionalen genetischen Datensätzen zu arbeiten, die dem, was Sie beschreiben, sehr ähnlich sind.)

Ryan Bressler
quelle
1

Wahrscheinlich gibt es eine kleine Chance für jeden Code, der dies ausnutzt - Sie müssten lieber etwas selbst schreiben.
Die andere Möglichkeit besteht jedoch darin, Ihre Daten zu transformieren, um die Größe Ihrer Daten zu verringern und redundante Informationen zu entfernen. Es ist schwer zu sagen, wie ohne die Informationen über Ihre Daten, aber vielleicht können Sie einige Funktionen, von denen Sie wissen, dass sie sich nicht überschneiden, PCA-Teile davon zusammenführen oder die Darstellung einiger Deskriptoren ändern? Wenn Sie sagen, dass Ihre Antwort ebenfalls spärlich ist, ist es möglicherweise sinnvoll, Objekte mit 0 als Antwort herunterzusampeln?


quelle
Danke für die Antwort. Downsampling klingt nach einer interessanten Idee. Derzeit gewichte ich einige Aspekte der Daten aus anderen Gründen nach unten , aber das könnte auch eine gute Idee sein. Aber warum ist es Ihrer Meinung nach unwahrscheinlich, dass Code dafür existiert? Ich habe auf ein Papier von vor 12 Jahren verlinkt, das anscheinend das gleiche Problem angegangen ist.
David J. Harris
@ David Kurz gesagt, ich denke, das macht keinen Sinn - das ist ein Problem mit "falschen Fragen". Die Kargheit zeigt, dass die Daten in einer extrem suboptimalen Form vorliegen, und ein viel effektiverer Ansatz besteht darin, zu versuchen, sie zu konvertieren. Das Papier, das Sie verlinkt haben, ist ein etwas anderes Problem.
Ich fürchte, ich verstehe nicht, was du sagst. Das Konvertieren der Form der Daten ist genau das, was ich tun möchte, und soweit ich das beurteilen kann, ist es genau das, was dieses Papier tut. Sie wollten nicht alle Merkmale auflisten, die jeder Chemikalie fehlten, nur die, die sie hatte. Dies machte in ihrer Situation Sinn, da den meisten Chemikalien die meisten Eigenschaften fehlen, genau wie in meinem Fall. Also konvertierten sie ihre Features in eine Sparse-Matrix und dann ihren rekursiven Partitionierungsalgorithmus direkt auf dieser Sparse-Matrix. Ich suche nach Open-Source-Möglichkeiten, um dasselbe mit meinen Daten zu tun. Was vermisse ich? Vielen Dank
David J. Harris
@ David, ich denke, der Punkt von mbq ist, dass eine große 1-von-n-Codierung (z. B. Website- / Kunden- usw. Kennung) oder eine Liste der vorhandenen Chemikalien oft eine sehr schlechte Darstellung für das Lernen ist. Es ist besser, zu "Funktionen" zu wechseln, z. B. für eine Website kann es sich um eine Kategorisierung handeln: Shop / Nachrichten / Blog Sport / Technologie usw.
Seanv507
1

Hast du dir das caretPaket angesehen? in R angesehen? Es bietet eine Schnittstelle , die es einfacher zu verwenden , um eine Vielzahl von Modellen, darunter auch einige für rekursive Partitionierung wie macht rpart, ctreeund ctree2.

paul
quelle
Ich bin mit diesen Paketen / Funktionen vertraut und keine von ihnen arbeitet mit spärlichen Daten, soweit ich das beurteilen kann.
David J. Harris
1
Caret-Unterstützung für MatrixObjekte wäre wunderbar, existiert aber derzeit nicht. Alles wird zu einem data.frame gezwungen.
Zach
Sie können versuchen, dem Entwickler eine E-Mail zu senden und ihn danach zu fragen. Ich schickte ihm eine E-Mail über etwas anderes und er gab eine hilfreiche Antwort - max.kuhn [at] pfizer.com
paul