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 Matrix
Paket 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!
quelle
glmnet
unde1071::svm
beide unterstützen spärlichMatrix
Objekte.GAMboost
undGLMboost
(aus PaketGAMboost
) kann auch.Antworten:
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.)
quelle
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
Hast du dir das
caret
Paket 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 machtrpart
,ctree
undctree2
.quelle
Matrix
Objekte wäre wunderbar, existiert aber derzeit nicht. Alles wird zu einem data.frame gezwungen.