vendredi 28 avril 2023

exo4 python initiation

La correction de l'exercice exo3 python initiation est en bas de page.

 EXO4 python initiation.

Soit une liste de tuple :

[(‘a’ ,’b’) , (‘c’, ‘d’) , (‘e’, ‘f’)]


On souhaite obtenir une liste transposée de la forme suivante :

[(‘a’,’c’,’e’), (‘b’,’d’,’f’)]


1) Ecriture de la fonction transpose(liste) → liste

Sachant que , les tuples ont toujours la même taille au sein de la liste.

La fonction doit fonctionner quelque soit la taille de la liste et des tuples.

Elle retournera une liste.


2) Refactoriser cette fonction de manière à la mettre sous forme de classe et méthode

Ajouter une méthode qui retourne le tuple(nb_element_liste, nb_element_tuple)

(pour notre exemple , cette méthode retournera (3,2)


3) Pour la fonction ou la méthode ajouter de la documentation intégrée.



Correction exo3

def palindrome(mot):
    a = mot[::-1]
    if a == mot:
        return True
    else:
        return False
 
print(palindrome('essai'))
print(palindrome('rotor'))            
 

mercredi 26 avril 2023

Réflexions sur l'intelligence artificielle

 Ci-dessous le fruit d'une collaboration avec Marc Robichon ayant pour point de départ l'IA.


Depuis cette publication une série d'évènements sur le terrain de l'IA s'est déroulée:

  • Interdiction de ChatGPT en Italie : c'est à mon avis une mauvaise décision.
  • Intégration de chatGPT dans le moteur de recherche Bing de Microsoft.
  • Signature d'une pétition par des acteurs informatiques pour demander une pause dans la recherche de l'IA
  • Un des signataires s'empresse de se relancer dans ce domaine.

 

Voici notre contribution: auteurs Marc ROBICHON et Eric GERMAN

Table des matières

I.A. Téléphone Maison. 1

1- Introduction – de quoi parle-t-on avec l’intelligence artificielle (IA) ?. 1

2- Etat de l'art de l’IA - niveau atteint par la recherche et applications industrielles. 2

3- Enjeux économiques, politiques et sociétaux – impacts sur les libertés individuelles. 4

4- De l’IA au transhumanisme – Quels questionnements pour nos réflexions citoyennes ?. 6

5- Bibliographie et références. 8

 

I.A. Téléphone Maison

1- Introduction – de quoi parle-t-on avec l’intelligence artificielle (IA) ?

 

L’intitulé de cet article est un clin d’œil au film E.T. de Spielberg. Nous pouvons à raison percevoir certaines avancées de l’intelligence artificielles comme suprahumaines, si ce n’est comme extra-terrestres. De plus avec le développement de la reconnaissance vocale et des possibilités conversationnelles, ce sont peut-être très bientôt des intelligences artificielles (IA) qui nous appelleront à la maison, ou alors nous répondront dans les services clients.

Ce qu’on regroupe actuellement sous ce terme d’IA ne désigne en réalité pas un agent autonome, une intelligence ou une entité pensante. Ce sont juste de nouveaux outils numériques qui peuvent servir des objectifs spécifiques. Comme pour tout nouvel outil, nous devrions nous demander :

·       En quoi ces outils d’IA diffèrent-ils des outils traditionnels ?

·       Dans quelle mesure sont-ils appropriés à une tâche donnée, et pour l’usage de qui sont-ils conçus ?

·       En quoi leur usage peut-il porter atteinte aux libertés, individuelles et collectives ?

Commençons par illustrer en quoi ces nouveaux outils diffèrent des outils informatiques traditionnels, à travers l’exemple du calcul du périmètre d’un rectangle.

Avec une méthode algorithmique traditionnelle, il faut connaitre la règle de gestion, la traduire en algorithme puis en programme, et disposer d’un jeu d’essai.

La règle de gestion est : Multiplier par deux la somme de la largeur et de la longueur.

En utilisant un langage de programmation, le programmeur déclare une fonction prenant pour paramètres d’entrée la largeur et la longueur du rectangle et pour paramètre de sortie son périmètre. Cette fonction traduit l’algorithme de calcul en instructions de programmation telles que :

périmètre := 2 * (largeur + longueur)

Le programmeur teste et valide ensuite cette fonction sur un ensemble d’exemples appelé jeu d’essai.

Avec une approche d’apprentissage automatique, on ne parle plus de programmeur mais de préparateur de données.

Sans avoir besoin de connaitre la formule de calcul du périmètre, ce préparateur collecte un grand nombre de données relatives à des calculs de périmètre, contenant la valeur des deux côtés et le résultat associé.

Puis il divise son jeu de données en deux, l’un pour entrainer un modèle d’apprentissage automatique et un autre pour mesurer la performance de son modèle.

