10
votes

Numpy pour l'utilisateur R?

utilisateur r et python de longue date ici. J'utilise R pour mon analyse quotidienne de données et Python pour les tâches plus lourdes sur le traitement du texte et les scripts shell. Je travaille avec des ensembles de données de plus en plus volumineux, et ces fichiers sont souvent dans des fichiers binaires ou textuels lorsque je les obtiens. Le type de choses que je fais normalement est d'appliquer des algorithmes statistiques / machines d'apprentissage et créer des graphiques statistiques dans la plupart des cas. J'utilise parfois R avec sqlite et écrivez c pour des tâches intensives d'itération; Avant de regarder dans Hadoop, je envisage d'investir un peu de temps à engourdir / scipy parce que j'ai entendu dire que cela a une meilleure gestion de la mémoire [et la transition à numpy / scipy pour un avec mon arrière-plan ne semble pas si grand] - Je me demande si quelqu'un a de l'expérience En utilisant les deux et pourraient commenter sur les améliorations de cette zone et s'il y a des idiomes intégrées dans ce problème. (Je suis également au courant de RPY2 mais je me demandais si numpy / Scipy peut gérer la plupart de mes besoins). Merci -


1 commentaires

Voter pour fermer comme opinion basée.


3 Réponses :


11
votes

J'utilise un nombre quotidien et r.

Pour le nombre lourd, je préfère Numpy to R par une grande marge (y compris les packages R, comme "matrice") Je trouve le nettoyeur de syntaxe, la fonction définie plus grande, et le calcul est plus rapide (bien que je ne trouve pas r lentement par aucun moyen). La fonctionnalité de diffusion de Numpy, par exemple, je ne pense pas avoir un analogique dans R.

par exemple, de lire dans un ensemble de données à partir d'un fichier CSV et de "normaliser" pour entrer dans un algorithme ML (par exemple, Centre moyen puis réorganiser chaque dimension) nécessite juste ceci: xxx

En outre, je trouve que lors de la codage des algorithmes ML, j'ai besoin de structures de données que je peux opérer sur l'élément-wise et cela comprenez également l'algèbre linéaire (par exemple, la multiplication de matrice, transpose, etc.). Numpy Obtient ceci et vous permet de créer facilement ces structures hybrides (pas de surcharge de l'opérateur ou de sous-classement, etc.).

Vous ne serez pas déçu par NUMPY / SCIPY, plus probablement vous serez surpris.

Donc, quelques recommandations - en général et en particulier, étant donné les faits dans votre question:

  • installer à la fois numpy et sciped . Comme un guide brut, NUMPY fournit le structures de données de base (en particulier le ndarray) et Scipy (qui est en fait plusieurs fois plus grand que NUMPY) fournit le domaine spécifique au domaine Fonctions (par exemple, statistiques, signal traitement, intégration).

  • Installez les versions du référentiel , en particulier w / r / t numppy parce que le La version dev est 2.0. Matplotlib and Numpy sont étroitement intégrés, vous pouvez en utiliser un sans l'autre, mais les deux sont les meilleurs de leur classe respective chez les bibliothèques Python. Vous pouvez obtenir les trois via easy_install , que je vous suppose déjà.

  • Numpy / Scipy a plusieurs modules spécifiquement dirigé vers la machine Apprentissage / statistiques, y compris le package et le package et le package Statistics .

  • ainsi que des packages dirigés vers calcul général, mais qui sont faire de codage beaucoup d'algorithmes ml plus rapide, en particulier, optimisation et algèbre linéaire .

  • Il y a aussi le Scikit S , pas inclus dans le numéro de base ou Bibliothèques scipy; Vous devez les installer séparément. De manière générale, chaque scikit est un ensemble de wrappers de commodité à Streamline Codage dans un domaine donné. Les scies que vous êtes susceptibles de trouver les plus pertinents sont les suivants: Ann (voisin proche du plus proche) et Apprendre (un ensemble d'algorithmes de régression et de classification ML / statistiques, p.ex. régression logistique , Perceptron multicouche, machine de support vectorielle).


2 commentaires

ne devrait pas / = np.max () être / = np.std ()?


Non, ça ne devrait pas. J'ai donné un exemple ci-dessus, pas une récitation exhaustive des données de pré-traitement pour l'entrée ML. Parfois, le répression de sorte que chaque dimension a une variance unitaire est ce que je veux, d'autres fois pas. En tout état de cause, mon exemple décrit une technique très courante pour la préparation de données en tant qu'entrée ml, mais il y en a plusieurs autres (voir par exemple, "Apprentissage de la machine: une perspective algorithmique, Stephen Marsland, CH 3., 2009, qui utilise la méthode dans ma réponse).



12
votes

R est la force de RS lorsque vous recherchez un environnement pour faire l'apprentissage de la machine et que les statistiques sont très certainement la diversité de ses bibliothèques. À ma connaissance, Sciped + Scikits ne peut pas être un remplaçant pour le cran.

En ce qui concerne l'utilisation de la mémoire, R est à l'aide d'un paradigme passe-valeur tandis que Python utilise la référence de transmission. Pass-By-Value peut conduire à un code plus "intuitif", passe-temps-référence peut aider à optimiser l'utilisation de la mémoire. NUMPY permet également d'avoir des "vues" sur des tableaux (type de sous-chers sans une copie étant faite).

En ce qui concerne la vitesse, python pur est plus rapide que Pure R pour accéder à des éléments individuels dans une matrice, mais cet avantage disparaît lors de la traite avec des tableaux numpus ( Benchmark ). Heureusement, Cython permet d'obtenir des améliorations graves de vitesse facilement.

Si vous travaillez avec de grandes données, je trouve le support des tableaux à base de stockage mieux avec Python (HDF5).

Je ne suis pas sûr que vous ne devriez pas fessoire pour l'autre, mais RPY2 peut vous aider à explorer vos options sur une transition possible (les tableaux peuvent être tournés entre R et NUMPY sans une copie effectuée).


3 commentaires

Oui, la sémantique Copy-By-Value est un tueur. Bien que je comprenne, il ressemble plus à la copie-modification ... Je n'ai rien à regarder dans de grandes données également. Mais comme vous le dites, la manière peut assouplir mon chemin dans Scipy.


Oui. Le monde fonctionnel s'est rapidement déplacé vers des astuces d'optimisation telles que la copie-modification (dans le cas de R, appelée "promesses" (pour copier si modifié)). Cependant, cela aide uniquement lorsque des objets ne sont pas modifiés (ne vous aide pas si l'on modifie les royaux d'une très grande matrice tout en passant sous forme de paramètre sur la fonction).


En fait, l'apprentissage automatique est une zone qui est assez bien couverte en python, par exemple MDP-Toolkit.sourceforge.net < / a> et une liste plus complète à mloss.org/software/language/python



2
votes

Je ne peux pas commenter sur R, mais voici quelques liens sur Numpy / Scipy et ML:


0 commentaires