[PYTHON] J'ai essayé de résumer SparseMatrix

Cet article est l'article du 15ème jour du "Calendrier de l'Avent de Machine Learning 2015". Voici un bref résumé de la «matrice clairsemée» qui est souvent utilisée lors de la mise en œuvre de l'apprentissage automatique.

SparseMatrix

Contrairement au DenseMatrix général, SparseMatrix est souvent utilisé lorsque le nombre de valeurs non nulles (valeurs non nulles) est extrêmement petit par rapport à la longueur du vecteur. SparseMatrix est supérieur à DenseMatrix des manières suivantes:

Ces avantages sont très efficaces lorsque la taille de la matrice ou du vecteur est suffisamment grande et que le nombre de valeurs non nulles est petit. Par exemple, lorsque plusieurs variables de masse sont représentées par 1 sur K. Cette fois, par souci de brièveté, nous examinerons diverses bibliothèques utilisant des opérations vectorielles au lieu de matrices.

scipy.sparse

Probablement le plus célèbre décrit ici. Il est également disponible dans scikit-learn, la bibliothèque d'apprentissage automatique la plus connue de Python. Par exemple, dans le cas de sklearn.clustering.KMeans, il est écrit ici. Comme vous êtes

X : array-like or sparse matrix

Il est possible d'utiliser SparseMatrix pour X de cette manière. Il existe de nombreuses façons de définir un SparseMatrix. Voir la documentation officielle (http://docs.scipy.org/doc/scipy/reference/sparse.html) pour plus d'informations.

Examples

Voyons la différence entre Dense et Sparse dans le calcul réel.

>>> import scipy.sparse as sp
>>> import numpy as np
>>> #Longueur 1,000 vecteurs
>>> x1=np.zeros(10**3)
>>> x1[10]=5; x1[100]=10;
>>> y1=sp.lil_matrix(x1).tocsr()
>>> %time x1 * x1 %Produit d'élément
21 μs

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

>>> #Longueur 1,000,000 vecteurs
>>> x2=np.zeros(10**6)
>>> x2[10]=5; x2[100]=10;
>>> y2=sp.lil_matrix(x2).tocsr()
>>> %time x2 * x2 %Produit d'élément
4.15 ms

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

Comme le montre l'exemple ci-dessus, le temps de calcul est évidemment différent à mesure que la longueur du vecteur augmente. À propos, dans l'exemple ci-dessus, il s'agit d'un produit d'élément, mais dans le cas de l'addition, il est plus rapide que DenseVector.

point important

#Si tel est le cas, l'opération éparse ne sera pas effectuée.
%time y2 * y2.T
3.41 ms

#Voici l'opératio de Sparse
%time y2.multiply(y2).sum()
447 µs

Autres bibliothèques que scipy

Theano Vous pouvez charger et utiliser le package theano.sparse. Csr et csc comme ils sont appelés dans scipy.sparse sont préparés.

>>> from theano import sparse

C'est facile, mais je vais essayer le même exemple ci-dessus avec Theano.

>>> 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

Bien sûr, si vous calculez avec un vecteur ordinaire,

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

Le calcul prend du temps. Je pense qu'il sera utile de se souvenir dans une bibliothèque comme Theano où les fonctions peuvent être utilisées de manière flexible et la différenciation peut être facilement calculée.

Cependant, pour rappel

TensorFlow Nous fournissons le TensorFlowSparseTensor dont on parle tant.

>>> 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]]

J'ai fait des recherches à ce sujet, mais je ne savais pas en détail comment l'utiliser. (Je le mettrai à jour à une date ultérieure)

en conclusion

C'est facile, mais j'ai résumé SparseMatrix. J'étudie toujours, donc ce n'est pas grave si je ne comprends pas, donc si vous avez des suggestions, je vous serais reconnaissant si vous pouviez commenter. Lors de la mise en œuvre de l'apprentissage automatique, il est particulièrement efficace pour l'apprentissage en ligne, alors pourquoi ne pas envisager d'implémenter SparseMatrix ainsi que DenseMatrix lors de sa mise en œuvre! ??

Recommended Posts

J'ai essayé de résumer SparseMatrix
J'ai essayé de résumer la commande umask
Entrée standard Python3 que j'ai essayé de résumer
J'ai essayé de résumer la modélisation graphique.
J'ai essayé de déboguer.
J'ai essayé de résumer les modules d'Ansible - l'édition Linux
LeetCode j'ai essayé de résumer les plus simples
J'ai essayé d'apprendre PredNet
J'ai essayé d'implémenter PCANet
J'ai essayé de présenter Pylint
jupyter je l'ai touché
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé de résumer comment utiliser matplotlib de python
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé d'implémenter Deep VQE
J'ai essayé de créer l'API Quip
J'ai essayé de toucher Python (installation)
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé l'authentification vocale Watson (Speech to Text)
J'ai touché l'API de Tesla
J'ai essayé d'implémenter Realness GAN
J'ai essayé de déplacer le ballon
J'ai essayé d'estimer la section.
[Première API COTOHA] J'ai essayé de résumer l'ancienne histoire
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé de résumer les commandes souvent utilisées en entreprise
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai essayé de résumer brièvement SQLAlchemy (il y a aussi des CONSEILS)
J'ai essayé de résumer comment utiliser à nouveau le référentiel EPEL
J'ai essayé de créer un linebot (implémentation)
[Linux] J'ai essayé de résumer les commandes de confirmation des ressources
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de créer un linebot (préparation)
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de gratter
J'ai essayé de reconnaître le mot de réveil
J'ai essayé de commencer avec Hy
J'ai essayé PyQ
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé d'ajouter un post-incrément à l'implémentation CPython
J'ai essayé de résumer ce qui était sorti avec Qiita avec Word cloud
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé de laisser optuna résoudre le nombre
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de résumer les commandes utilisées par les ingénieurs débutants aujourd'hui
J'ai essayé de toucher l'API COTOHA
J'ai essayé le moulin à papier
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai essayé de résumer les remarques de tout le monde sur le slack avec wordcloud (Python)
J'ai créé une API Web
J'ai essayé de résoudre TSP avec QAOA
[Python] J'ai essayé de calculer TF-IDF régulièrement
J'ai essayé de résumer la méthode de mise en œuvre fréquemment utilisée de pytest-mock
J'ai essayé de toucher Python (syntaxe de base)
J'ai essayé django-slack
J'ai essayé Django
[Django-Extensions] Les débutants en développement Web ont essayé de résumer Django-Extensions