A partir d’un jeu de données de mettons 100 lignes, il obtiendra un modèle avec taux de bonnes réponses de 100%.  Ce modèle ne « connaitra » en rien la formule de calcul du périmètre. Mais par apprentissage, il aura dégagé une ou plusieurs règles pour effectuer des prévisions de résultat.

Le préparateur de données n’a pas la certitude que son modèle donnera des prévisions toujours justes. Ce modèle pourra être mis en échec par des cas particuliers de données d’entrée qui auront échappé à son apprentissage, comme par exemple un côté de valeur nulle ou négative.

Quant aux usages et à leurs destinataires, ils ne cessent de se diversifier. Sont par exemple concernés les domaines de la conduite et du pilotage autonome, de la santé, le marketing et la publicité, les services clients en ligne et vocaux, la production de contenus écrits, visuels et musicaux, l’enseignement et à la formation, la recherche en biologie et en mathématiques, les jeux d’échecs, de go et vidéo, les recommandations de contenus audio et visuels...

 

 

2- Etat de l'art de l’IA - niveau atteint par la recherche et applications industrielles

 

L’analogie entre les réseaux de neurones artificiels d’une IA et ceux d’un humain n’est pas la plus pertinente. On peut plutôt s’inspirer des machines à crypter Enigma qui lors de la 2ème guerre mondiale servaient à encoder des messages. Elles étaient dotées de rangée d’engrenages, responsable d’une transformation du message. Le message issu d’une rangée était injecté à la rangée suivante qui a son tour appliquait une nouvelle transformation. Un système de réseau de neurones fonctionne sur le même principe : chaque couche est composée de récepteurs qui appliquent une transformation aux signaux entrants, et chaque résultat sera à son tour injecté dans la couche suivante.

L’enjeu d’un dispositif auto-apprenant est de partir du résultat pour remonter aux données initiales.

La difficulté mathématique revient à déterminer à partir du résultat d’un coup de billard, comment arriver à retracer le parcours de la boule, à modifier la force, les angles d’attaque pour que la bille vienne percuter la cible. Un modèle IA a besoin pour s’entrainer d’un nombre de données le plus grand possible.

Pour établir un état de l’art de l’IA, il faut donc s’intéresser à l’une de ses composantes essentielles qui est celle de l’apprentissage. Il existe actuellement trois grands modes d’apprentissage automatique, qu’on nomme respectivement supervisé, non supervisé et par renforcement.

Dans l’apprentissage automatique supervisé, on dispose de données collectées qui ont contribué à un résultat mesuré.


 

 

Prenons l’exemple de prévisions pour le marché immobilier. On dispose d’un jeu de données concernant la superficie d’une habitation, son nombre de pièces, son nombre de chambres, sa localisation, avec comme résultat le montant de la cession. A partir de ces données, il est possible d’obtenir un modèle de prévision du prix de vente d’un bien.

Ou alors dans le domaine de la prévention de risques médicaux. A partir de données d’observation médicale sur des patients et de leur diagnostic avéré, on établira une classification de patients à risque ou non.

Dans l’apprentissage non supervisé, on dispose d’ensembles de données collectées sans leur assigner une finalité à priori.

Dans le cas de la commercialisation de vêtements, à partir de volume de ventes d’un vêtement, on pourra par exemple établir la cartographie des tailles des acheteurs.

L’apprentissage automatique par renforcement, quant à lui, s’applique quand des contraintes de temps réel rendent inadaptés les deux modes d’apprentissage précédents.

Ce mode consiste à « éduquer » un modèle en le « récompensant » quand il se comporte comme attendu, et en le pénalisant dans le cas contraire.

Ce mode est ainsi utilisé pour les IA de pilotage d’engin autonome ou de jeux.

Le rover d’exploration martienne Curiosity utilise cette technologie depuis une mise à jour logicielle. Là où un observateur humain à distance aurait 24 % de réussite pour déclencher l’observation et les mesures d’un site géologique pertinent, Curiosity dépasse les 90 % de réussite.

Pour ces trois modes d’apprentissage, ce qui a fait entrer l’IA dans une nouvelle dimension est la possibilité d’utiliser une profondeur de calcul toujours plus importante par une parallélisation massive des traitements. D’un apprentissage peu profond on est passé à un apprentissage profond (deep learning) avec plusieurs couches de réseau de neurones.

Les couches d'un réseau de neurones profond peuvent être comparées à des étages d'un immeuble. Chaque étage représente une couche de neurones qui traite les données d'une manière spécifique pour en extraire des informations utiles. Par exemple, dans un réseau de neurones utilisé pour la reconnaissance d'images, la première couche peut être utilisée pour détecter des contours simples dans l'image, tandis que la deuxième couche peut être utilisée pour reconnaître des formes plus complexes, comme des visages ou des objets. Chaque couche ultérieure peut alors utiliser ces informations pour reconnaître des motifs encore plus complexes, jusqu'à ce que le réseau de neurones soit en mesure de donner une prédiction précise sur ce qu'il voit dans l'image.

