2012-12-06 3 views
5

J'essaie actuellement de classifier le texte. Mon jeu de données est trop grand et comme suggéré here, j'ai besoin d'utiliser une matrice clairsemée. Ma question est maintenant, quelle est la bonne façon d'ajouter un élément à une matrice clairsemée? Disons par exemple que j'ai une matrice X qui est ma contribution.SciPy NumPy et SciKit-learn, créer une matrice clairsemée

X = np.random.randint(2, size=(6, 100)) 

Maintenant cette matrice X ressemble à un ndarray d'un ndarray (ou quelque chose comme ça).

Si je ne

X2 = csr_matrix(X) 

J'ai la matrice clairsemée, mais comment puis-je ajouter un autre élément à la matrice se font rares? par exemple cet élément dense: [1,0,0,0,1,1,1,0, ..., 0,1,0] à un vecteur clairsemé, comment l'ajouter à la matrice d'entrée clairsemée?

(BTW, je suis très nouveau au python, scipy, numpy, scikit ... tout)

+2

Vous devriez vraiment lire ceci: http://scikit-learn.org/dev/auto_examples/document_classification_20newsgroups.html – zenpoy

+0

Ceci est mon deuxième jour de travail avec python, c'est un peu exagéré pour une deuxième journée à lire. Je l'ai trouvé aussi btw – Ojtwist

+2

Certaines choses prennent simplement leur temps. Peut-être devriez-vous consacrer du temps à faire des tutoriels sur Python, Numpy et Scipy. Par exemple, dans la réponse à l'autre question, je vous ai indiqué quelques liens, et zenpoy vous en a donné un autre. Je suppose que vous n'avez pas lu ces liens, puisque vous avez posté cette question quelques minutes après avoir répondu à l'autre. – HerrKaputt

Répondre

14

scikit-learn a une grande documentation, avec didacticiels que vous avez vraiment devriez lire avant d'essayer de invente toi-même. This on est le premier à le lire explique comment classer le texte, étape par étape. Portez une attention particulière aux parties où l'on parle de représentations clairsemées, dans la section this En général, si vous voulez utiliser svm avec un noyau linéaire et une grande quantité de données, LinearSVC (basé sur Liblinear) est meilleur. En ce qui concerne votre question - je suis sûr qu'il y a plusieurs façons de concaténer deux matrices creuses (d'ailleurs c'est ce que vous devriez rechercher dans google pour d'autres façons de le faire), en voici une, mais vous devrez convertir de csr_matrix à coo_matrix qui est un autre type de matrice clairsemée: Is there an efficient way of concatenating scipy.sparse matrices?.

EDIT: Lorsque concaténant deux matrices (ou une matrice et une matrice qui est une 1 matrice dimenesional) l'idée générale est de concaténer X1.data et X2.data et manipuler leurs indices et indptr s (ou row et col en cas de coo_matrix) pour pointer vers les bons endroits. Certaines représentations éparses sont meilleures pour des opérations spécifiques et plus complexes pour d'autres opérations, vous devriez lire environ csr_matrix et voir si c'est la meilleure représentation. Mais je vous exhorte vraiment à commencer à partir de ces tutoriels que j'ai posté ci-dessus.

+1

Si vous voulez adapter un SVM à un * vraiment * grand ensemble de données, alors 'SGDClassifier' est encore mieux. Sous les paramètres par défaut, il se rapproche d'un SVM linéaire. –

Questions connexes