2016-10-29 4 views
0

Ich arbeite an einem Sentiment-Analyse-Projekt. Ich benutze einen Beutel mit Wörtern auf Sklearn. Ich möchte die Zeilen nomalize wie in:Anwenden von benutzerdefinierten Funktionen auf Sparse-Matrix in Sklearn

a = [1, 0, 1, 0, 0, 0, 0, 1, 0, 1] 
#a ->  4 non zero values 

der normierte Vektor sein sollte:

[0.25, 0.0, 0.25, 0.0, 0.0, 0.0, 0.0, 0.25, 0.0, 0.25] 

Für b -> 8 nicht Nullen Werte:

b = [1, 0, 1, 1, 0, 1, 1, 1, 1, 1] 

der normierte Vektor sein sollte :

[0.125, 0.0, 0.125, 0.125, 0.0, 0.125, 0.125, 0.125, 0.125, 0.125] 



class 'scipy.sparse.csr.csr_matrix 

    (0, 2111) 1 
    (0, 2812) 1 
    (0, 2848) 1 
    ...... 
    ...... 
    (0, 5745) 1 
    (0, 5823) 1 

Wie kann gelten o Zu einer solchen Matrix?

Ich weiß, dass ich dies in eine reguläre Matrix mit der ".toarray" -Methode konvertieren kann, aber dies ein Speicherproblem, die Matrix ist mehrere Gb.

+1

Dies ist keine Lösung, sondern nur ein Vorschlag zur Überwindung des Speicherproblems. Da es sich um eine dünn besetzte Matrix handelt, können Sie die Matrix im Matrix Market-Format speichern. Dann können Sie jeden Wert der Matrix auf eine sehr einfache Weise normalisieren, wie Sie es für einen Vektor tun. –

+1

Haben Sie sich die Methoden einer CSR-Matrix angeschaut? Es gibt eine Summe, wahrscheinlich eine Gemeinheit. Machen Sie kleine Arrays spärlich und experimentieren Sie. – hpaulj

+0

Ich sollte hinzufügen, dass das "sklearn" auch einige benutzerdefinierte spärliche Funktionen hat - um häufige Aufgaben in diesem Paket zu beschleunigen. Ich habe ihren Code für andere Fragen angeschaut, aber nicht darauf geachtet, wo oder wie sie dokumentiert sind. – hpaulj

Antwort

1

A sparse csr Matrix hat eine mean Methode, die spärliche Version np.mean:

In [2188]: a = np.array([1, 0, 1, 0, 0, 0, 0, 1, 0, 1]) 
In [2189]: a1 = sparse.csr_matrix(a) 
In [2190]: a1 
Out[2190]: 
<1x10 sparse matrix of type '<class 'numpy.int32'>' 
    with 4 stored elements in Compressed Sparse Row format> 

Dense Normalisierungs:

In [2191]: np.mean(a) 
Out[2191]: 0.40000000000000002 
In [2192]: a/np.mean(a) 
Out[2192]: array([ 2.5, 0. , 2.5, 0. , 0. , 0. , 0. , 2.5, 0. , 2.5]) 

sparse Normalisierungs:

In [2193]: a1.mean() 
Out[2193]: 0.40000000000000002 
In [2194]: a1/a1.mean() 
Out[2194]: 
<1x10 sparse matrix of type '<class 'numpy.float64'>' 
    with 4 stored elements in Compressed Sparse Row format> 
In [2195]: (a1/a1.mean()).A 
Out[2195]: array([[ 2.5, 0. , 2.5, 0. , 0. , 0. , 0. , 2.5, 0. , 2.5]]) 

Wie ich gerade erklärt in der Frage nach spärlichem Skalarprodukt, numpiger Funktion s und Methoden haben ein begrenztes "Wissen" über spärliche Matrizen. Machen Sie sich mit den spärlichen Methoden und Funktionen vertraut. Wenn diese nicht ausreichen, können wir Alternativen erkunden.

Verwandte Themen