En termes de grands acteurs industriels, on trouve l’ensemble des GAFAM (Google, Apple, Facebook, Amazon, Microsoft), en commençant par la société DeepMind filiale appartenant à Google. Celle-ci s’est fait connaitre avec AlphaGo, qui a battu le champion du monde de jeu de Go en 2017, et avec Alphafold, qui est capable de prédire la structure tridimensionnelle des protéines à partir du séquençage de l’ADN des gènes qui les expriment.

Elon Musk n’est pas en reste avec sa participation initiale dans la société OpenAI, qui est à l’origine de l’agent conversationnel ChatGPT. Toute la presse en parle actuellement. Microsoft se serait déjà engagé à investir plus 10 Milliards de dollars dans cette société, et va l’inclure dans son moteur de recherche Bing.

Les experts estiment qu’un cycle de recherche fondamentale est terminé et que les industriels vont passer au stade de la conception et de la fabrication de produits innovants à grande échelle. La course est à présent lancée avec deux compétiteurs de poids : les Etats-Unis et la Chine.

Une IA est déjà capable de piloter un véhicule sur terre et dans les airs dans la plupart des situations. Elle est aussi capable de reconnaitre un objet ou un visage mieux qu’un humain. Elle dépasse l’humain dans sa capacité à prendre en compte un grand nombre de paramètre pour formuler une assertion. Pour la majorité des sens dont sont dotés les humains, les IA les dépassent en précision.

Jusqu’à ce jour, les expérimentations portaient sur des systèmes d’IA séparant la vision, le toucher, la préhension, la motricité… Maintenant, les expérimentations se font sur l’assemblage de ces systèmes afin de les faire travailler en coopération. Par exemple, il est possible de demander à une IA de « regarder » un match de football, puis d’en faire un compte-rendu susceptible d’être publié dans un magazine sportif.

Les trois ingrédients pour fabriquer une IA sont des données en grand nombre et si possible annotées, des modèles mathématiques ou des algorithmes reposant sur des calculs parallélisables, et des infrastructures multiprocesseurs pour exécuter les calculs unitaires. Dès lors que ces trois ingrédients sont réunis, le passage au mode industriel est possible. Le plus souvent une IA arrive à s’autofinancer : par un effet de substitution de l’humain par la machine, par les gains de productivité ou par la revente des données collectées.

Prenons l’exemple du « foncier innovant » de la Direction générale des Finances publiques (DGFiP). Des photos satellite sont traitées par une IA qui rapproche les surfaces bâties avec le plan cadastral. Les piscines non déclarées font l’objet d’une émission d’un redressement fiscal. Le gain en termes d’imposition compense largement l’investissement et l’exploitation de ce dispositif. Ce dispositif n’est pas exempt de critiques notamment issues des syndicats, car l’administration a recours à la puissance de calcul de Google, elle sous-traite la maitrise du dispositif à des sociétés privées, et la qualité des données recueillies peut poser question.

 

3- Enjeux économiques, politiques et sociétaux – impacts sur les libertés individuelles

 

Les données collectées pour et par les IA viendront grossir le patrimoine des systèmes existants. Elles pourront être revendues à des tiers comme d’autres entreprises commerciales ou des administrations. Une IA n’a pas besoin de données nominatives, elles peuvent donc être monétisées sans enfreindre les lois comme celle du Règlement général sur la protection des données (RGPD).

Ainsi un célèbre éditeur de solution d’assistance à la conduite (GPS) revend les données collectées à la sécurité routière. Il est donc possible pour cette administration d’établir une cartographie des vitesses moyennes avec une précision de 100 m, et de placer des radars précisément là où le plus grand nombre d’excès de vitesse est mesuré.

Les entreprises de flottes de vélos ou de trottinettes en location reposent sur la collecte des données pour leur propre usage, et aussi pour la revente des données servant à alimenter les IA de différents organismes. Une trottinette rapporte de l’argent en plus de celui récolté par sa mise en circulation.

On peut aussi citer une grande enseigne de la distribution qui a investi dans un système de détection automatique de comportement de vol à l’étalage au travers de son réseau de caméras. La collecte des données au moyen des films de vidéo-surveillance a été réalisée dans ses enseignes en Bulgarie, où la législation est plus souple. Là où un humain ne peut scruter qu’une dizaine d’écrans au maximum, l’IA en analyse plus d’une centaine.


