Thématiques principales

samedi 17 février 2018

IA : Petit point de littérature

Petit retour sur quelques lectures du début d'année .

Un premier livre qui donne des bases théoriques et techniques complètes en machine learning, pour ceux qui aiment le python je recommande vivement, et pour les autres aussi car Scikit learn est un incontournable, donc c'est aussi une bonne occasion de se mettre au python.

A destination d'un public avec un minimum de bagages techniques...

Machine Learning avec Scikit-Learn




Le second livre est traite du deep learning. Honnêtement, un peu déçu, l'ouvrage s'adresse vraiment a qui ne connait vraiment rien sur le sujet, (même pas qu'il nécessite de maîtriser quelques rudiments de calcul matriciel), en même temps, il est vraiment que ce n'est qu'une "introduction". 

Je conseille aux pures novices, qui étudient le sujet par curiosité.

Comprendre le Deep Learning




Un troisième ouvrage sur lequel je ne fondais pas beaucoup d'espoirs... Et grosse surprise, un ouvrage bien construit et complet, suffisamment abstrait sur les sujets du Dig Data, du ML et des rudiments du DL pour conclure que : 
  • tout manager se doit de le lire pour comprendre le monde qui se profile ces prochaines années 
  • suffisamment technique pour orienter les techos sur les frameworks principaux des ces domaines avec la bonne dose d'explications pour en comprendre les utilisations et les architectures types 

Un indispensable je pense pour celui qui veut entrer dans ces trois sujets a la fois et en comprendre les tenants et aboutissants.

Big Data et Machine Learning


Voila un petit aperçu de mes dernières lectures, ces dernières me serviront pour les prochains articles  qui traiteront de l'IA mais avant il reste deux à traiter
Mais je reviendrais sur ces deux livres

jeudi 15 février 2018

SGBD-R : Jointures

A la base je pensais ne faire qu’un article sur l'algèbre relationnelle mais les jointures se sont révélées être un sujet plus qu'intéressant a traiter a elles seules donc voici la suite de l’article [10] dédié exclusivement aux jointures.
Les jointures sont les opérations avancées de l’algèbre relationnelles les plus importantes [5]. Elles pourraient être le propos d’un article à elle seule mais nous ne voulons que donner du sens à leur utilisation, nous ne rentrerons donc pas dans le détails (et le cas échéant cela sera l’occasion d’en faire un autre article) (et en fait c’est le cas mais c’était pas prévu)


Reprenons les éléments de l’article précédent [10] :

CREATE TABLE "Client"
(
 nom            varchar(40) NOT NULL,
 produit        varchar(40) NOT NULL
);
CREATE TABLE "Produit"
(
 produit        varchar(40) NOT NULL
);
INSERT INTO "Produit" VALUES ('epad');
INSERT INTO "Produit" VALUES ('asis');
INSERT INTO "Produit" VALUES ('windause');
INSERT INTO "Client" VALUES ('thomas','epad');
INSERT INTO "Client" VALUES ('thomas','asis');
INSERT INTO "Client" VALUES ('kevin','windause');
INSERT INTO "Client" VALUES ('kevin','asis');
INSERT INTO "Client" VALUES ('paul','asis');
Ajoutons un nouvel attribut disponibilité a la relation Produit et mettons a jour les donnée
alter table "Produit" add disponibilité boolean;
update "Produit" p set "disponibilité" = true where p.produit='windause';
update "Produit" p set "disponibilité" = true where p.produit='epad';
update "Produit" p set "disponibilité" = false where p.produit='asis';
Il existe différents types de jointures.

    Equi-jointure 

    L’equi-jointure est une opération construisant une nouvelle relation faisant l’union des attributs des deux relations initiales et contenant les enregistrement conforme a la condition. Attention cela va dédoublé l’attribut commun [6]
      select * from "Client" c inner join "Produit" p on p.produit=c.produit;
      client equi-jointure produit
      nom
      produit
      produit
      disponibilité

      thomas
      epad
      epad
      t

      thomas
      windause
      windause
      t

      kevin
      windause
      windause
      t

      paul
      asis
      asis
      f

      kevin
      asis
      asis
      f

      thomas
      asis
      asis
      f

      A noter que la jointure part du produit cartésien en y apposant une restriction et la formule ci dessus peut s'écrire ainsi (mais on n'évitera):
      select * from "Client" c, "Produit" p where c.produit = p.produit;

      Jointure complète


      Ou full join cette jointure est une jointure similaire à l'équi-jointure inner mais les résultats seront tendu par des attributs vide

      Par exemple en ajoutant:

      insert into "Client" values ('toto', '');
      La commande jointure complète suivante fournira (alors que l'équi-jointure fournira le même résultat):
      select * from "Client" c FULL JOIN "Produit" p on p.produit=c.produit;
      client equi-jointure produit
      nom
      produit
      produit
      disponibilité

      thomas
      epad
      epad
      t

      thomas
      windause
      windause
      t

      kevin
      windause
      windause
      t

      paul
      asis
      asis
      f

      kevin
      asis
      asis
      f

      thomas
      asis
      asis
      f

      toto




        Jointure naturelle 


        La jointure naturelle [7] retourne la fusion des deux tables et est donc équivalente à l'équi-jointure sans le doublon ni condition (celle ci étant implicite au attribut commun aux deux relations).

          client jointure naturelle produit
          nom
          produit
          disponibilité

          thomas
          epad
          t

          thomas
          windause
          t

          kevin
          windause
          t

          paul
          asis
          f

          kevin
          asis
          f

          thomas
          asis
          f

          Auto-jointure 

          L'auto Jointure est une equi jointure classique pour les tables jointes sont les même. Ce genre de jointure est utilisé lorsque des attributs références d’autres attributs de la même tables [8]
           

          La jointure cartésienne ou cross join est équivalent au produit cartésien que nous avons vu précédemment

          Theta jointure 

          La thêta jointure part du même principe que l'équi-jointure mais en ne se limitant pas à l'égalité des colonne mais en utilisant des inégalités pour construire la jointure.

          Semi-jointure

          Les semi-jointures sont des jointures sur lesquels on privilégie lors de la construction de la condition, le contenu d’une relation par rapport a une autre. Cette jointure peut être stricte ou non. C’est a dire excluant ou non les éléments partagé [9].

          Par exemple :

          select * from "Client" c LEFT join "Produit" p on c.produit = p.produit;
          client equi-jointure produit
          nom
          produit
          produit
          disponibilité

          thomas
          epad
          epad
          t

          thomas
          windause
          windause
          t

          kevin
          windause
          windause
          t

          paul
          asis
          asis
          f

          kevin
          asis
          asis
          f

          thomas
          asis
          asis
          f

          toto




          La version strict de cette requête nous produira alors:

          select * from "Client" c LEFT join "Produit" p on c.produit = p.produit where p.produit is null;
          client equi-jointure produit
          nom
          produit
          produit
          disponibilité

          toto




          Bien sur la requête a droite est équivalente à inverser dans la requête les Tables Client et Produit ainsi que les variables p et c.

          A noter que l’on peut utiliser le mot clef outer entre left et join mais que cela n'amène pas de changement sémantique particulier.
          Pour le dernier article dédié aux SGBR-R, nous terminerons sur les formes normales 4, 5 et 6.

          Références

          [2] https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0ahUKEwiaivuwvaDZAhUCSBQKHWpXDd4QFgguMAE&url=http%3A%2F%2Fwww.i3s.unice.fr%2F~edemaria%2Fcours%2Fc3.pdf&usg=AOvVaw05kk_PL5IdXIxKsT1WdRlm
          [4] http://sqlpro.developpez.com/cours/divrelationnelle/
          [5] http://sql.sh/cours/jointures
          [9] https://fr.wikipedia.org/wiki/Jointure_(informatique)
          [10] http://un-est-tout-et-tout-est-un.blogspot.com/2018/02/sgbd-r-algebre-relationnelle.html