Classification avec données sur les graisses hautes

15

J'ai besoin de former un classificateur linéaire sur mon ordinateur portable avec des centaines de milliers de points de données et environ dix mille fonctionnalités. Quelles sont mes options? Quel est l'état de l'art pour ce type de problème?

Il semble que la descente de gradient stochastique soit une direction prometteuse, et mon sentiment est que c'est l'état de l'art:

"Pegasos: Primal Estimated sub-GrAdient SOlver for SVM" Shai Shalev-Shwartz, Yoram Singer, Nathan Srebro, Andrew Cotter. "Mathematical Programming, Series B, 127 (1): 3-30, year: 2007."

Est-ce le consensus? Dois-je regarder dans une autre direction?

carlosdc
la source
1
avez-vous envisagé d'utiliser des méthodes de réduction des dimensions? des milliers de fonctionnalités appellent à une réduction de dimension voir: en.wikipedia.org/wiki/Dimension_reduction
Dov
Cette question pourrait être améliorée avec des efforts de recherche. Avez-vous des techniques en tête?
Tamzin Blake
@Thom Blake: J'ai édité un peu la question, avec mes pensées.
carlosdc
Sans en savoir plus sur les données, aucune réponse ne serait informée. Est-ce rare? continu? discret? fonctionnalités / objets redondants? combien de classes? Par exemple, l'ACP sur des données éparses peut parfois être nuisible.
cyborg
2
grand = beaucoup de pts? fat = de nombreuses fonctionnalités? cette terminologie std est-elle utilisée quelque part dans les références?

Réponses:

6

Je pense que vous devriez regarder les méthodes d' apprentissage en ligne . Le perceptron et le perceptron du noyau sont extrêmement faciles à coder et fonctionnent extrêmement bien dans la pratique, et il existe toute une série d'autres méthodes en ligne. Notez que toute méthode d'apprentissage en ligne peut être convertie en un algorithme d'apprentissage par lots, auquel cas elles ressemblent étroitement aux méthodes de descente de gradient stochastique.

Si vous utilisez Matlab, il existe une très jolie boîte à outils appelée DOGMA par Francesco Orabona, qui contient une gamme d'algorithmes d'apprentissage en ligne, et vous pouvez évaluer plusieurs méthodes différentes en utilisant cela. Je l'ai utilisé dans certaines de mes recherches et je l'ai trouvé très utile (notez que pour autant que je m'en souvienne, il attend les données sous forme de [caractéristiques x exemples], vous devrez donc peut-être les transposer).

Comme d'autres l'ont mentionné, vous voudrez peut-être essayer de réduire la dimensionnalité. L'ACP n'est peut-être pas une si bonne option ici, car vous devez calculer la matrice de covariance qui sera très coûteuse. Vous pouvez essayer de regarder des projections aléatoires . La théorie est difficile, mais le principe est très simple. Il est basé sur le lemme de Johnson-Lindenstrauss si vous êtes intéressé, mais l'idée de base est que si vous projetez au hasard dans un espace de dimension inférieure, alors distances entre les points sont préservées jusqu'à quelques ϵ . Si vous utilisez un noyau RBF, alors 2 distances sont tout ce qui vous intéresse!2ϵ2

tdc
la source
7

Tout d'abord, je voudrais vous demander comment savez-vous que le classificateur linéaire est le meilleur choix? Intuitivement pour un si grand espace (R ^ 10000), il est possible qu'un autre classifieur non linéaire soit un meilleur choix.

Je vous suggère d'essayer plusieurs classificateurs différents et d'observer les erreurs de prédiction (j'essaierais plusieurs modèles de classification régularisés).

Si vous manquez de mémoire, réduisez la dimension à l'aide de PCA

niko
la source
2
Merci. Je réfléchissais davantage à la façon de gérer l'ampleur du problème. Je voulais commencer par faire du linéaire, car c'est plus simple. Je pense que vous proposez une méthode basée sur le noyau. Permettez-moi de souligner que si j'ai 750000 points de données, la matrice du noyau aura une taille de 540 Go. La réponse ne peut donc pas être: branchez-le à LIBSVM / SVMLight / etc, obtenez un bon C et gamma et voyez ce que vous obtenez.
carlosdc
2
(-1) la réponse est a) en partie si générique, elle pourrait être appliquée à toute question de classification b) il n'est pas expliqué pourquoi l'ACP est recommandée (par rapport à toute autre technique de réduction de dimension).
steffen
1

Comme l'a suggéré jb, je pense qu'il vaut mieux utiliser une méthode de "réduction de dimension". L'analyse en composantes principales (ACP) est un choix populaire. Vous pouvez également essayer des techniques d'apprentissage de fonctionnalités non supervisées. Pour plus d'informations sur l'apprentissage des fonctionnalités non supervisées, consultez http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

Upul
la source
1
PCA pas PAC;) ( 15 caractères )
neurone