L’IA représente-t-elle une révolution ? Il est trop tôt pour le dire. L’électricité a mis 50 ans pour atteindre 50 millions d’utilisateurs, Internet 3 ans et ChatGPT moins de 2 mois. L’IA constitue une solution à des problèmes dans les pays développés connaissant à la fois un recul de la natalité et une augmentation de la durée de vie. Les assistants de vie dotée d’une IA capable d’anticiper les besoins ou tout simplement d’y répondre viendront peut-être nous accompagner dans notre vieillesse, tout comme les voitures autonomes pourraient être une solution à la perte de mobilité.  Internet a été une révolution sans douleur car elle touchait d’abord des métiers d’un domaine proche qui était celui de l’informatique. Par contre, l’IA touche des domaines bien plus éloignés et des professions à hauts revenus, souvent catégorisées comme créatives. Du jour au lendemain, des cols blancs pourraient se retrouver déclassés socialement, avec une perte des revenus. Les informaticiens ne seraient pas épargnés, car modéliser une IA peut se faire avec un nombre réduit de spécialistes qui n’ont pas besoin d’être des experts du domaine d’application. De plus, les IA peuvent servir à créer très rapidement de nouveaux logiciels.

Est-ce que l’IA est énergivore ? C’est souvent le reproche fait aux technologies de type « blockchain » qui sont utilisées pour les monnaies virtuelles comme le bitcoin. C’est moins vrai pour les systèmes d’apprentissage automatique. La quantité de calcul à produire n’est pas en pure perte comme sur les calculs de blockchain.

Il est aussi possible de repartir d’un modèle déjà entrainé et de lui injecter des nouvelles données sans aucun rapport avec son entrainement initial. Ainsi sur les sites spécialisés comme « kaggle », on peut trouver des jeux de données mais aussi des modèles « prêt à l’emploi ».

Transposons l’exemple du début sur le calcul d’un périmètre à des domaines moins anodins, comme celui du ciblage publicitaire ou informationnel. Des chercheurs ont constaté que la logique des systèmes d’IA se calquait sur le comportement du plus grand nombre d’individus ayant des profils voisins. Il y a là un risque certain d’auto-amplification d’opinions ou de comportements, certes majoritaires dans une catégorie donnée, mais parfois néfastes pour le bien individuel ou commun. Ainsi, en août 2022, la société Meta lançait la nouvelle version de son agent conversationnel en ligne (chatbot), sous la forme d’une démonstration accessible à tous les Américains. Il n’a fallu que deux jours pour que cette intelligence artificielle ne devienne conspirationniste et relaye des fausses informations acquises lors de ses interactions avec les humains.

De plus, les acteurs mondiaux qui possèdent déjà, et de loin, les plus vastes jeux de données relatives à nos comportements individuels sont privés et non pas publics. Il s’agit notoirement de nos banques, d’Amazon, et bien sûr des GAFAM. De ce fait le crédit accordé par les citoyens à leurs institutions administratives, éducatives ou judiciaires risque d’être de plus en plus minoré par rapport à l’influence d’acteurs privés ne visant que la maximisation de leurs profits.

Yuval Noah Harari, l’auteur de Sapiens et d’Homo Deus, met l’accent sur l’orientation prévisibles de nos choix individuels. Il imagine que l’IA pourrait un jour prendre de meilleures décisions que nous-mêmes, en matière de plan de carrière ou de relations sociales : « Imaginez Emma Bovary demandant à l’assistant Siri d’Apple si elle doit rester avec son mari ou le quitter… ».


 

 

Olivier Ertzscheid, chercheur en sciences de l’information, va encore plus loin. Pour lui, « le combat des 10 dernières années fut de limiter l’impact de l’empreinte algorithmique sur nos vies privées et intimes. Ce combat-là est terminé, obsolète et pour l’essentiel perdu… C’est le combat pour limiter l’impact de l’algorithmique décisionnelle sur notre vie publique, sur nos infrastructures sociales communes et sur notre destin collectif… Il ne s’agit pas simplement d’intelligences humaines et d’autres « artificielles ». Il s’agit de la liberté des peuples. Il s’agit de la liberté, tout court. ».

C’est enfin le modèle économique des GAFAM qui est bouleversé par ces nouveaux outils. Ce modèle repose actuellement sur une monétisation des clics des utilisateurs, via la publicité ou les liens sponsorisés. Vincent Lorphelin nous alerte sur le fait que « la nouvelle génération d’IA retire des raisons de passer du temps ou de naviguer sur le Web. Or, ce temps et ces clics sont monétisés, ce qui questionne le cœur même d’Internet : son modèle publicitaire. En réaction, les GAFAM ne résisteront probablement pas à la tentation de remplacer la publicité par la manipulation. Le scandale de Cambridge Analytica a montré, dès 2014, qu’il était possible d’influencer le vote des électeurs en leur présentant individuellement des informations fabriquées… Désormais, une utilisation similaire de l’IA de nouvelle génération permettra de vendre au plus offrant non plus une audience mais un service d’apport direct de chiffre d’affaires, voire d’une quantité d’opinions favorables ou défavorables. »  

4- De l’IA au transhumanisme – Quels questionnements pour nos réflexions citoyennes ?

 

