Je travaille avec de grands ensembles de données en utilisant le paquet gbm dans R. Ma matrice de prédicteur et mon vecteur de réponse sont assez clairsemés (c'est-à-dire que la plupart des entrées sont nulles). J'espérais construire des arbres de décision en utilisant un algorithme qui tire parti de cette rareté, comme cela a été fait ici ). Dans cet article, comme dans ma situation, la plupart des articles n'ont que quelques-unes des nombreuses fonctionnalités possibles, ils ont donc pu éviter beaucoup de calculs inutiles en supposant que leurs articles manquaient d'une fonctionnalité donnée, sauf indication contraire explicite des données. J'espère que je pourrais obtenir une accélération similaire en utilisant ce type d'algorithme (puis en entourant un algorithme de renforcement pour améliorer ma précision prédictive).
Puisqu'ils ne semblaient pas publier leur code, je me demandais s'il y avait des packages open source ou des bibliothèques (dans n'importe quelle langue) qui sont optimisés pour ce cas. Idéalement, j'aimerais quelque chose qui pourrait prendre une matrice clairsemée directement à partir du Matrix
package de R , mais je prendrai ce que je peux obtenir.
J'ai regardé autour de moi et il semble que ce genre de chose devrait être là:
Les chimistes semblent rencontrer beaucoup de problèmes (le document que j'ai lié ci-dessus concernait l'apprentissage de nouveaux composés médicamenteux), mais les implémentations que j'ai pu trouver étaient soit propriétaires soit hautement spécialisées pour l'analyse chimique. Il est possible que l'un d'entre eux puisse être réutilisé, cependant.
La classification des documents semble également être un domaine où l'apprentissage à partir d'espaces d'entités clairsemés est utile (la plupart des documents ne contiennent pas la plupart des mots). Par exemple, il y a une référence oblique à une implémentation clairsemée de C4.5 (un algorithme de type CART) dans cet article , mais pas de code.
Selon la liste de diffusion , WEKA peut accepter des données clairsemées, mais contrairement à la méthode dans le document que j'ai lié ci-dessus, WEKA n'est pas optimisé pour en profiter réellement en termes d'éviter les cycles de CPU gaspillés.
Merci d'avance!
la source
glmnet
ete1071::svm
des deux supportsMatrix
des objets.GAMboost
etGLMboost
(à partir de l'emballageGAMboost
) peut également.Réponses:
J'aimerais voir une référence de leur implémentation clairsemée par rapport aux implémentations CART modernes utilisées dans les rf. Ce document est assez ancien en termes d’avancées dans ce domaine et je serais surpris qu’il continue d’accélérer considérablement.
Une partie de la raison est que l'utilisation d'un algorithme de tri intelligent comme Quicksort dans la recherche fractionnée peut fournir des performances proches de O (n) pour des fonctionnalités presque constantes (y compris celles qui sont rares). Les implémentations rapides permettent également de suivre lorsqu'une fonction est devenue constante dans une branche d'un arbre et ne doit plus être examinée. Les représentations de fonctionnalités denses fournissent des recherches rapides dans un mode compatible avec le cache de processeur.Vous avez donc besoin d'une représentation clairsemée vraiment intelligente pour gagner dans les cycles de processeur.
Ceci est discuté ici , ici , ici .
J'ai en fait implémenté une représentation de données clairsemée de données à un moment donné dans mon package rf CloudForest, mais je l'ai trouvée plus lente qu'une représentation dense des données et je l'ai abandonnée bien qu'elle fournisse certains avantages de mémoire.
Ma recommandation serait d'essayer scikit learn ou cloudforest construit en boostant des trucs et voir si c'est assez rapide. Les deux peuvent être étendus avec des critères de boost personnalisés si vous voulez faire quelque chose de non standard. (J'ai en fait écrit cloudforest à l'origine pour travailler avec de grands ensembles de données génétiques très dimensionnelles qui sont très similaires à ce que vous décrivez).
la source
Il y a probablement une petite chance pour tout code qui en profiterait - vous préféreriez plutôt écrire quelque chose par vous-même.
Cependant, l'autre option consiste à transformer vos données pour réduire la taille de vos données en supprimant les informations redondantes. Il est difficile de dire comment sans les informations sur vos données, mais peut-être pouvez-vous fusionner certaines fonctionnalités dont vous savez qu'elles ne se chevauchent pas, des parties de l'ACP ou changer la représentation de certains descripteurs? De plus, si vous dites que votre réponse est également rare, il est peut-être raisonnable de sous-échantillonner les objets avec 0 en réponse?
la source
Avez-vous regardé le
caret
package en R? Il fournit une interface qui facilite l'utilisation d'une variété de modèles, y compris certains pour le partitionnement récursif tels querpart
,ctree
etctree2
.la source
Matrix
objets par le signe d'insertion serait merveilleuse, mais elle n'existe pas actuellement. Tout est contraint à un data.frame.