Affichage des articles dont le libellé est pandas. Afficher tous les articles
Affichage des articles dont le libellé est pandas. Afficher tous les articles
vendredi 15 mars 2019
Math: Analyse des données
L’analyse des données consiste à extraire des informations supplémentaires à celles-ci. Elle peut mener à découvrir des choses aussi bien spécifique en faisant apparaître des cas particulier mais aussi des choses générales et transverses. Bien sur, on ne peut demander le même genre d’informations selon le type de données que l’on observe mais on peut dégager des tendances.
Libellés :
bayesianisme,
contingence,
écart-type,
harmonique,
matplotlib,
matrice de confusion,
mediane,
moyenne,
Numpy,
pandas,
précision,
probabilité,
python,
Qualitative,
Quantitative,
sensibilité,
statistique,
variance
lundi 24 septembre 2018
Python : Manipulation des données
Nous voila dans une petite digression. Je n'avais pas pensé faire un article sur les préceptes de base de la manipulation des listes, des tuples, des tableaux ou encore des dictionnaires en python mais au vue des quelques derniers articles sur l'IA [1-4] et aussi des futurs articles qui auront pour base les frameworks numpy [6], pandas [7] et scikit-learn [8], il nous faut explorer un peu comment nous pouvons manipuler les données, c'est a dire ici les charger, et effectuer des calculs.
Alors nous irons dans la compréhension des structures de données rencontrées de façon récurrente dans l'IA et le machine learning mais nous n'entrerons pas ici dans la visualisation ou l’interprétation des données. Nous nous attarderons sur ces aspects lorsque l'on traitera de la visualisation et de l'analyse statistique des données dans la limite du compréhensible.
Commençons par les bases, ce que python nous permet de base déjà
Alors nous irons dans la compréhension des structures de données rencontrées de façon récurrente dans l'IA et le machine learning mais nous n'entrerons pas ici dans la visualisation ou l’interprétation des données. Nous nous attarderons sur ces aspects lorsque l'on traitera de la visualisation et de l'analyse statistique des données dans la limite du compréhensible.
Commençons par les bases, ce que python nous permet de base déjà
Les listes
Bon nous ne cherchons pas spécialement a faire un cours sur python donc voyons l'essentielle sur les listes et les manipulations de base. La liste en python est un ensemble de données de taille dynamique et modifiable.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # liste maListe=[1, 2, 3, 4] print(maListe) maListe.append(5) print(maListe) print(maListe[:3])#on prend les paramtres avant l'index 3 exclu print(maListe[3:])# on prend les paramtres apres l'index 3 inclu malisteN2=[[1, 2, 3, 4],[5,6,7,8],[9,10, 11, 12],[13, 14, 15, 16]] print(malisteN2) [1, 2, 3, 4] [1, 2, 3, 4, 5] [1, 2, 3] [4, 5] [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]] |
Libellés :
base de connaissances,
base de données,
Big Data,
classification,
DataFrame,
DataSet,
Jointures,
Machine Learning,
matplotlib,
matrice,
Numpy,
pandas,
python,
Series,
SGBD-R,
vecteur
dimanche 9 septembre 2018
IA : Neuromimétique, la régression linéaire
Nous revoilà sur un sujet un peu plus sympa pour ce début septembre, la régression linéaire.
Cet article aurait du être publié en août mais le temps a manqué, et j'ai voulu profiter du précédent article sur les Streams [1] pour essayer une approche un peu différente de ce tour d'horizon de ce que l'on peut faire avec un neurone!
Du coup aujourd'hui, il s'agit de présenter la régression linéaire en s'appuyant sur les Streams Java. Comme nous l'avions vu dans les articles précédents sur l'IA [2], nous allons créer un jeu de données d'apprentissage et un jeu de donnée de test sur deux cas d'utilisations (en fait 3 nous verrons pourquoi):
Enfin concernant le mode d'apprentissage, nous utiliserons un apprentissage supervisé. Nous n'avions pas beaucoup parlé de ce point dans nos précédents articles sur la classification [2] [4], ou nous avions élaboré un modèle basé sur une correction simple du vecteur des paramétrés portés par les dendrites du neurone. Ici ça sera l'occasion de découvrir la descente de gradient [5] et par la même occasion quelques fonctions de coût nous permettant d’évaluer l'efficacité de notre modèle.
Pour bien comprendre cet article, je vais d'abord en donner les lignes directrices:
Voila, ça va être dense!
Nous voila donc une ébauche de neurone et une structure de données pour gérer les données d'apprentissage.
Cet article aurait du être publié en août mais le temps a manqué, et j'ai voulu profiter du précédent article sur les Streams [1] pour essayer une approche un peu différente de ce tour d'horizon de ce que l'on peut faire avec un neurone!
Du coup aujourd'hui, il s'agit de présenter la régression linéaire en s'appuyant sur les Streams Java. Comme nous l'avions vu dans les articles précédents sur l'IA [2], nous allons créer un jeu de données d'apprentissage et un jeu de donnée de test sur deux cas d'utilisations (en fait 3 nous verrons pourquoi):
- l'un sur l'identification de paramètres : nous allons donc demander a notre neurone de nous donner les paramètres (a,b) d'une droite tel que y=a.x+b
- l'un sur la construction d'un modèle prédictif partant d'une droite bruité artificiellement (nous traiterons ici de plusieurs cas différents afin de considérer les situations qui marchent bien de celles, moins pertinentes)
Enfin concernant le mode d'apprentissage, nous utiliserons un apprentissage supervisé. Nous n'avions pas beaucoup parlé de ce point dans nos précédents articles sur la classification [2] [4], ou nous avions élaboré un modèle basé sur une correction simple du vecteur des paramétrés portés par les dendrites du neurone. Ici ça sera l'occasion de découvrir la descente de gradient [5] et par la même occasion quelques fonctions de coût nous permettant d’évaluer l'efficacité de notre modèle.
Pour bien comprendre cet article, je vais d'abord en donner les lignes directrices:
- Tout d'abord, comme nous n'utilisons pas encore de frameworks spécifiques pour le machine learning (comme scikit-learn [6]) ou de framework de réseau de neurone comme Tensor-Flow [7] ou Keras [8]), il nous faut d'abord construire un neurone, lui donner une implémentation pour la fonction d'activation, et lui donner une fonction d'apprentissage.
- Ensuite, nous tacherons de monitorer le neurone lors de son fonctionnement afin de nous permettre d'observer comment vont évoluer ses paramètres lors de l'apprentissage, et comment va évoluer son efficacité en fonction de ses paramètres.
- Enfin, nous ferons une petite séance de visualisation de données sous python afin d'avoir des schémas explicatifs des données monitorées.
Voila, ça va être dense!
Le neurone
Nous en avions déjà fait un en python pour la classification. Ici on va aller a l'essentiel:- Un tableau de paramètre représentant les poids des dendrites (biais inclus).
- Une fonction linearInfer permettant le calcul de la sortie du neurone (produit matricielle du vecteur d'entrée avec le vecteur des poids) inféré sur la fonction d'activation linéaire).
- Une fonction d'apprentissage learnStep permettant la correction des poids selon des données étiquetés fourni par la classe Data
- Quelques méthodes utilitaires comme la méthode reset permettant d'initialiser les données des poids de façon aléatoire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | public class Neurone { public Double[] dendrites; public Neurone(int inSize) { this.reset(inSize); System.out.println(this); } public void setParameter(Double v,Double b) { this.dendrites[0]=v; this.dendrites[1]=b; } public void reset(int inSize) { this.dendrites= Stream.generate(() -> Math.random()/1000).limit(inSize+1).toArray(Double[]::new); } public Double linearInfer(Double[] stepInputs) { ... } public void learnStep(Set<Data> datasSet) { ... } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class Data { public Double[] input; public Double output; public Data(Double[] input,Double output) { this.input=input; this.output=output; } } |
Nous voila donc une ébauche de neurone et une structure de données pour gérer les données d'apprentissage.
Libellés :
Apprentissage,
classification,
DataSet,
gradient,
IA,
intelligence artificielle,
Java 8,
Machine Learning,
matplotlib,
pandas,
regression lineaire,
Réseaux Neurones,
Scikit Learn,
Streams,
visualisation
Inscription à :
Articles (Atom)