Le domaine de prédilection de l’IA était jusqu’à présent de compléter l’humain, de l’aider dans ses tâches. Les expérimentations et les applications visaient à prolonger artificiellement le bon fonctionnement du corps avec par exemple des implants cochléaires, des régulateurs cardiaques ou d’insuline, des prothèses intelligentes. Ces expérimentations visent maintenant à simuler l’ensemble du comportement social d’une personne.

Deviendra-t-il possible d’interconnecter directement un cerveau humain à une IA, afin d’augmenter prodigieusement ses capacités de perception, de calcul et de décision ? C’est déjà le projet de la startup Neuralink, cofondée par Elon Musk.

Et de façon plus lointaine, sera-t-il possible de transposer tout ce qui constitue l’individualité et la conscience d’une personne pour l’implanter dans une machine, lui permettant d’accéder à une forme d’immortalité ?

Sur ces sujets, la grande question qui divise actuellement les chercheurs est celle de savoir à quelles conditions une IA deviendrait consciente. D’après Christophe Koch, directeur d’un institut pour les sciences du cerveau à Seattle, deux conceptions s’opposent actuellement quant à la possibilité d’une telle conscience artificielle.

La première conception repose sur les connaissances actuelles de la structure du cerveau. Il existerait un espace central de travail essentiel à la cognition, qui à un moment donné ne peut contenir qu’une seule perception, pensée ou souvenir. Imaginez qu’on vous présente un chocolat. La vue de ce chocolat va déclencher dans votre cerveau une vague d’excitation neuronale, qui se propagera depuis l’espace central de travail vers l’ensemble de zones de votre cerveau.


Ce signal devient alors accessible à des sous-systèmes et des processus tels que le langage, la planification motrice, le circuit de récompense, la mémoire etc. C’est cette diffusion globale que nous appelons conscience. Si nous pouvions simuler ces processus au sein d’une IA, alors elle deviendrait consciente comme nous.

La seconde conception, plus récente, repose sur la théorie de l’information intégrée. Pour cela, on part de la nature de notre expérience consciente pour en déduire les propriétés du système physique qui la supporte. Il en découle que les sous-systèmes et les processus évoqués précédemment doivent interagir et s’influencer mutuellement., au travers d’un pouvoir causal intrinsèque. L’importance de cette influence mutuelle est quantifiée par une mesure appelée degré d’information intégrée. Plus un système possède une valeur élevée de cette mesure et plus il est conscient. Dans une IA actuelle reposant sur des réseaux de neurones organisés en couches, on montre que ce degré d’information intégrée est quasi nul. Le système d’IA est extrêmement éloigné du degré de connectivité d’un cerveau humain comprenant 100 milliards de neurones interconnectés chacun par une moyenne de 10 000 axones.

Une simulation informatique du cerveau, même très réussie, ne produirait pour cette raison aucune forme de conscience artificielle. Nous aurions affaire à un zombie, totalement dénué d’émotions.

En supposant que ces limitations soient surmontées, les machines intelligentes devraient alors passer d’un statut d’objet à celui de sujet, avec des droits et des devoirs, sociaux, politiques et moraux. En supposant résolu le problème du transfert complet d’une conscience humaine vers une conscience artificielle, le projet transhumaniste pourrait atteindre son but d’immortalité. Mais là nous entrons dans les domaines du fantasme, de la science-fiction ou du cauchemar, selon nos convictions personnelles.

Il ne faut surtout pas que ces fantasmes occultent les enjeux bien réels de ces outils d’IA.  Comme nous l’avons montré, ces nouveaux outils combinent les traitements statistiques de quantités phénoménales de données personnelles, scientifiques, artistiques et culturelles, avec des algorithmes et des réseaux de neurones artificiels capables d’apprentissage. Mais contrairement aux algorithmes, les réseaux de neurones sont comparables à des boîtes noires. Ceux-ci produisent des résultats exploitables sans que personne ne puisse savoir précisément par quels processus ces résultats sont fournis et s’ils sont valides. C’est cette obscurité des traitements qui rend leur contrôle difficile voire impossible.

Notre devoir de citoyens engagés est de veiller à ce que de nouvelles règles de transparence et de contrôle démocratique soient édictées, et s’appliquent de façon impérative à ces outils, au niveau national comme européen. Le pire scénario serait que nos pouvoirs démocratiques abdiquent au bénéfice d’acteurs mondiaux motivés exclusivement par l’accroissement de leurs monopoles, de leurs profits et des dividendes versés à leurs actionnaires. Or la grande majorité de nos représentants démocratiquement élus ne possède actuellement pas les compétences techniques et scientifiques requises pour comprendre et mesurer ces enjeux. Seule la société civile pourra convaincre les acteurs politiques de pallier ces carences par tous les moyens à leur disposition.


 

5- Bibliographie et références

 

 

https://www.vice.com/en/article/y3pezm/scientists-increasingly-cant-explain-how-ai-works

 

