Existe-t-il des bibliothèques disponibles pour les méthodes de type CART utilisant des prédicteurs et des réponses clairsemés?


11

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 Matrixpackage 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!


2
Pas R, mais le scikits.learn de Python prend de plus en plus en charge les matrices clairsemées.
chl

@ ch1 merci. Il semble qu'ils n'aient pas encore ajouté de méthodes d'arborescence. Quelqu'un travaille sur une implémentation , mais je ne sais pas si elle pourra utiliser des données éparses. Je garderai certainement à l'esprit les méthodes SVM clairsemées!
David J. Harris

Lorsque vous dites «comme CART», voulez-vous spécifiquement des arbres de décision ou toute sorte de modèle prédictif?
Michael McGowan

@Michael - Je voudrais des arbres, car je vais les nourrir à une procédure de rappel et ils ont une variance élevée.
David J. Harris

2
Je ne sais pas d'un modèle d'arbre, mais glmnetet e1071::svmdes deux supports Matrixdes objets. GAMboostet GLMboost(à partir de l'emballage GAMboost) peut également.
Zach

Réponses:


2

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).


1

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?


Merci pour la réponse. Le sous-échantillonnage semble être une idée intéressante. Actuellement, je suis en train de pondérer certains aspects des données pour d'autres raisons, mais cela pourrait aussi être une bonne idée. Mais pourquoi dites-vous que le code n'existe probablement pas? J'ai lié un article d'il y a 12 ans qui semble avoir abordé le même problème.
David J. Harris

@David En bref, je pense que cela n'a pas de sens - c'est un problème de "mauvaise question". La rareté montre que les données sont sous une forme extrêmement sous-optimale, et une approche beaucoup plus efficace consiste à essayer de les convertir. Le papier que vous avez lié est un autre problème.

J'ai bien peur de ne pas comprendre ce que tu dis. La conversion de la forme des données est exactement ce que je veux faire, et pour autant que je sache, c'est exactement ce que fait ce document. Ils ne voulaient pas énumérer toutes les caractéristiques qui manquaient à chaque produit chimique, seulement celles qu'il possédait. Cela avait du sens dans leur situation car la plupart des produits chimiques manquent de la plupart des fonctionnalités, tout comme dans mon cas. Ils ont donc converti leurs fonctionnalités en une matrice clairsemée, puis leur algorithme de partitionnement récursif sur cette matrice clairsemée directement. Je cherche des moyens open source de faire la même chose avec mes données. Qu'est-ce que je rate? Merci
David J. Harris

@David, je pense que le point de mbq est qu'un grand codage 1 sur n (par exemple, site Web / identifiant du client, etc.) ou une liste des produits chimiques présents) est souvent une très mauvaise représentation pour l'apprentissage. Vous feriez mieux de passer aux "fonctionnalités", par exemple pour un site Web, il pourrait s'agir d'une catégorisation: boutique / actualités / blog sport / technologie, etc.
seanv507

1

Avez-vous regardé le caretpackage 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 que rpart, ctreeet ctree2.


Je connais ces packages / fonctions, et aucun d'eux ne fonctionne sur des données éparses pour autant que je sache.
David J. Harris

1
la prise en charge des Matrixobjets par le signe d'insertion serait merveilleuse, mais elle n'existe pas actuellement. Tout est contraint à un data.frame.
Zach

Vous pouvez essayer d'envoyer un e-mail au développeur et lui poser des questions à ce sujet. Je lui ai envoyé un email sur autre chose et il a fourni une réponse utile - max.kuhn [at] pfizer.com
paul
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.