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?
classification
carlosdc
la source
la source
Réponses:
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
la source
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
la source
Vous pouvez également utiliser PCA pour réduire les dimensions sans calculer la matrice de covariance --- en utilisant l'équivalent neuronal newtork de PCA.
Voici un article qui le décrit (mais je recommande de faire votre propre recherche): http://users.ics.tkk.fi/oja/Oja1982.pdf , et voici un lien vers des choses qui peuvent fonctionner sur l'implémentation de matlab: http : //www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html .
la source
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
la source