https://www.science.org/content/article/curiosity-rover-decides-itself-what-investigate-mars

 

https://chat.openai.com/auth/login

 

https://www.numerama.com/tech/179032-une-ia-fera-journaliste-sportif-chez-associated-press.html

https://www.impots.gouv.fr/sites/default/files/media/2_actu/home/2022/dp_foncier_innovant.pdf

http://www.financespubliques.cgt.fr/content/le-foncier-innovant-une-entreprise-de-sabotage-du-plan-cadastral-en-bande-organisee

https://www.lemonde.fr/idees/article/2023/01/19/chatgpt-le-risque-de-manipulation-de-masse-va-exacerber-la-bataille-de-l-image-entre-geants-du-web_6158563_3232.html

https://www.craiyon.com/ 

Exemple de demande : « La Gare du Nord dans le genre d'Edward Hopper »


https://cursus.edu/fr/25952/intelligence-artificielle-en-frenesie-essayez-plus-de-60-applications-publiques-mise-a-jour

 


samedi 22 avril 2023

Datascience: préparation des données, comment détecter les données hors champ

 Dans la continuation de l'article sur le nettoyage des données, je vais aborder l'étape suivante dans la préparation des données: réduire les données à traiter en se concentrant sur les données représentatives.

 

La réduction ou la suppression de facteur est un enjeu primordial car cela réduira la taille des calculs à effectuer  

Suppression des doublons.

Une première tache sera de supprimer les lignes en double, une ligne doublée n'apporte pas d'information supplémentaire et peuvent même introduire un biais. 

Pandas offre des méthodes pour détecter les doublons et supprimer les lignes: duplicated() et drop_duplicates()

Exemple:


Suppression des données non informatives.

La première des techniques est de supprimer les facteurs présentant une variance nulle ou faible.

Exemple:  une colonne qui ne contiendrait qu'une valeur , aurait une variance nulle et n'apporterait aucune information utilisable.

La colonne x5 contient qu'une valeur pour toutes les lignes. On peut la supprimer.





La méthode nunique()  de Pandas est utile pour détecter les colonnes inutiles et les supprimer avec la méthode drop().

Avec SKLearn.

Sklearn offre une méthode puissante basée sur le seuil de la variance:  VarianceThreshold()

Création d'un jeu de données

from sklearn.datasets import make_regression
X, y = make_regression(n_samples=20, n_features=4,n_informative = 2,  noise=3, random_state=42)
data = pd.DataFrame(X, columns=['x1', 'x2', 'x3', 'x4'])
data.insert(4, 'x5', 0.2)
data.head() #=>
 



Réduction des dimensions
from sklearn.feature_selection import VarianceThreshold
from sklearn import set_config
# nouveau dans sklearn sortie vers Pandas
#set_config(transform_output = "pandas")
print('format avant:', data.shape)
variance = VarianceThreshold().set_output(transform= 'pandas')
dt2 = variance.fit_transform(data.iloc[:,:4])
print('format apres:',dt2.shape)
 
#=>
#format avant: (20, 5)
#format apres: (20, 4)


Il est possible de fournir à VarianceThreshold un seuil de variance et ainsi elargir le champ de
la suppression.
Dans le prochain article on verra comment supprimer les valeurs hors limite qui viennent perturber
l'entrainement des modèles.

vendredi 21 avril 2023

exo-3 Python initiation

 La solution de l'exo-2 est bas de l'article.


Enoncé de l'exercice 3 python initiation.


Ecrire une fonction qui prend en paramètre une mot et qui retourne VRAI OU FAUX en fonction de la nature mot: est il un palindrome ou non.  Un palindrome est un mot qui se lit dans les deux sens.

exemple: 

print(palindrome('essai'))
print(palindrome('rotor'))    

retournera False puis True

Solution de l'exo-2 initiation.


with open('fichier_exo2.txt') as file:
    lignes= file.readlines()
 
cp = 0
lg = len(lignes)
bloc =''
for ligne in lignes:
    ligne = ligne[:-1]
    if ligne[-6:] == ' suite':
        bloc += ligne[:-5]
 
    else:
        if len(bloc) > 0 :
            cp += 1
            print(f"({cp}){bloc}{ligne}")
            bloc =''
        else:
            cp += 1
            print(f"({cp}){ligne}")
 

dimanche 16 avril 2023

A la recherche de la donnée perdue: avec Pandas et sklearn

 Les jeux de données pour alimenter un dispositif d'apprentissage automatique ne sont pas toujours homogènes ou cohérents. Il y a parfois des 'trous' dans les données. Ces manques peuvent avoir diverses origines: mauvais relevé, erreur de type ou d'encodage.

 La méthode info() d'un dataframe permet de connaitre l'état général des données : type et remplissage!;

 
dt.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   X       16 non-null     float64
 1   y       20 non-null     float64
