[PYTHON] Ich habe versucht, SparseMatrix zusammenzufassen

Dieser Artikel ist der Artikel zum 15. Tag des "Adventskalenders für maschinelles Lernen 2015". Hier ist eine kurze Zusammenfassung der "Sparse Matrix", die häufig bei der Implementierung von maschinellem Lernen verwendet wird.

SparseMatrix

Im Gegensatz zur allgemeinen DenseMatrix wird SparseMatrix häufig verwendet, wenn die Anzahl der Nicht-Null-Werte (Nicht-Null-Werte) im Verhältnis zur Länge des Vektors extrem klein ist. SparseMatrix ist DenseMatrix in folgender Hinsicht überlegen:

Diese Vorteile sind sehr effektiv, wenn die Größe der Matrix oder des Vektors groß genug und die Anzahl der Werte ungleich Null klein ist. Zum Beispiel, wenn mehrere Massenvariablen durch 1-of-K dargestellt werden. Dieses Mal werden wir der Einfachheit halber verschiedene Bibliotheken betrachten, die Vektoroperationen anstelle von Matrizen verwenden.

scipy.sparse

Wahrscheinlich das berühmteste, das hier beschrieben wird. Es ist auch in scikit-learn verfügbar, der bekanntesten Bibliothek für maschinelles Lernen in Python. Im Fall von sklearn.clustering.KMeans wird es beispielsweise [hier] geschrieben (http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans.fit). Wie Sie sind

X : array-like or sparse matrix

Es ist möglich, SparseMatrix für X wie folgt zu verwenden. Es gibt viele Möglichkeiten, eine SparseMatrix zu definieren. Weitere Informationen finden Sie in der offiziellen Dokumentation (http://docs.scipy.org/doc/scipy/reference/sparse.html).

Examples

Mal sehen, wie groß der Unterschied zwischen Dense und Sparse in der tatsächlichen Berechnung ist.

>>> import scipy.sparse as sp
>>> import numpy as np
>>> #Länge 1,000 Vektoren
>>> x1=np.zeros(10**3)
>>> x1[10]=5; x1[100]=10;
>>> y1=sp.lil_matrix(x1).tocsr()
>>> %time x1 * x1 %Element Produkt
21 μs

>>> %time y1.multiply(y1)
249 μs

>>> #Länge 1,000,000 Vektoren
>>> x2=np.zeros(10**6)
>>> x2[10]=5; x2[100]=10;
>>> y2=sp.lil_matrix(x2).tocsr()
>>> %time x2 * x2 %Element Produkt
4.15 ms

>>> %time y2.multiply(y2)
250 μs

Wie im obigen Beispiel gezeigt, ist die Berechnungszeit offensichtlich unterschiedlich, wenn die Länge des Vektors zunimmt. Im obigen Beispiel handelt es sich übrigens um ein Elementprodukt, aber im Falle einer Addition ist es schneller als DenseVector.

wichtiger Punkt

#In diesem Fall wird keine sparsame Operation ausgeführt.
%time y2 * y2.T
3.41 ms

#Dies ist Sparse's Operatio
%time y2.multiply(y2).sum()
447 µs

Andere Bibliotheken als scipy

Theano Sie können das Paket theano.sparse laden und verwenden. Csr und csc, wie sie in scipy.sparse genannt werden, werden vorbereitet.

>>> from theano import sparse

Es ist einfach, aber ich werde das gleiche Beispiel oben mit Theano versuchen.

>>> import theano
>>> from theano import sparse
>>> x = sparse.csr_matrix(name='x', dtype='float64')
>>> f = theano.function([x], sparse.basic.mul(x, x))
>>> %time f(y1)
312 µs

Wenn Sie mit einem gewöhnlichen Vektor rechnen,

>>> import theano.tensor as T
>>> x = T.dvector(name='x')
>>> f = theano.function([x], x * x)
>>> %time f(x1)
4.74 ms

Die Berechnung braucht Zeit. Ich denke, es wird nützlich sein, sich in einer Bibliothek wie Theano daran zu erinnern, wo Funktionen flexibel verwendet und Differenzierungen leicht berechnet werden können.

Zur Erinnerung

TensorFlow Wir bieten den viel diskutierten TensorFlowSparseTensor an.

>>> import tensorflow as tf
>>> tf.SparseTensor(values=[1, 2], indices=[[0, 0], [1, 2]], shape=[3, 4])
[[1, 0, 0, 0]
 [0, 0, 2, 0]
 [0, 0, 0, 0]]

Ich habe einige Nachforschungen angestellt, wusste aber nicht genau, wie ich es verwenden soll. (Ich werde es zu einem späteren Zeitpunkt aktualisieren)

abschließend

Es ist einfach, aber ich habe SparseMatrix zusammengefasst. Ich lerne noch, also ist es in Ordnung, wenn ich es nicht verstehe. Wenn Sie also Vorschläge haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten. Wenn Sie maschinelles Lernen implementieren, insbesondere für das Online-Lernen, ist es effektiv. Wenn Sie es implementieren, sollten Sie SparseMatrix und DenseMatrix implementieren. ??

Recommended Posts

Ich habe versucht, SparseMatrix zusammenzufassen
Ich habe versucht, den Befehl umask zusammenzufassen
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht zu debuggen.
Ich habe versucht, Ansibles Module-Linux-Edition zusammenzufassen
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, Pylint vorzustellen
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, Deep VQE zu implementieren
Ich habe versucht, eine Quip-API zu erstellen
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe Watson Voice Authentication (Speech to Text) ausprobiert.
Ich habe Teslas API berührt
Ich habe versucht, Realness GAN zu implementieren
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
[Erste COTOHA-API] Ich habe versucht, die alte Geschichte zusammenzufassen
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, die im Geschäftsleben häufig verwendeten Befehle zusammenzufassen
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe versucht, SQLAlchemy kurz zusammenzufassen (es gibt auch TIPPS)
Ich habe versucht zusammenzufassen, wie das EPEL-Repository erneut verwendet wird
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
[Linux] Ich habe versucht, die Ressourcenbestätigungsbefehle zusammenzufassen
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht zu kratzen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, mit Hy anzufangen
Ich habe PyQ ausprobiert
Ich habe versucht, PLSA in Python 2 zu implementieren
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe versucht, der CPython-Implementierung ein Post-Inkrement hinzuzufügen
Ich habe versucht zusammenzufassen, was mit Qiita mit Word Cloud ausgegeben wurde
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, Optuna die Nummer lösen zu lassen
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die Befehle zusammenzufassen, die Anfängeringenieure heute verwenden
Ich habe versucht, die COTOHA-API zu berühren
Ich habe es mit Papiermühle versucht
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, alle Bemerkungen von Slack mit Wordcloud (Python) zusammenzufassen.
Ich habe eine Web-API erstellt
Ich habe versucht, TSP mit QAOA zu lösen
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, die häufig verwendete Implementierungsmethode von pytest-mock zusammenzufassen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
[Django-Extensions] Anfänger in der Webentwicklung haben versucht, Django-Extensions zusammenzufassen