2012-12-06 15 views
5

Ich versuche gerade, Text zu klassifizieren. Mein Datensatz ist zu groß und wie vorgeschlagen here, muss ich eine dünne Matrix verwenden. Meine Frage ist jetzt, was ist der richtige Weg, ein Element zu einer dünnen Matrix hinzuzufügen? Sagen wir zum Beispiel, ich habe eine Matrix X, die meine Eingabe ist.SciPy NumPy und SciKit-learn, erstellen Sie eine spärliche Matrix

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

Jetzt sieht diese Matrix X wie ein ndarray eines ndarray (oder etwas ähnliches) aus.

Wenn ich

X2 = csr_matrix(X) 

ich die Sparse Matrix haben, aber wie kann ich ein anderes Element in die sparce Matrix hinzufügen? zum Beispiel dieses dichte Element: [1,0,0,0,1,1,1,0, ..., 0,1,0] zu einem spärlichen Vektor, wie füge ich es der Sparse-Eingabematrix hinzu?

(btw, ich bin sehr neu auf Python, scipy, numpy, scikit ... alles)

+2

Sie sollten das wirklich lesen: http://scikit-learn.org/dev/auto_examples/document_classification_20newsgroups.html – zenpoy

+0

Dies ist mein zweiter Tag mit Python arbeiten, das ist ein bisschen übertrieben für einen zweiten Tag zu lesen. Ich fand das auch ttw – Ojtwist

+2

Manche Dinge nehmen sich einfach Zeit. Vielleicht sollten Sie etwas Zeit investieren, um einige Tutorials zu Python, Numpy und Scipy zu machen. Zum Beispiel, in der Antwort in der anderen Frage habe ich Sie auf einige Links hingewiesen, und zenpoy hat Ihnen einen anderen gegeben. Ich nehme an, Sie haben diese Links nicht gelesen, da Sie diese Frage nur wenige Minuten nach der Beantwortung der Frage gestellt haben. – HerrKaputt

Antwort

14

Scikit-Learn hat eine große Dokumentation, mit großer Tutorials, die Sie wirklich , bevor Sie lesen sollten Erfinde es selbst. This Einer ist der Erste, der es zu lesen erklärt, wie man Text Schritt für Schritt klassifizieren kann.

Achten Sie besonders auf die Teile, wo sie über spärliche Darstellungen sprechen, in Abschnitt. Im Allgemeinen ist LinearSVC (das auf Liblinear basiert) besser, wenn Sie svm mit linearem Kernel und großen Datenmengen verwenden möchten.

In Bezug auf Ihre Frage - ich bin sicher, es gibt viele Möglichkeiten, zwei dünn besetzte Matrizen zu verketten (übrigens sollten Sie in Google nach anderen Möglichkeiten suchen), hier ist einer, aber Sie müssen Konvertieren von CSR_Matrix zu coo_matrix, die andere Art von Sparse-Matrix ist: Is there an efficient way of concatenating scipy.sparse matrices?.

EDIT: Wenn zwei Matrizen Verketten (oder eine Matrix und eine Anordnung, die eine 1 dimenesional Matrix) die allgemeine Idee ist X1.data und X2.data verketten und deren indices und indptr s zu manipulieren (oder row und col im Falle von coo_matrix) auf die richtigen Stellen zeigen. Einige sparse Darstellungen sind besser für bestimmte Operationen und komplex für andere Operationen, sollten Sie über csr_matrix lesen und sehen, ob dies die beste Darstellung ist. Aber ich bitte Sie wirklich dringend, mit den Tutorials zu beginnen, die ich oben veröffentlicht habe.

+1

Wenn Sie eine SVM an eine * wirklich * große Menge von Daten anpassen wollen, dann ist 'SGDClassifier' noch besser. Unter den Standardeinstellungen nähert es sich einer linearen SVM an. –

Verwandte Themen