dtypes: float64(2)
memory usage: 448.0 bytes
ici , on traitera des données de type 'float' et 4 données de la première colonne sont manquantes:
None ou 'nan' :not a number

Le détail par ligne: 
dt[dt.isnull().values]
        X	    y
3	NaN	-52.517783
5	NaN	-23.697502
10	NaN	-13.255462
12	NaN	8.366929
Il n'est pas recommandé de conserver des données nulles dans son jeu de données. Les frameworks d'apprentissage
risquent de dysfonctionner. Face à ce problème, il peut y avoir plusieurs stratégies:
Supprimer la ligne entière ou essayer de 'combler' les trous.
Supprimer les lignes incomplètes est une option valable quand le nombre de lignes 'saines' est important.
Dans le cas présent, le jeu de données serait amputé de  4 lignes sur 20 => 1/5eme, la proportion est trop importante.
l'opération est plutôt simple, elle se fait par la méthode dropna()
Penser à ajouter l'option inplace=True pour mettre à jour le dataframe.
dt.dropna()
 
X	y
0	-1.913280	-87.286608
1	-1.724918	-79.815577
2	-1.412304	-58.442734
4	-0.908024	-27.520687
6	-0.469474	-19.956148
La ligne 3 a été supprimée.

Les solutions pour combler les manques.


On peut utiliser des  méthodes issues de Pandas ou d'autres plus sophistiquées portées par le framework scikit-learn (sklearn).

Les solutions Pandas

Elles sont couvertes par les méthodes:  replace() , fillna() , interpolate().
Replace est la plus généraliste: elle permet de remplacer une donnée par une autre.
Dans le cas présent il faut déterminer la valeur de remplacement. On peut comme ici mettre la valeur 0 en lieu et place des valeurs indéfinies.
La valeur  a remplacer est portée par le module numpy
dt.replace(np.nan , 0)
X	y
0	-1.913280	-87.286608
1	-1.724918	-79.815577
2	-1.412304	-58.442734
3	0.000000	-52.517783
4	-0.908024	-27.520687

La méthode fillna() est plus puissante , on peut choisir la valeur de remplacement suivant plusieurs méthodes:
 ‘backfill’, ‘bfill’, ‘ffill’, None   et  defaut None
Pandas utilisera la valeur, avant ou apres pour remplir les manques.
Exemple 
dt.fillna(method = 'bfill')  # ou dt.bfill()
	X	y
0	-1.913280	-87.286608
1	-1.724918	-79.815577
2	-1.412304	-58.442734
3	-0.908024	-52.517783
4	-0.908024	-27.520687

L'ordre des données est important, peut-être faut il trier les valeurs avant.
Ci dessous, un jeu de données est généré à partir de sklearn, assemblé dans un dataframe puis trié sur la colonne 'X'.

from sklearn.datasets import make_regression
X, y = make_regression(n_samples=20, n_features=1, noise=5, random_state=42)
print(X.shape)
print(y.shape)
dt = pd.DataFrame(zip(X.flat, y), columns = ['X', 'y'])
dt.sort_values('X', inplace =True)
 
 
(20, 1)
(20,)
           X          y
15 -1.913280 -87.286608
3  -1.724918 -79.815577
5  -1.412304 -58.442734
7  -1.012831 -52.517783
4  -0.908024 -27.520687
Pour terminer avec Pandas, la méthode  interpolate()  offre la possibilité de prédire les données manquantes en utilisant une regression linéaire.  Ici l'ordre de presentation importe peu.
Elle propose un bon nombre de résolution : 
  • 'linear’
  • ‘time’ pour les dates
  • ‘index’, ‘values’
  • ‘pad’ 
  • ‘nearest’
  • ,‘zero’
  • ‘slinear’
  • ‘quadratic’
  •  ‘cubic’
  • ‘from_derivatives’
 etc.

SKLearn , propose trois méthodes principales:

  • SimpleImputer : très basique, il remplace les valeurs par la moyenne , la médiane etc.
  • KNNImputer: utilise un algorithme basé sur le calcul de distance de voisinage de point
  • IterativeImputer: module experimental et très puissant.
Pour utiliser ces modèles, il est préférable de décharger le dataframe dans des structures numpy:


from sklearn.impute import KNNImputer,SimpleImputer
imp = IterativeImputer(random_state=0)
np1 = dt[['X', 'y']].to_numpy()
np2 = imp.fit_transform(np1)
simpl = SimpleImputer()
np3 = simpl.fit_transform(np1)
kn  = KNNImputer()
np4 = kn.fit_transform(np1)

Le graphisme ci-dessous visualise les résultats obtenus avec les différentes méthodes.
On commence par introduire des valeurs np.nan dans l'axe des X.

Par:
dt.iat[3, 0] = np.nan
dt.iat[10, 0] = np.nan
dt.iat[12, 0] = np.nan
dt.iat[5,0] = np.nan





Conclusion: ceux qui s'en sortent le mieux sont :
Pour Pandas : interpolate()
Pour SKLearn : KNNImputer (le meilleur) suivi de IterativeImputer mais il faudrait tester pour chacun les options disponibles.

from sklearn.metrics import mean_squared_error
print(mean_squared_error(dt_nan.X, np3[:,0] ))# SimpleImputer
print(mean_squared_error(dt_nan.X, np4[:,0] )) #KNNImputer
print(mean_squared_error(dt_nan.X, np2[:,0] )) # iterativeImputer
print(mean_squared_error(dt_nan.X, dt_inter.X )) #pandas interpolate
 
0.05726013724292493   # SimpleImputer
0.000988070710285649  #KNNImputer
0.002632595263623769  # iterativeImputer
0.003185180237325761  #pandas interpolate
Pour rappel, il n'est pas possible de connaitre à l'avance quel sera la meilleure solution.

vendredi 14 avril 2023

exo-2 python initiation

La solution de l'exercice 1 est donné à la fin de l'article.

 Exercice 2.


Soit un fichier contenant des lignes.

Une ligne de texte peut se continuer sur les lignes suivantes.

Le mot 'suite' est ajouté en fin de ligne pour indiquer que la suite est sur les lignes suivantes (1 ou n lignes)

exemple : 

mon texte ligne une

un autre texte suite

sur deux lignes   



Il faut afficher :

(1)mon texte ligne une

(2)un autre texte sur deux lignes

Un numéro de ligne est à ajouter en tout début de ligne.


Travail demandé.

1 ) Faire un programme qui va lire le fichier d'essai donné en exemple ici.

(telecharger le fichier et l'installer dans le répertoire du notebook)

Et qui produira le resultat suivant:

(1)Beautiful is better than ugly

(2)Explicit is better than implicit Simple is better than complex

(3)Complex is better than complicated

(4)Une histoire de poursuite

(5)Flat is better than nested Sparse is better than dense Readability counts

(6)Special cases aren't special enough to break the rules

(7)Although practicality beats purity

(8)Errors should never pass silently Unless explicitly silenced

(9)In the face of ambiguity, refuse the temptation to guess.

(10)There should be one-- and preferably only one --obvious way to do it.

(11)Although that way may not be obvious at first unless you're Dutch.

(12)Now is better than never


2 ) Même question mais en commençant par la derniere ligne pour terminer sur la première ligne.


Corrigé de l'exercice 1


#!/usr/bin/env python
# coding: utf-8
 
# Question 1 classe  Et logique
class EtLogique:
    '''simulateur de circuit logique ET'''
    def __init__(self):
        self.entreeX = 0
        self.entreeY = 0
        self.sortieET = 0
    def etat(self):
        self.sortieET = 0
        if self.entreeX == 1 and self.entreeY == 1:
            self.sortieET = 1
            return self.sortieET
        else:
            return 0
    def set_entreeX(self, valeur):
        if valeur:
            self.entreeX = 1
        else:
            self.entreeX = 0
 
    def set_entreeY(self, valeur):
        if valeur:
            self.entreeY = 1
        else:
            self.entreeY = 0
 
 
composant1 = EtLogique()
print(composant1.etat())
# 0
 
composant1.set_entreeX(1)
composant1.set_entreeY(True)
 
 
print(composant1.etat())
print(vars(composant1))
# 1
# {'entreeX': 1, 'entreeY': 1, 'sortieET': 1}
 
composant_test = EtLogique()
cas = [(0,0), (1,0),(0,1), (1,1)]
 
for item in cas:
    composant_test.set_entreeX(item[0])
    composant_test.set_entreeY(item[1])
    print(composant_test.etat())
# 0
# 0
# 0
# 1   
 
 
 
# Question 2 : circuit logique
composant1  = EtLogique()
composant2  = EtLogique()
comp_resultat = EtLogique()
composant1.set_entreeX(1)
composant1.set_entreeY(1)
 
composant2.set_entreeX(1)
composant2.set_entreeY(1)
 
comp_resultat.set_entreeX(composant1.etat())
comp_resultat.set_entreeY(composant2.etat())
print(comp_resultat.etat())
print(vars(comp_resultat))
# 1
# {'entreeX': 1, 'entreeY': 1, 'sortieET': 1}
 
 
# Question 3 non logique
class Non():
    def __init__(self, composant):
        self.composant = composant
    def etat(self):
        if self.composant.etat() == 1:
            return 0
        else:
            return 1
 
 
 
 
composantEt = EtLogique()
non1 = Non(composantEt)
print(non1.etat())
 
# 1
 
 
# Question 4 NonET
non_test = Non(composant1)
print(non_test.etat())
 
# 0
 
 
composant1.set_entreeY(0)
print(composant1.etat())
print(non_test.etat())
 
# 0
# 1