Download - Machine learning : Exercices en python
Machine learning Exercices en python
Emmanuelle Jardat
Udacity scikit-learn openclassroomhellipand co
httpsopenclassroomscomfrcourses4011851-initiez-vous-
au-machine-learning
httpsopenclassroomscomfrcourses4379436-explorez-
vos-donnees-avec-des-algorithmes-non-supervises
httpwwwxavierduprefrappensae_teaching_cshelpsphinx
notebooks_gs2a_ml_basehtml
httpsjakevdpgithubioPythonDataScienceHandbook
httpsfutureoflifeorgbackgroundbenefits-risks-of-artificial-
intelligence
httpwwwxavierduprefrappactuariat_pythonhelpsphinxno
tebooksseance4_projection_population_correctionhtml
httpsmakina-corpuscomblogmetier2017initiation-au-
machine-learning-avec-python-pratique
Avant propos ce cours regroupe des
informations et exercices venant des
sites udacity openclassroom ens
makina corpus sklearn et du livre de
Prateek Joshi et surtout celui de
ChloeAgathe Azencott
Toutes vos reacutefeacuterences nous seront
inteacuteressantes remontez-les nous
Second avant-propos jrsquoai deacutecouvert ce scheacutema qui reacutesume tout ce que jrsquoai essayeacute
de comprendre depuis pas mal de temps donc si vous cherchez apregraves le cours ou
degraves maintenant une fiche antisegraveche pour savoir quel algorithme utiliser dans quel
cas la voici
httpsscikit-learnorgstabletutorialmachine_learning_map
troisiegraveme avant-propos eacutetant moi-mecircme en formation je sais que rien ne vaut de
faire des exercices et de faire soi-mecircme tout le cours est donc baseacute sur des
exercices (vieux rose avec leurs corrections slide suivant) avec des rappels
theacuteoriques (rose clair) positionneacutes quand il me semble neacutecessaire mais que vous
pouvez consulter agrave tout moment (ou passer si vous connaissez deacutejagrave) Les
reacutefeacuterences sont donneacutees pour info et pour vous permettre drsquoaller plus loin mais a
priori vous devez pouvoir exeacutecuter tout ceci sans aller piocher dans ces reacutefeacuterences
(je lrsquoai fait pour vous ) sauf demande explicite pour vous habituer agrave aller chercher
lrsquoinfo
Correction annonceacutee slide
suivant
Slide de correction
Eacutenonceacute drsquoexercice
Reacutefeacuterence internet
Chapitre theacuteorique
EXERCICE GOOGLE CAR
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
httpsscikit-
learnorgstablemodulesgeneratedsklearnnaive_bayesGaussianNBhtml
Lrsquoexercice qui suit est librement inspireacute des sites suivants que je vous conseille vivement
Udacity est le site (en anglais) des MOOC des eacutetudiants de Stanford MIT et Georgia Tech
Sklearn est la bible (en anglais) du machine leanrning Ce pendant il faut avoir de bonnes
notions de maths (algegravebre lineacuteaire et probabiliteacutes) pour comprendre les exemples de sklearn
seul
Nous essaierons de rendre le cours le plus facile agrave comprendre en vous donnantredonnant les
notions matheacutematiques neacutecessaires
Google car Peacutedagogie
On srsquoappuie sur lrsquoexemple du MOOC drsquoUdacity (le MOOC des eacutetudiants du MIT et de Stanford)
sur un vrai exemple de machine learning les voitures autonomes
Le but de cet exercice est
bull De deacutecouvrir des notions de machine learning
bull Les donneacutees de deacutepart
bull Les donneacutees preacutedites
bull De choisir un modegravele pour deacutecider de surface de deacutecision
bull Drsquoappliquer ce modegravele agrave nos donneacutees drsquoentreacutee
bull Drsquoen tirer des donneacutees de preacutediction
bull De deacutecouvrir scikit learn
bull De deacutecouvrir le theacuteroegraveme de Bayes
bull De se rappeler la loi normale la courbe de Gauss
bull De comprendre pouvoir on applique lrsquoalgorithme Naive Bayes
bull Drsquoavoir vu une premiegravere fois la logique drsquoun modegravele superviseacute on prend les donneacutees on
choisit un modegravele on lrsquoapplique (on le fait lsquofitterrsquo ) agrave nos donneacutees drsquoentreacutee on en tire un
preacutediction pour une nouvelle donneacutee drsquoentreacutee
A la fin de cet exercice on aura
Fait tourner un algorithme de machine learning en python
Appliqueacute un theacuteoregraveme naive bayes sur une gaussienne et compris agrave quoi cela pouvait servir
drsquoautre
Contribueacute agrave apprendre agrave la google car agrave conduire
Google car
Dans cet exercice nous allons regarder comment programmer la google car Comme vous le
voyez ci-dessous la google car roule et deacutecide de tourner acceacuteleacuterer freiner sans que lrsquoon
ait les mains sur le volanthellip il a fallu lui apprendre agrave faire ceci crsquoest ce que nous allons faire
dans cet exercice
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Google car
Tout drsquoabord dessiner les 6 points donneacutes ci-dessous sur un plan agrave deux dimensions
([[-1 -1] [-2 -1] [-3 -2] [1 1] [2 1] [4 2]])
Ensuite mettez des eacutetiquettes (appeleacutees aussi labels) 1 ou 2 sur chacun de ces points
dans cet ordre respectif ci-dessous
([1 1 1 2 2 2])
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Google car
correction
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1] [-2 -1]
[-3 -2]
[1 1] [2 1]
[4 2]
Google car
En fait les axes de notre plan correspondent agrave
Axe x les bosses sur la route (avec 0 bosses en moins lrsquoinfini = vers la gauche de lrsquoaxe x
horizontal et beaucoup de bosses en plus lrsquoinfini agrave droite)
Axe y la pente de la route (avec 0 pente en moins lrsquoinfini = vers le bas de lrsquoaxe y vertical et
plein de bosses vers plus lrsquoinfini en haut de lrsquoaxe y)
Positionnez les images suivantes sur votre sheacutema
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Google car
correction
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Google car
correction
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2
BOSSES IMPORTANTES
ROUTE TRES PENTUE
Google car
Les points sont des moments ougrave le conducteur de la google car (pour lrsquoinstant elle ne sait pas
conduire toute seule) va freiner ou acceacuteleacuterer
Drsquoapregraves vous
bull les laquo 1 raquo repreacutesentent-ils le freinage ou lrsquoacceacuteleacuteration
bull les laquo 2 raquo repreacutesentent-ils le freinage ou lrsquoacceacuteleacuteration
Positionnez les images sur les points de donneacutees que vous avez positionneacutes preacuteceacutedemment
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Google car
correction
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2
BOSSES IMPORTANTES
ROUTE TRES PENTUE
Google car
correction
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2
BOSSES IMPORTANTES
ROUTE TRES PENTUE
Ici le conducteur freine
Ici le conducteur peut
acceacuteleacuterer car il nrsquoy a pas de
pente et pas de bosses une
belle route toute plate
Google car
correction
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2
BOSSES IMPORTANTES
ROUTE TRES PENTUE
Ici le conducteur freine
Ici le conducteur peut
acceacuteleacuterer car il nrsquoy a pas de
pente et pas de bosses une
belle route toute plate
Google car
Question quizz parmi tous les capteurs ci-dessous lesquels ont eacuteteacute utiliseacutes pour
obtenir les donneacutees de notre exercice (correction ici httpspaulkhuatduywordpresscomles-
capteurs )
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Google car httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
correction
Deteacutecteur de mouvement acceacuteleacuterateur acceacuteleacuteromegravetre gyroscope
Capteur drsquoinduction
thermomegravetre
Capteur infra-rouge
microphone
cameacutera
gps
Capteur sensitif drsquoappui
frein
Google car httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
correction
acceacuteleacuterateur
acceacuteleacuteromegravetre gyroscope
frein
Les bosses seront prises en
compte par un acceacuteleacuteromegravetre
La pente par un gyroscope
Il faut reacutecupeacuterer dans la voiture
les informations jrsquoai freineacute ou
jrsquoai acceacuteleacutereacute il faut donc que
ces informations soient capteacutees
quelque part
Google car
Le but est maintenant de geacuteneacuteraliser tout cela La google car se promegravene dans la
Silicon Valley mais le but est qursquoelle se conduise toute seule que le conducteur puisse
ne pas toucher le volant ni les peacutedales puisse ecirctre handicapeacute puisse y dormirhellipsur
toute route il va donc falloir agrave partir de nos points de donneacutees geacuteneacuteraliser
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Google car Si on est sur une nouvelle route (et donc nouvelles donneacutees de bosses et pentes la
voiture devra t elle acceacuteleacuterer ou freiner) quel est votre avis pour les points
nouveaux lsquoet icirsquo
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2
Ici le conducteur freine
Ici le conducteur peut
acceacuteleacuterer car il nrsquoy a pas de
pente et pas de bosses une
belle route toute plate
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Google car
Certains points (en gras) semblent plus faciles agrave positionner que drsquoautres
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
correction
Google car
Comment laquo couper raquo la surface Pour deacutecrire une surface de deacutecision Dessinez
une limite
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Google car
Comment laquo couper raquo la surface Ici avec un trait (en gras)
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
correction
Google car
Comment laquo couper raquo la surface Ici avec le trait on partitionne en une zone jaune
je freine un zone bleue jrsquoacceacutelegravere
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
correction
Google car
Ici crsquoest une courbe
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
correction
Google car
Les surfaces de freinage et drsquoacceacuteleacuteration deviennent ainsi
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
correction
Google car httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
On peut mecircme imaginer couper exactement selon tous les points que lrsquoon aurait
correction
Google car httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Avec de nouvelles surfaces pour freiner ou acceacuteleacuterer
correction
Google car httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
On peut mecircme imaginer couper exactement selon tous les points que lrsquoon aurait de
maniegravere toute carreacutee
correction
Google car httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
[-1 -1]
1
[-2 -1]
1
[-3 -2]
1
[1 1]
2
[2 1]
[4 2]
2
2 Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
Et ici
On peut mecircme imaginer couper exactement selon tous les points que lrsquoon aurait
correction
Google car
Dans les exemples ci-dessus on voit que lrsquoon doit deacutecider parmi deux actions
acceacuteleacuterer ou freiner crsquoest une classification binaire
On peut deacutecider de seacuteparer par une droite il srsquoagira de reacutegression lineacuteaire
On peut deacutecider de seacuteparer par une courbe un courbe de Gauss souvent (car
on suppose quand on ne sait pas que les points ont une distribution normale)
Ou une seacuteparation toute carreacutee (crsquoest ce qui se fera avec les arbres de
deacutecision)
On peut deacutecider de faire une surface totalement adapteacutee agrave nos jeux de tests
et lagrave on voit le risque du surapprentissage notre surface de deacutecision
correspondra exactement agrave nos donneacutees drsquoentreacutee mais pas du tout agrave de
nouvelles donneacutees sur une nouvelle route la voiture se mettra agrave acceacuteleacuterer ou
freiner agrave des moments qui sembleront lsquobizarresrsquo aux passagers
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Google car
Saisir dans votre python les donneacutees suivantes et expliquer ce que
lrsquoon fait les reacuteponses de votre ordinateur
gtgtgt import numpy as np
gtgtgt X = nparray([[-1 -1] [-2 -1] [-3 -2] [1 1] [2 1] [4 2]])
gtgtgt Y = nparray([1 1 1 2 2 2])
gtgtgt from sklearnnaive_bayes import GaussianNB
gtgtgt clf = GaussianNB()
gtgtgt clffit(X Y)
GaussianNB(priors=None var_smoothing=1e-09)
gtgtgt print(clfpredict([[-08 -1]]))
[1]
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Google car on importe les bibliothegraveques dont on a besoin numpy pour traiter des tableaux lsquoarrayrsquo en python
(on regardera en deacutetail plus tard)
gtgtgt import numpy as np
on saisit des points de donneacutees
gtgtgt X = nparray([[-1 -1] [-2 -1] [-3 -2] [1 1] [2 1] [4 2]])
on saisit des points de labels ce sont les eacutetiquettes des points preacuteceacutedents leur valeur cible
(comme Y=f(X)=
gtgtgt Y = nparray([1 1 1 2 2 2])
on importe de la bibliothegraveque sklearn lrsquoalgorithme qui srsquoappelle naive bayes avec la meacutethode
gaussian NB (NB pour naive bayes) pour plus drsquoexplications je regarde dans sklearn httpsscikit-
learnorgstablemodulesgeneratedsklearnnaive_bayesGaussianNBhtml
gtgtgt from sklearnnaive_bayes import GaussianNB
on donne le nom clf agrave notre classificateur en creacuteant une instance de gaussianNB
gtgtgt clf = GaussianNB()
on dit au classificateur de se lsquofitterrsquo donc de se calculer par rapport agrave nos donneacutees drsquoentreacutee X et
leurs labels y on applique gaussianNB agrave nos donneacutees X et Y
gtgtgt clffit(X Y)
GaussianNB(priors=None var_smoothing=1e-09)
on veut preacutedire la classification drsquoun nouveau point -08 -1 on est donc sur une nouvelle route
et els capteurs de la voiture remontent des bosses avec une donneacutee de -08 et une pente -1
gtgtgt print(clfpredict([[-08 -1]]))
[1]
le classificateur nous a donneacute 1 = on peut acceacuteleacuterer avec ces donneacutees de bosses et de pente
httpsclassroomudacitycomcoursesud120lessons2254358555concepts24307885370923
correction
Annexes theacuteoriques Google car Pour ceux qui ne seraient pas agrave lrsquoaise avec les Courbes de Gauss la loi normale et le
theacuteoregraveme de Bayes nous vous proposons les chapitres et exercices annexes en
pages suivantes httpsfrwikipediaorgwikiClassification_naC3AFve_bayC3A9sienne
httpswwwyoutubecomwatchv=zrbnfb_tpOA
httpswwwyoutubecomwatchv=cpCo6mtdAnE
httpswwwresearchgatenetfigureIllustration-of-how-a-Gaussian-
Naive-Bayes-GNB-classifier-works-For-each-data-
point_fig8_255695722
httpsstatsstackexchangecomquestions142215how-is-naive-
bayes-a-linear-classifier
machine learning
bullLOI NORMALE
machine learning loi normale
bull Exercice vous disposez de n deacutes agrave six faces vous les lancez sommez vos points (vous obtenez le chiffre s)
bull Quelle peut ecirctre la somme maximale
bull Dessinez sur un scheacutema
bull Axe des x les possibiliteacutes que la S somme du tirage des n deacutes soit 12 hellipsomme maximale
bull Axe des y la probabiliteacute que cette somme apparaisse
bull Dessinez le scheacutema pour n=1
bull Puis n=2
bull Puis n = 3
bull Puis n=4
bull Puis n=5
httpsfrwikipediaorgwikiLoi_normale
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learningloi normale
bull La somme maximale est n6
bull Pour n = 1
bull On a un seul deacute
bull Il peut prendre les valeurs
bull 1 2 3 456 quand on le lance et ainsi la somme du tirage est 1 2 3 456
bull Chaque chiffre a la probabiliteacute 16 drsquoapparaitre
bull Donc chaque somme a la possibiliteacute 16 drsquoapparaitre
bull Sur le scheacutema ce sera ainsi
httpsfrwikipediaorgwikiLoi_normale
16
1 2 3 4 5 6
Correction n=1
Correction pour n= 2 slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learningloi normale bull Pour n=2
bull On a deux deacutes
bull Chacun peut prendre la valeur 1 2 3 456 quand on le lance
bull Si on lance les deux la somme peut ecirctre 2 3 456 7 8 9 10 11 12
bull Mais on voit bien que la somme 6 peut ecirctre obtenue par plusieurs tirages 3+3 ou 2+4 ou 4+2 ou 1+ 5 ou 5+1 soit 5 possibiliteacutes
bull Alors que la somme 2 ne peut ecirctre obtenue que par 1+1
bull Donc certaines sommes sont susceptibles drsquoapparaitre plus que drsquoautres
httpsfrwikipediaorgwikiLoi_normale
1 2 3 4 5 6 7 8 9 10 11 12
correction
Correction pour n= 3 slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learningloi normale bull Pour n=3
bull On a trois deacutes
bull Chacun peut prendre la valeur 1 2 3 456 quand on le lance
bull Si on lance les trois la somme peut ecirctre 3 456 7 8 9 10 11 12 131415161718
bull Mais on voit bien que la somme 9 peut ecirctre obtenue par plusieurs tirages 1+2+6 (ou 1+6+2 ou 6+2+1 ou 6+1+2 ou 2+1+6 ou 2+6+1) ou 1+3+5 (et les 5 autres lieacutees) ou 1+4+4 (ou 4+1+4 ou 4+4+1)ou 2+2+5 (et 2 autres) ou 2+3+4 (et 5 autres) ou 3+3+3
bull Alors que la somme 3 ne peut ecirctre obtenue que par 1+1+1 soit une seule possibiliteacute
bull Donc certaines sommes sont susceptibles drsquoapparaitre plus que drsquoautres
httpsfrwikipediaorgwikiLoi_normale
1 2 3 4 5 6 7 8 9 10 11 1213 14 1516 17 18
correction
machine learningloi normale
bull Pour un nombre infini de deacutes on obtient la courbe de gauss
httpsfrwikipediaorgwikiLoi_normale
correction
machine learningloi normale exercice
Imaginez une planche
ainsi ougrave des billes
peuvent tomber agrave
chaque fois drsquoun cocircteacute ou
de lrsquoautre des points
Crsquoest la Planche
de Galton
Drsquoapregraves vous les billes en bas seront
bull Eacutequitablement reacuteparties
bull Plutocirct sur les cocircteacutes
bull Plutocirct vers le milieu
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learningloi normale
Elles seront plus vers le centre elles dessinent la loi normale une courbe de gauss
httpswwwyoutubeco
mwatchv=cpCo6mtdA
nE
httpswwwyoutubeco
mwatchv=ADiZ28E-
9Lo
correction
machine learningloi normale
bull En theacuteorie des probabiliteacutes et en statistique la loi normale est lune des lois de probabiliteacute les plus adapteacutees pour modeacuteliser des pheacutenomegravenes naturels issus de plusieurs eacuteveacutenements aleacuteatoires Elle est en lien avec de nombreux objets matheacutematiques dont le mouvement brownien le bruit blanc gaussien ou dautres lois de probabiliteacute Elle est eacutegalement appeleacutee loi gaussienne loi de Gauss ou loi de Laplace-Gauss des noms de Laplace (1749-1827) et Gauss (1777-1855) deux matheacutematiciens astronomes et physiciens qui lont eacutetudieacutee
httpsfrwikipediaorgwikiLoi_normale
Exercice qui
reconnaissez-vous
sur ces photos
machine learningloi normale
bull Plus formellement cest une loi de probabiliteacute absolument continue qui deacutepend de deux paramegravetres son espeacuterance un nombre reacuteel noteacute μ et son eacutecart type un nombre reacuteel positif noteacute σ La densiteacute de probabiliteacute de la loi normale est donneacutee par
bull La courbe de cette densiteacute est appeleacutee courbe de Gauss ou courbe en cloche entre autres Cest la repreacutesentation la plus connue de cette loi La loi normale de moyenne nulle et deacutecart type unitaire est appeleacutee loi normale centreacutee reacuteduite ou loi normale standard
bull Lorsquune variable aleacuteatoire X suit la loi normale elle est dite gaussienne ou normale et il est habituel dutiliser la notation avec la variance σ2
httpsfrwikipediaorgwikiLoi_normale
machine learningloi normale httpsfrwikipediaorgwikiLoi_normale
bull exercice une usine construit des clous qui doivent avoir une longueur de 3cm La directrice de lrsquousine indique que ses clous ont un eacutecart-type de 1 mm
bull Sur 1000 clous combien auront une taille comprise entre 29 et 31 cm
bull combien de clous avec sont entre 24 et 36 cm
bull Sigma correspond au point drsquoinflexion de la courbe autour de la moyenne et en srsquoarrecirctant agrave sigma on a 68 des cas
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learningloi normale httpsfrwikipediaorgwikiLoi_normale
bull Et la notion de 6-sigma deacutecoule aiseacutement du graphique ci-dessus pour une population normale la quasi-totaliteacute des individus se retrouvent dans une fourchette comprenant la moyenne plus ou moins 6 fois leacutecart-type On peut mecircme dire que toujours pour une population normale seuls deux individus sur un milliard se retrouveront hors de cette fourchette
bull Ici mu est de 3 cm et sigma de 1 mm
bull 29 agrave 31 cm correspond agrave mu plus 2 sigmas ce qui fait 68 des clous ndash qui vraisemblablement suivent une loi normale
bull Donc 680 clous sur 1000 seront dans cet intervalle [29 ndash 31cm]
bull Et 9999 dans lrsquointervalle 23-36cm car cela fait 6 sigma
correction
machine learning
bullTHEOREME DE BAYES
machine learning bayes
le theacuteroeme de BAYES
machine learning bayes
Exercice De quelle urne vient la boule
Agrave titre drsquoexemple imaginons deux urnes remplies de boules La
premiegravere contient dix (10) boules noires et trente (30) blanches la
seconde en a vingt (20) de chaque On tire sans preacutefeacuterence particuliegravere
une des urnes au hasard et dans cette urne on tire une boule au
hasard La boule est blanche Quelle est la probabiliteacute quon ait tireacute cette
boule dans la premiegravere urne sachant quelle est blanche
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learning bayes
Intuitivement on comprend bien quil est plus probable que cette boule
provienne de la premiegravere urne que de la seconde Donc cette
probabiliteacute devrait ecirctre supeacuterieure agrave 50
La reacuteponse exacte (60 ) peut se calculer agrave partir du theacuteoregraveme de
Bayes
correction
machine learning bayes
Soit H1 lrsquohypothegravese laquo On tire dans la premiegravere urne raquo et H2 lrsquohypothegravese laquo On tire dans la
seconde urne raquo Comme on tire sans preacutefeacuterence particuliegravere P(H1) = P(H2) de plus
comme on a certainement tireacute dans une des deux urnes la somme des deux probabiliteacutes
vaut 1 chacune vaut 50
Notons D lrsquoinformation donneacutee laquo On tire une boule blanche raquo Comme on tire une boule
au hasard dans une des urnes la probabiliteacute de D sachant lhypothegravese H1 reacutealiseacutee vaut
De mecircme la probabiliteacute de D sachant lhypothegravese H2 reacutealiseacutee vaut
La formule de Bayes dans le cas discret nous donne donc
Avant que lrsquoon regarde la couleur de la boule la probabiliteacute drsquoavoir choisi la premiegravere urne
est une probabiliteacute a-priori P(H1) soit 50 Apregraves avoir regardeacute la boule on reacutevise notre
jugement et on considegravere P(H1|D) soit 60 ce qui confirme notre intuition premiegravere
correction
machine learning bayes
Exercice Appliquons le theacuteoregraveme de Bayes agrave CHRIS et SARA
CHRIS et SARA ont un vocabulaire tregraves limiteacute ils ne disent que les mots
LOVE DEAL LIFE mais ne les emploient pas chacun de la mecircme faccedilon
CHRIS dit LOVE dans 10 de ses phrases LIFE dans 10 aussi et DEAL est
employeacute agrave 80 de son vocabulaire
Pour SARA LOVE repreacutesente 50 (dsl des steacutereacuteotypeshellipje ferai passer agrave
Udacity le message) DEAL 20 de son vocabulaire et LIFE 30
Exercice le message LOVE LIFE vient drsquoarriver quelle est la probabiliteacute que ce
message vienne de CHRIS de SARA
machine learning bayes
Correction avec les mots LIFE et DEAL
La probabiliteacute que un message vienne de CHRIS ou de SARA est de 50 = 05
(ils ne sont que 2)
Pour CHRIS life 01 et deal 08 donc 010805 = 004
Pour SARA life 03 et deal 02 donc 030205 = 003
correction
machine learning bayes
Exercice agrave vous de faire pour LOVE DEAL
machine learning bayes
Exercice Pensez-vous que le theacuteoregraveme de Bayes puisse aider agrave
ndash Trouver les spams dans une messagerie
ndash Trouver les reacutesultats du loto
ndash Deviner ce que les gens vont dire
ndash Trouver qui est lrsquoauteur drsquoun livre
Suppleacutement donnez les dates de Thomas Bayes
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learning bayes
Trouver les spams dans une messagerie
ndash Oui De nombreux anti-spams fonctionnent ainsi le pheacutenomegravene
est le mecircme que le vocabulaire de Chris et Sara avec un vocabulaire particulier( amour ceacutelibataire performances argent gagneacutehellip) (httpswwwprovectiofractualitesfiltrage-bayesien-technique-pour-lutter-contre-le-spamhtml )
ndash Trouver les reacutesultats du loto
ndash Non Sauf si les boules sont pipeacutees httpsforumsfutura-sciencescomdebats-
scientifiques494974-optimisation-chances-de-gagner-loto-2html
ndash Deviner ce que les gens vont dire ndash Non( on verra ccedila plutocirct avec les reacuteseaux de neurones
et le deep learning)
ndash Trouver qui est lrsquoauteur drsquoun livre
ndash Oui JK Rowling a eacuteteacute deacutecouverte ainsi on a compareacute le
vocabulaire de Harry Potter avec drsquoautres livres qursquoelles disait ne pas avoir eacutecrits
correction
machine learning bayes
Exercice compleacutement pourquoi dit-on naive bayes et pas Bayes tout court
httpsfrwikipediaorgwikiClassification_naC3AFve_bayC3A9sienne
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learning bayes
Parce qursquoon considegravere ici les variables comme indeacutependantes peu importe leur ordre
Ainsi peu importe que CHRIS dise LOVE LIFE ou LIFE LOVE
On calcule avec le mecircme reacutesultat
Les variables sont indeacutependantes entre elles
correction
machine learning bayes
Exercice Drsquoapregraves vous quelle recherche a eacuteteacute faite sur google pour ce reacutesultat et quel algorithme utilise le moteur de recherche
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
machine learning bayes
Google aujourdhui avec laquo chicago bulls raquo
Avec naive bayes (google drsquoil y a 20 ans) la mecircme recherche donnait
ndash
correction
Quizz1
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
1 Annie utilise un algorithme GaussianNB pour classifier des donneacutees que
signifie le laquo gaussian raquo dans le nom de cet algorithme
2 Problegraveme de MontyHall un jeu oppose Aline et Bernard Aline fait face agrave
trois portes closes Derriegravere lrsquoune drsquoelles Bernard a cacheacute une voiture
Derriegravere chacune des deux autres portes se trouve une chegravevre Aline choisit
une porte Bernard ouvre une des deux autres portes derriegravere laquelle il sait
qursquoil y aune chegravevre Aline peut modifier son choix et remporter ce qursquoil ya
derriegravere la porte (elle veut la voiture) Aline a-t-elle inteacuterecirct agrave modifier son
choix
EXERCICE LOYERS
httpsopenclassroomscomfrcourses4011851-initiez-vous-au-machine-learning
Loyers (open classroom) Peacutedagogie
On srsquoappuie maintenant sur lrsquoexemple openclassroom sur un nouvel exemple de machine
learning la determination de loyers
Le but de cet exercice est
bull De consolider ce que lrsquoon a deacutecouvert en notions de machine learning
bull Les donneacutees de deacutepart
bull Les donneacutees preacutedites
bull De choisir un modegravele pour deacutecider de surface de deacutecision
bull Drsquoappliquer ce modegravele agrave nos donneacutees drsquoentreacutee
bull Drsquoen tirer des donneacutees de preacutediction
bull De revoir la reacutegression lineacuteaire
bull De srsquoinitier agrave la meacutethode des moindres carreacutes
bull De revoir la logique on prend les donneacutees on choisit un modegravele on lrsquoapplique (on le fait
lsquofitterrsquo ) agrave nos donneacutees drsquoentreacutee on en tire un preacutediction pour une nouvelle donneacutee
drsquoentreacutee
A la fin de cet exercice on aura
Fait tourner un algorithme de reacutegression lineacuteaire en python
Ecrit soi-mecircme toute seule un vrai programme de regression lineacuteaire en python
Revu ou appris quelques notions drsquoalgegravebre lineacuteaire
Deacutecouvert si on payait trop cher son loyer (parisien)
Loyers (version simplifieacutee) On vous propose maintenant de reprendre les notions deacutejagrave vues avec une reacutegression lineacuteaire Le but de cet exercice est que vous puissiez expliquer ce que lrsquoon fait dans lrsquoexercice suivant
On fait chercher les donneacutees housecsv httpsopenclassroomscomfrcourses4011851-initiez-vous-au-machine-learning4121986-tp-decomposez-lapprentissage-dune-regression-lineaire puis house_datacsv dans un deuxiegraveme temps httpexercicesopenclassroomscomassessment597id=4011851ampslug=initiez-vous-au-machine-learningamplogin=7030493amptk=e9c1d184ecb2c74e88912cfbfbb7dd0aampsbd=2016-02-01ampsbdtk=fa78d6dd3126b956265a25af9b322d55 et appliquer un modegravele de regression lineacuteaire
On aura besoin pour cela des librairies numpy que lrsquoon nommera np et de matplotlibpyplot que lrsquoon nommera plt
On chargera le dataset input_file = housecsvlsquo gracircce agrave nploadtxt(input_file delimiter= dtype = float)
Regarder les donneacutees et deacutecider quels sont les X et les y
On affichera ensuite les donneacutees avec matplotlib
pltscatter(X y color=green)
pltxticks(())
pltyticks(())
pltshow()
Loyers (version simplifieacutee) import numpy as np
import matplotlibpyplot as plt
input_file = housecsv
data = nploadtxt(input_file delimiter= dtype = float)
print(data)
On voit que la donneacutee drsquoentreacutee est la surface en seconde position dans le fichier sur chaque ligne et le y le loyer est en premiegravere position
X y = data[ 1] data[ 0]
print(X estX)
print(y esty)
pltscatter(X y color=green)
pltxticks(())
pltyticks(())
pltshow()
Loyers (version simplifieacutee) Maintenant il nous faut calculer la regression lineacuteaire et tracer la droite de regression sur le sheacutema
1ere solution avec sklearn from sklearn import linear_model
Puis prendre la regression lineaire
regressor = linear_modelLinearRegression()
et on fait fitter les donneacutees sur le modegravele de regression
regressorfit(X y)
2de solution avec scipy from scipy import stats
linregress() renvoie plusieurs variables de retour On sinteressera
particulierement au slope et intercept
slope intercept r_value p_value std_err = statslinregress(X y)
def predict(x)
return slope x + intercept
la variable fitLine sera un tableau de valeurs preacutedites depuis la tableau de variables X
fitLine = predict(X)
on affiche l aregression lineacuteaire fitLine
pltplot(X fitLine c=r)
pb avec taille de X
Loyers (version simplifieacutee) from scipy import stats
slope intercept r_value p_value std_err = statslinregress(X y)
def predict(x)
return slope x + intercept
la variable fitLine sera un tableau de valeurs preacutedites depuis la tableau de variables X
fitLine = predict(X)
print (slope intercept r_value p_value std_err)
on dessine les points
pltscatter(X y color=green)
pltxticks(())
pltyticks(())
pltplot(X fitLine c=r)
pltshow()
Loyers open classrooms Voici la correction openclassroom
On importe les librairies dont on aura besoin pour ce tp
import numpy as np
import pandas as pd
import matplotlibpyplot as plt
On charge le dataset
house_data = pdread_csv(housecsv)
On affiche le nuage de points dont on dispose
pltplot(house_data[surface] house_data[loyer] ro markersize=4)
pltshow() On deacutecompose le dataset et on le transforme en matrices pour pouvoir effectuer notre
calcul on ajoute une colonne de 1 pour faire les calculs dans la matrice X
X = npmatrix([npones(house_datashape[0])house_data[surface]as_matrix()])T
y = npmatrix(house_data[loyer])T
On effectue le calcul exact du paramegravetre theta
theta = nplinalginv(XTdot(X))dot(XT)dot(y)
print(theta)
Loyers open classrooms [[ 29430011913] [ 3004180999]]
Loyers open classrooms
pltxlabel(Surface)
pltylabel(Loyer)
pltplot(house_data[surface] house_data[loyer] ro markersize=4)
On affiche la droite entre 0 et 250
pltplot([0250] [thetaitem(0)thetaitem(0) + 250 thetaitem(1)] linestyle=--
c=000000)
pltshow()
from sklearn import linear_model
regr =
linear_modelLinearRegression()
regrfit(surface loyer)
regrpredict(donnee_test)
Loyers open classrooms
Exercice
De quelles donneacutees dispose-t-on au deacutepart
Que veut-on faire avec ces donneacutees
Quel algorithme applique trsquoon
Donner la formule pour obtenir des donneacutees
Quel serait le loyer drsquoun logement de surface 100m2
Et pour 50m2
Et pour 200m2
Etes-vous plutocirct sur de votre reacuteponse pour 50100ou 200m2
Pourquoi
Comment est-ce que vous estimeriez que votre algorithme est un bon algorithme ou
pas
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Loyers open classrooms
De quelles donneacutees dispose-t-on au deacutepart
Des loyers selon la surface
Que veut-on faire avec ces donneacutees
On veut essayer de calculer un loyer pour une surface donneacutee
Quel algorithme applique trsquoon
Une regression lineacuteaire
Donner la formule pour obtenir des donneacutees
Quel serait le loyer drsquoun logement de surface 100(m2)
30100+2943 = 32943 (eurosmois)
Et pour 50m2 3050+2943 = 17943 (eurosmois)
Et pour 200m2 30200+2943 = 62943 (eurosmois)
Etes-vous plutocirct sur de votre reacuteponse pour 50100ou 200m2 Euhhellip
Pourquoi Pour 200m2 on nrsquoa aucun exemple en faithellipen revanche de nombreux points
existent pour 50m2 mais le loyer varie de 1000 jusque 4000 parfois
Comment est-ce que vous estimeriez que votre algorithme est un bon algorithme ou
pas Crsquoest le cours suivant
correction
Regression lineacuteaire Exercice
Eacutecrire un programme en python pour trouver la reacutegression lineacuteaire des points suivants
attention X est agrave deux dimensions
Imaginons le prix du loyer y deacutepend de la surface et du nombre drsquoeacutetages
Voici
un appartement de surface 100m~2 et sur 1 eacutetage et qui vaut 600keuro
un appartement de surface 100m~2 et sur 2 eacutetages et qui vaut 800keuro
un appartement de surface 200m~2 et sur 2 eacutetages et qui vaut 900keuro
un appartement de surface 200m~2 et sur 3 eacutetages et qui vaut 11Meuro
Exprimez vos points X gracircce agrave array de numpy et vos y comme un tuple agrave 4 eacuteleacutements
Deacuteterminez la regression lineacuteaire gracircce agrave LinearRegression de sklearnlinear_model
Nrsquooubliez pas de faire fitter votre modegravele agrave vos donneacutees drsquoentreacutee (Xy) gracircce agrave fit(X y)
Donnez le coefficient de regression (le coefficient linaire) gracircce agrave coef_
Donnez lrsquoordonneacutee agrave lrsquoorigine gracircce agrave intercept_
Ecrire la formule de la regression lineacuteaire y = en fonction de X[0] et de X[1]
Calculez le score (si proche de 1 tregraves bon si 0 tregraves mauvais) R~2 gracircce agrave score(X y)
Commentez
Donnez le loyer preacutevu pour un appartement de 300m~2 et 5 eacutetages
httpsscikit-learnorgstablemodulesgeneratedsklearnlinear_modelLinearRegressionhtml
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Regression lineacuteaire
import numpy as np
from sklearnlinear_model import LinearRegression
X = nparray([[100 1] [100 2] [200 2] [200 3]])
print(X)
y= (600 800 900 1100)
print(y)
reg = LinearRegression()fit(X y)
a = regscore(X y)
print (le score est de a)
b=regcoef_
print (le coefficient lineacuteaire est b)
c =regintercept_
print (lordonneacutee agrave lorigine est c)
print (pour une appart de 300m~2 et 5 eacutetagesregpredict(nparray([[300 5]])))
httpsscikit-learnorgstablemodulesgeneratedsklearnlinear_modelLinearRegressionhtml
correction
Regression lineacuteaire
httpsscikit-learnorgstablemodulesgeneratedsklearnlinear_modelLinearRegressionhtml
correction
Ici le score est de 1 en effet les donneacutees Xy sont lineacuteaires dans lrsquoeacutenonceacute
Le prix en keuro est la surface en m~2 + 200 fois le nombre drsquoeacutetages plus 300
Y = X[0] + 200X[1] + 300
Notre reacutegression est parfaite (car les points eacutetaient deacutejagrave laquo aligneacutes raquo)
Plus de deacutetail sur R2 dans le deacutetail lsquoregression lineacuteairersquo qui suit
machine learning
bullREGRESSION LINEAIRE
machine learning regression lineacuteaire
httpswwwyoutubecomwatchv=mfLHA7C88vc
Pour ceux qui veulent savoir comment on calcule la formule de reacutegression lineacuteaire ndash en dimension 1 -( le coefficient agrave lrsquoorigine et le coefficient de regression lineacuteaire) des moindres carreacutes vous avez ici une videacuteo (longue) mais simple agrave comprendre
machine learning regression lineacuteaire
Dans wikipedia
httpsfrwikipediaorgwikiRC3A9gression_linC3A9ai
re vous retrouvez ces formules
La meacutethode des moindres carreacutes minimise les traits en verts
sur le scheacutema ci-contre crsquoest-agrave-dire les distances (au carreacute)
entre les points preacutevus par la droite de regression f(x) et leur
vrai eacutetiquette de donneacutee drsquoentreacutee y
Beta 0 est le coefficient agrave lrsquoorigine
Et beta1 est le coefficient de regression
On met des chapeaux accents circonflexes car ce sont des
estimateurs on calcule lrsquoestimation par une regression
lineacuteaire
machine learning regression lineacuteaire
Dans lrsquoexercice sur les loyers avec 2 variables drsquoentreacutee on demande le score R2 ceci nous permet de travailler sur la qualiteacute de la preacutediction
Qualiteacute de la preacutediction Pour eacutevaluer la qualiteacute de la preacutediction on peut utiliser diffeacuterents critegraveres
Dans un premier temps rappelons que
S S R = est la variation expliqueacutee par la reacutegression (Sum of Squares Regression en franccedilais SCE Somme des Carreacutes Expliqueacutee [par la reacutegression]) on regarde chaque ^yi (donc etiquette preacutevue) par rapport agrave la moyenne des vraies eacutetiquettes y
S S E = S C R = est la variation expliqueacutee par les reacutesidus (Sum of Squares Errors en franccedilais SCR Somme des Carreacutes Reacutesiduelle) on somme els distances (au carreacute) entre les vraies eacutetiquettes y et leur preacutevisions ^y
S S T = S S E + S S R = est la variation totale (Sum of Squares Total en franccedilais SCT Somme des Carreacutes Totale) les eacutetiquettes vraies y par rapport agrave leur moyenne
Nous pouvons alors deacutefinir le coefficient de deacutetermination (R2) comme le ratio entre la somme des carreacutes des eacutecarts agrave la moyenne des valeurs preacutedites par la reacutegression et la somme des carreacutes des eacutecarts agrave la moyenne totale
Le coefficient de deacutetermination varie entre 0 et 1 Lorsquil est proche de 0 le pouvoir preacutedictif du modegravele est faible et lorsquil est proche de 1 le pouvoir preacutedictif du modegravele est fort
httpsfrwikipediaorgwikiRC3A9gression_linC3A9aire
machine learning regression lineacuteaire
Pour ceux qui sont bien agrave lrsquoaise et veulent avoir la formule en dimension p (et non plus
1) nrsquoheacutesitez pas agrave suivre le MOOC drsquoopen classroom de Chloe Agathe Azencott
httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-predictif-
lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-
etiquettes
On considegravere que les erreurs (les diffeacuterences entre les preacutedictions (= la droite) et les vraies eacutetiquettes
(en bleu) sont distribueacutees de faccedilon normale = par une loi normale = en courbe de Gauss
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
on va maximiser la vraisemblance
La vraisemblance est la probabiliteacute drsquoobserver nos donneacutees D
eacutetant donneacute B (le vecteur beta 0 et beta 1)
Eacutetant donneacute Beta (le vecteur beta 0 et beta 1)
On va donc chercher le vecteur Beta qui rend cette probabiliteacute maximale
Pour deacuteterminer beta0 etbeta1de lrsquoeacutequation
machine learning regression lineacuteaire
On va consideacuterer que nos points D (xi et yi) sont indeacutependants et identiquement
distribueacutes srsquoils sont indeacutependants alors la probabiliteacute de D(xi yi) entiegravere
sachant beta est eacutegale au produit chacune des probabiliteacute de xi yi sachant
beta
Or la probabiliteacute de x y est eacutegale agrave la probabiliteacute de y sachant x la probabiliteacute de x
(p ex la probabiliteacute que jrsquoaille au bureau et que mon fils prenne son veacutelo est eacutegale agrave
la probabiliteacute que mon fils prenne son veacutelo sachant que je vais au bureau la
probabiliteacute que jrsquoaille au bureauhellipeuh convaincus Sinon a vu ccedila dans le theacuteoregraveme
de Bayes )
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
On en eacutetait agrave
On va donc chercher beta qui maximise le maximum de vraisemblance on cherche
donc agrave reacutesoudre ceci
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
On peut enlever p(x) car la probabiliteacute des x ne deacutepend pas de beta on peut aussi
passer au log car maximise quelquechose revient agrave maximiser son log on en est
donc agrave reacutesoudre ceci
Or on se souvient que la probabiliteacute drsquoobtenir y sachant x est justement noramelement
distribueacute et donneacute par cette formule
Et qursquoune loi normale peut aussi se noter ainsi en math
Donc on en est agrave
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
Donc on peut noter ainsi
Et on doit donc maximser la somme des log de ce qursquoil y au-dessus
Par ailleurs log (ab) = log a+ log b
Donc log a est (=log de 1 sur racine de 2 pi sigma) une constante
Et le log de lrsquoexponentielle est lrsquoidentiteacute donc on en est agrave maximiser cela
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
Et maximiser un constante ou le 2pi sigma qui est aussi constante revient agrave
maximiser seulement ceci
Et maximiser un nombre neacutegatif revient agrave minimiser le nombre positif correspondant
On retrouve la meacutethode des moindres carreacutes
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
Prenons beta et X dans un
espace agrave p dimensions
Et on cherche agrave trouver beta
Ceci revient agrave reacutesoudre
les moindres carreacutes ici
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
On va ajouter une colonne
de 1 agrave X pour transformer
notre eacutequation ci apregraves en
produit matriciel
Notre eacutequation devient donc
Et la somme des moindres carreacutes
devient
machine learning regression lineacuteaire
Accrochez-vous crsquoest parti httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-
predictif-lineaire4444653-trouvez-une-combinaison-lineaire-de-variables-qui-approxime-leurs-etiquettes
pour minimiser le produit quadratique on calcule le gradient et on lrsquoannule (en
dimension 1 minimiser une fonction est quand sa deacuteriveacutee est nulle)
Notre eacutequation devient donc
et donc beta est eacutegal agrave
CQFD
machine learning regression lineacuteaire
httpsopenclassroomscomfrcourses4011851-initiez-vous-au-machine-
learning4121986-tp-decomposez-lapprentissage-dune-regression-lineaire
bull Pour bien comprendre la formule theta dans la regression lineacuteaire de lrsquoexercice open classrroom
machine learning
bullMOYENNE VARIANCE ECARTS-TYPES and CO
calculer
- la moyenne des x
- la moyenne des y
- la variance de x (= eacutecart-type
au carreacute)
- la variance de y
- le coefficient de correacutelation r
- la regression lineacuteaire y = ax+b
covariance
eacutecarts-
types
datavisualisation
a = cov(xy)V(x)
b=moy(y) ndash amoy(x)
coeff de correlation
moyennes
Voici un petit exercice pour vous rafraichir la meacutemoire et srsquoamuser avec la
visualisation des donneacutees
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
datavisualisation
correction httpsdocsscipyorgdoc
numpyreferencegenerat
ednumpystdhtml
datavisualisation
Reprendre le mecircme exercice avec ces donneacutees-lagrave et repreacutesenter les donneacutees sur
un scheacutema
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
datavisualisation
correction
httpsdocsscipyorgdocnumpyreferencegeneratednumpystdhtml
httpsmatplotliborggalleryspecialty_plotsanscombehtml
import matplotlibpyplot as plt
import numpy as np
x = nparray([10 8 13 9 11 14 6 4 12 7 5])
y1 = nparray([804 695 758 881 833 996 724 426 1084 482 568])
y2 = nparray([914 814 874 877 926 810 613 310 913 726 474])
y3 = nparray([746 677 1274 711 781 884 608 539 815 642 573])
x4 = nparray([8 8 8 8 8 8 8 19 8 8 8])
y4 = nparray([658 576 771 884 847 704 525 1250 556 791 689])
print(nppolyfit([10 8 13 9 11 14 6 4 12 7 5][804 695 758 881 833 996
724 426 1084 482 568]1))
verify the stats
pairs = (x y1) (x y2) (x y3) (x4 y4)
for x y in pairs
print(mean=12f std=12f r=12f (npmean(y) npstd(y)
npcorrcoef(x y)[0][1]) )
datavisualisation ndash Anscombe quartet
correction
Cet exemple est connu sous le nom drsquoAnscombe quartet il montre que les calculs
des donneacutees moyenne ecart type etc peuvent ecirctre les mecircmes mais ne suffisent pas
agrave cateacutegoriser les donneacutees
2 exercices IRIS un plutocirct en culture geacuteneacuterale et en lecture le second
totalement hands-on
httpsmakina-corpuscomblogmetier2017initiation-au-machine-learning-avec-python-
pratique
et
httppython-prepagithubioateliersdata_mininghtml
IRIS (makina corpus et ens) Peacutedagogie
On srsquoappuie maintenant sur lrsquoexemple des IRIS pour comprendre lrsquoensemble du machine learning
et de scikit learn
Le but de cet exercice est
bull De voir un exemple complet avec de vraies donneacutees drsquoentreacutee un vrai exemple scientifique
donc un vrai inteacuterecirct scientifique
bull De voir comment des algorithmes diffeacuterents peuvent donner des reacutesultats
bull De deacutecouvrir scikitlearn
bull Drsquoavoir une premiegravere vue de certains algorithmes
bull Naives Bayes gaussian
bull Mais aussi
bull SVM
bull KNN
bull PCA
bull Gaussian mixture
bull De voir lrsquointeacuterecirct de seacuteparer les donneacutees drsquoentreacutee en deux jeux de tests et drsquoentrainement
bull De nous inteacuteresser agrave la qualiteacute de la preacutediction
A la fin de cet exercice on aura
-utiliseacute de nombreuses fonctionnaliteacutes de sklearn
-deacutecouvertredeacutecouvert gaussian NB mais aussi KNN et SVM PCA gaussian mixture
-On aura suivi toute la logique du machine learning reacutecupeacuteration des donneacutees observation des
donneacutees seacuteparation en jeu drsquoentrainement et jeu de test comparaison drsquoalgorithme
-Deacutecouvert des sortes drsquoiris
Introduction agrave Scikit Learn httpsscikit-learnorgstable
Introduction agrave Scikit Learn
Scikits-Learn est une librairie dapprentissage automatique couvrant lensemble
de la discipline
Les types dapprentissage superviseacute non superviseacute par renforcement par
transfert
Les algorithmes
Linear Regression (reacutegression lineacuteaire)
Logistic Regression (reacutegression logistique)
Decision Tree (arbre de deacutecision)
SVM (machines agrave vecteur de support)
Naive Bayes (classification naiumlve bayeacutesienne)
KNN (Plus proches voisins)
Dimensionality Reduction Algorithms
Gradient Boost amp Adaboost
Reacuteseaux de neuronnes
Introduction agrave Scikit Learn httpsscikit-learnorgstable
Exercice aller sur scikit learn et retrouvez les algorithmes preacuteceacutedents dans le
sheacutema ci-contre permettant de les comparer
Pourquoi deacutebuter avec Scikit-Learn
Cest une bonne ideacutee de deacutebuter la deacutecouverte de lapprentissage
automatique avec cette librairie
Elle dispose dune excellente documentation fournissant de nombreux
exemples
Elle dispose dune API uniforme entre tous les algorithmes ce qui fait quil est
facile de basculer de lun agrave lautre
Elle est tregraves bien inteacutegreacutee avec les Librairies Pandas et Seaborn
Elle dispose dune grande communauteacute et de plus de 800 contributeurs
reacutefeacuterenceacutes sur GitHub
Cest un projet open source
Son code est rapide certaines parties sont impleacutementeacutees en Cython
Ensuite quand vous en aurez fait le tour vous pourrez basculer vers dautres
librairies plus optimiseacutees ou speacutecialiseacutees sur une sujet preacutecis (type
dapprentissage algorithme mateacuteriel ) Notre chapitre de preacutesentation du
Machine Learning propose deacutejagrave un bon panel des autres solutions agrave votre
disposition
Les concepts de la librairie
Les donneacutees
Vos donneacutees sont repreacutesenteacutees par des tableaux agrave 2 dimensions
Typiquement des tableaux Numpy ou Pandas ou Python
Les lignes repreacutesentent les enregistrements
Les colonnes les attributs (hauteur longueur couleur autre information)
Une donneacutee est un vecteur de paramegravetres geacuteneacuteralement des reacuteels mais
les entiers booleacuteens et valeurs discregravetes sont autoriseacutees dans certains
cas
Les labels peuvent ecirctre de diffeacuterents types geacuteneacuteralement des entiers ou
chaicircnes
Les labels sont contenus dans un tableau agrave une dimension sauf rares cas
ougrave ils peuvent ecirctre dans le vecteur de paramegravetres
Les concepts de la librairie
Exercice
httpswwwcourspythoncomtableaux-numpyhtml
Donner les fonctions de numpy qui permettent
Drsquoinverser une matrice
De transposer une matrice
De calculer un produit matriciel
Drsquoajouter des 1 agrave une matrice Que fait numpyshape() Que fait numpyarray()
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Les concepts de la librairie httpswwwcourspythoncomtableaux-numpyhtml
Drsquoinverser une matrice numpylinalginv() gtgtgt from numpylinalg import inv gtgtgt a = nparray([[1 3 3] [1 4 3] [1 3 4]]) gtgtgt inv(a) array([[ 7 -3 -3] [-1 1 0] [-1 0 1]])
De transposer une matrice T
bullgtgtgt a = nparray([[1 2 3] [4 5 6]])
bullTransposeacute
bullgtgtgt aT
array([[1 4] [2 5] [3 6]])
bullDe calculer un produit matriciel dot(ab)
bullgtgtgt a = nparray([[1 2 3] [4 5 6]])
bullgtgtgt b = nparray([[4] [2] [1]])
bullgtgtgt npdot(ab) array([[11] [32]])
bullLe produit drsquoune matrice de taille n x m par une matrice m x p donne une matrice n x p
Correction
numpy httpswwwcourspythoncomtableaux-numpyhtml
ajouter des 1 agrave une matrice Tableaux de 1 - numpyones()
gtgtgt npones(3)
array([ 1 1 1])
gtgtgt npones((23))
array([[ 1 1 1] [ 1 1 1]])
La fonction numpyshape() (forme en anglais) renvoie la taille du tableau
gtgtgt a = nparray([2568])
gtgtgt npshape(a)
(4)
gtgtgt b = nparray([[1 2 3] [4 5 6]]) gtgtgt
npshape(b)
(2 3) Que fait numpyarray() cela creacuteeacutee des tableaux gtgtgt a = nparray([[1 2 3] [4 5 6]]) gtgtgta array([[1 2 3] [4 5 6]])
Correction
matplotlib httpwwwpython-simplecompython-matplotlibpyplotphp
On va srsquoexercer agrave faire des scheacutemas avec pyplot
Importation du module from matplotlib import pyplot
Pour tracer un graphe x-y avec les points relieacutes (pour un nuage de points utiliser plutocirct scatter)
from matplotlib import pyplot pour importer le module
pour tracer un graphe avec des valeurs de x et des valeurs de y en reliant les points dans lordre de la liste
pyplotplot([1 2 3 6] [1 4 9 36])
pyplotshow() montre le graphe courant
on peut indiquer le symbole et la couleur
pyplotplot(x y bo) bleu et avec des ronds
on peut aussi indiquer tous les paramegravetres avec des tags seacutepareacutes
pyplotplot(x y color = green linestyle = dashed linewidth = 2 marker = o markerfacecolor = blue markersize = 5) symboles ronds en bleu avec une taille de 5 et traits pointilleacutes en vert
on peut tracer plusieurs courbes sur le mecircme graphe
pyplotplot(x y r+ y y bo)
Pour tracer un graphe dune liste de valeurs en fonction du numeacutero dordre
pyplotplot([1 2 4 4 2 1] color = red linestyle = dashed linewidth = 2 markerfacecolor = blue markersize = 5)
pyplotylim(0 5)
pyplottitle(Un exemple)
meshgrid httpswwwcourspythoncomvisualisation-couleurhtml
Utilisation de meshgrid()
Pour visualiser une fonction z = f(x y) il faut drsquoabord geacuteneacuterer des tableaux X et Y qui contiennent les valeurs des abscisses et ordonneacutees pour chacun des points gracircce agrave la fonction meshgrid() Ensuite calculer la valeur de z pour chacun de ces points meshgrid() permet de geacuteneacuterer un maillage
gtgtgt import numpy as np
gtgtgt x = nparray([3 4 7])
gtgtgt y = nparray([-1 0])
gtgtgt X Y = npmeshgrid(x y)
gtgtgt X array([[3 4 7] [3 4 7]])
gtgtgt Y array([[-1 -1 -1] [ 0 0 0]])
Utilisation de pcolor()
pcolor() permet une visualisation gracircce agrave des couleurs
Syntaxe laquo standard raquo
import numpy as np
import matplotlibpyplot as plt
x = nplinspace(-3 3 51)
y = nplinspace(-2 2 41)
X Y = npmeshgrid(x y)
Z = (1 - X2 + X5 + Y3) npexp(-X2 - Y2)
calcul du tableau des valeurs de Z
pltpcolor(X Y Z)
pltshow()
Saisir sur votre python
meshgrid httpwwwpython-simplecompython-matplotlibscatterplotphp
marker = o le type de symbole ici un rond Les principaux symboles sont les suivants
o rond
s carreacute (square)
+ croix en forme de +
x croix en forme de x
eacutetoile
D losange (diamond)
d losange allongeacute
H hexagone (h est aussi un hexagone mais tourneacute)
p pentagone
point
gt triangle vers la droite (lt pour vers la gauche)
v triangle vers le bas (^ pour vers la haut)
| trait vertical (_ pour trait horizontal)
1 croix agrave 3 branches vers le bas (2 vers le haut 3 vers la gauche 4 vers la droite)
Exemple
x = [1 2 3 4 5]
y1 = [1 2 3 4 5]
y2 = [1 4 9 16 25]
y3 = [25 16 9 4 1]
pyplotscatter(x y1 s = 130 c = yellow marker = edgecolors = green)
pyplotscatter(x y2 s = 50 c = red marker = + linewidth = 3)
pyplotscatter(x y3 s = 50 c = cyan marker = o edgecolors = none)
pyplottitle(scatter plot)
Saisir sur votre python
ravel httpswwwtutorialspointcomnumpynumpy_ndarray_ravelhtm
Cette fonction retourne un tableau array en une dimension
import numpy as np
a = nparange(8)reshape(24)
print The original array is
print a
print n
print After applying ravel function
print aravel()
print n
print Applying ravel function in F-style ordering
print aravel(order = F)
Votre reacutesultat devrait ressembler agrave cela
The original array is
[[0 1 2 3]
[4 5 6 7]]
After applying ravel function
[0 1 2 3 4 5 6 7]
Applying ravel function in F-style ordering [0 4 1 5 2 6 3 7]
Saisir sur votre python
Numpyc_ httpsstackoverflowcomquestions39136730confused-about-numpy-c-document-and-sample-code
Cette fonction concategravene plusieurs array
gtgtgt numpyc_[nparray([[123]]) 0 0 nparray([[456]])] array([[1 2 3 0 0 4 5 6]])
Saisir sur votre python
Preacutediction
Lalgorithme de preacutediction est repreacutesenteacute par une classe
Vous devez commencer par choisir lalgorithme agrave utiliser que nous
appelerons preacutedicteurclassifieurestimator Les algorithmes sont des
classes Python Les donneacutees sont toujours des tableaux
NumpyScipyPandasPython
Vous preacutecisez ses eacuteventuels paramegravetres appeleacutes hyperparamegravetres en
instanciant la classe
Vous lalimentez avec la fonction fit dans le cas dun apprentissage
superviseacute
Vous lancez la preacutediction sur un ensemble de valeurs via la fonction
predict parfois appeleacutee transform dans le cas de lapprentissage non
superviseacute
Exercice Reprenez les exercices preacuteceacutedents et trouver les fit et predict ou transform
Deacutecouverte par la pratique
- Classer une fleur selon des critegraveres observables
Nous allons utiliser pour ce tutoriel la base de donneacutees dIris de
la librairie scikit-learn
Mais quel est donc cet Iris
Cet exemple est tregraves souvent repris sur Internet Nous ne
deacuterogerons pas agrave la regravegle Nous reacutealiserons cependant un cas
dutilisation plus complet que la plupart des exemples que vous
pourrez trouver
Cette base contient des Iris quun botaniste Ronald Fisher a
classeacutes en 1936 agrave laide dune clef didentification des plantes
(type de peacutetales seacutepale type des feuilles forme des feuilles )
Puis pour chaque fleur classeacutee il a mesureacute les longueurs et largeurs des seacutepales et peacutetales
Lideacutee qui nous vient alors consiste agrave demander agrave lordinateur de deacuteterminer automatiquement lespegravece dune
nouvelle plante en fonction de la mesure des dimensions de ses seacutepales et peacutetales que nous aurions reacutealiseacutee
sur le terrain Pour cela nous lui demanderons de construire sa deacutecision agrave partir de la connaissance extraite
des mesures reacutealiseacutees par M Fisher Autrement dit nous allons donner agrave lordinateur un jeu de donneacutees deacutejagrave
classeacutees et lui demander de classer de nouvelles donneacutees agrave partir de celui-ci
Cest un cas dapprentissage superviseacute (mais nous le transformerons aussi en non superviseacute)
Une fois alimenteacutes avec les observations connues nos preacutedicteurs vont chercher agrave identifier des groupes
parmi les plantes deacutejagrave connues et deacutetermineront quel est le groupe duquel se rapproche le plus notre
observation
Botanistes en herbe agrave vos claviers
Note pour les naturalistes amateurs
Si vous aimez les clefs de deacutetermination une des plus connues est celle de M Gaston Bonnier Ses livres
sont aujourdhui dans le domaine public
Classer une fleur selon des critegraveres observables Le but de lrsquoexercice est que vous saisissiez au clavier chacune des eacutetapes afin de
comprendre au mieux ce que lrsquoon fait
Chargement de la base
from sklearn import datasets
iris = datasetsload_iris()
La variable iris est dun type inhabituel deacutecouvrons-le
Deacutecouverte du contenu de la base
print(type(iris))
Ce nest pas un DataFrame mais une sorte de dictionnaire Rien de bien complexe
pour un Pythoniste
ltclass sklearndatasetsbaseBunchgt
Et que peut-on faire avec
print(dir(iris))
[DESCR data feature_names target target_names]
print(irisfeature_names) Les noms des paramegravetres de nos donneacuteesenregistrements
Lattribut feature_names contient le nom des diffeacuterents paramegravetres de nos donneacutees il
sagit des longueurs et largeurs de peacutetales et seacutepales
[sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)] Un aperccedilu
des 5 premiers enregistrements
print (irisdata[5])
array([[ 51 35 14 02] [ 49 3 14 02] [ 47 32 13 02] [ 46 31 15 02] [ 5
36 14 02]])
Classer une fleur selon des critegraveres observables
Question donnez les longueurs et largeusr des seacutepales peacutetales des 5 premiers
iris de la base
httpscanopeac-besanconfrfloredidactitielfleurfleurhtm
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Classer une fleur selon des critegraveres observables
print(irisfeature_names) donne ces reacutesultats
[sepal length (cm) sepal width (cm) petal length (cm)
petal width (cm)]
print (irisdata[5]) donne cela
array([[ 51 35 14 02] [ 49 3 14 02] [ 47 32 13
02] [ 46 31 15 02] [ 5 36 14 02]])
donc pour lrsquoiris 0 la longueur du seacutepale est 51 cm la
largeur du sepale 35 cm
La longuer du petale 14 cm et la largeur du petale 02 cm
pour lrsquoiris 1 la longueur du seacutepale est 49 cm la largeur du
sepale 3 cm
La longuer du petale 14 cm et la largeur du petale 02 cm
donc pour lrsquoiris 2 la longueur du seacutepale est 47 cm la
largeur du sepale 32 cm
La longuer du petale 13 cm et la largeur du petale 02 cm
donc pour lrsquoiris 3 la longueur du seacutepale est 46 cm la
largeur du sepale 31 cm
La longuer du petale 15 cm et la largeur du petale 02 cm
donc pour lrsquoiris 0 la longueur du seacutepale est 5 cm la
largeur du sepale 36 cm
La longuer du petale 14 cm et la largeur du petale 02 cm
Correction
Classer une fleur selon des critegraveres observables
Si comme moi vous trouvez que sur les images les sepales ont lrsquoair petit en tout cas plus
petits que les peacutetales alors que la base donne lrsquoinverse voici un nouveau sheacutema plus clair
Correction
httpkidisciencecafe-
sciencesorgarticlesp
redire-les-longueurs-
de-petale-des-fleurs-
diris
liste des espegraveces connues
La liste des espegraveces connues nos labels de classification est contenue dans
lattribut target_names
print(iristarget_names)
array([setosa versicolor virginica] dtype=ltU10)
Creacuteation dune variable target pour un accegraves plus facile agrave cet attribut
target = iristarget
Les labels associeacutes agrave chaque enregistrement
print(target)
target[0] est le label de iris[data][0]
Les targets sont un tableau indiquant le numeacutero de lespegravece de chaque
enregistrement
array([0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2])
for i in [012]
print(classe s nb exemplaires s (i len(target[ target == i]) ) )
classe 0 nb exemplaires 50
classe 1 nb exemplaires 50
classe 2 nb exemplaires 50
liste des espegraveces connues
Exercice donnez les espegraveces drsquoiris (et reconnaitre les images) et dire combien de
chaque espegravece a-t-on dans la base
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
liste des espegraveces connues
correction
httppython-prepagithubioateliersdata_mininghtml
La liste des espegraveces connues sont dans dans lattribut target_names
print(iristarget_names)
array([setosa versicolor virginica] dtype=ltU10)
target = iristarget
target[0] est le label de iris[data][0]
for i in [012]
print(classe s nb exemplaires s (i len(target[ target == i]) ) )
classe 0 nb exemplaires 50
classe 1 nb exemplaires 50
classe 2 nb exemplaires 50
liste des espegraveces connues
correction
leacutechantillon de fleurs
Exercice pouvez-vous nous dire ce que contient lrsquoeacutechantillon de
donneacutees iris
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
leacutechantillon de fleurs
En reacutesumeacute leacutechantillon de fleurs propose plusieurs informations
Les noms des donneacutees disponibles feature_names
Les mesures reacutealiseacutees sur leacutechantillon de fleurs connues et deacutejagrave classeacutees
data
Il sagit de nos informations des paramegravetres de nos vecteurs pour chaque
fleur
Le nom de chaque espegravece target_names
Le classement de chaque enregistrement data dans son espegravece target
Il sagit de la classe de chaque fleurvecteur
correction
Eacutechantillon de fleurs
print(irisDESCR)
Iris Plants Database ==================== Notes ----- Data Set Characteristics Number of Instances 150
(50 in each of three classes) Number of Attributes 4 numeric predictive attributes and the class Attribute
Information - sepal length in cm - sepal width in cm - petal length in cm - petal width in cm - class - Iris-Setosa
- Iris-Versicolour - Iris-Virginica Summary Statistics ============== ==== ==== ======= =====
==================== Min Max Mean SD Class Correlation ============== ==== ==== ======= =====
==================== sepal length 43 79 584 083 07826 sepal width 20 44 305 043 -04194 petal
length 10 69 376 176 09490 (high) petal width 01 25 120 076 09565 (high) ============== ====
==== ======= ===== ==================== Missing Attribute Values None Class Distribution 333 for
each of 3 classes Creator RA Fisher Donor Michael Marshall (MARSHALLPLUioarcnasagov) Date
July 1988 This is a copy of UCI ML iris datasets httparchiveicsuciedumldatasetsIris The famous Iris
database first used by Sir RA Fisher This is perhaps the best known database to be found in the pattern
recognition literature Fishers paper is a classic in the field and is referenced frequently to this day (See Duda
amp Hart for example) The data set contains 3 classes of 50 instances each where each class refers to a type of
iris plant One class is linearly separable from the other 2 the latter are NOT linearly separable from each other
References ---------- - FisherRA The use of multiple measurements in taxonomic problems Annual Eugenics
7 Part II 179-188 (1936) also in Contributions to Mathematical Statistics (John Wiley NY 1950) -
DudaRO amp HartPE (1973) Pattern Classification and Scene Analysis (Q327D83) John Wiley amp Sons ISBN
0-471-22361-1 See page 218 - Dasarathy BV (1980) Nosing Around the Neighborhood A New System
Structure and Classification Rule for Recognition in Partially Exposed Environments IEEE Transactions on
Pattern Analysis and Machine Intelligence Vol PAMI-2 No 1 67-71 - Gates GW (1972) The Reduced
Nearest Neighbor Rule IEEE Transactions on Information Theory May 1972 431-433 - See also 1988 MLC
Proceedings 54-64 Cheeseman et als AUTOCLASS II conceptual clustering system finds 3 classes in the
data - Many many more
correction
Eacutechantillon de fleurs correction
Observation des donneacutees
matplotlib inline
import matplotlibpyplot as plt
import matplotlib as mpl
import numpy as np
fig = pltfigure(figsize=(8 4))
figsubplots_adjust(hspace=04 wspace=04)
ax1 = pltsubplot(121)
clist = [violet yellow blue]
colors = [clist[c] for c in iristarget]
ax1scatter(data[ 0] data[ 1] c=colors)
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
ax2 = pltsubplot(122)
ax2scatter(data[ 2] data[ 3] color=colors)
pltxlabel(Longueur du petal (cm))
pltylabel(Largueur du petal (cm))
Leacutegende
for ind s in enumerate(iristarget_names)
on dessine de faux points car la leacutegende naffiche que les points ayant un label
pltscatter([] [] label=s color=clist[ind])
pltlegend(scatterpoints=1 frameon=False labelspacing=1 bbox_to_anchor=(18
5) loc=center right title=Espegraveces)
pltplot()
Le but ici est simplement de regarder les donneacutees sur un scheacutema httpsmatplotlib
orgapi_as_gen
matplotlibpyplots
ubplothtml
Observation des donneacutees
Voici ce que lrsquoon obtient (pas important si vous nrsquoavez pas fait tourner le code
pour obtenir ces images il est seulement important dans la meacutethode drsquoessayer
de laquo dessiner raquo nos donneacutees avant de vouloir les classifier ou de faire tourner un
algo dessus)
Exercice pourriez-vous deacutejagrave trouver un critegravere une meacutethode de classification
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Observer avec Seaborn
Cest assez vite eacutecrit et deacutejagrave fort parlant la seacuteparation des groupes entre
les longueurs et largeurs de peacutetales semble tregraves nette et deacuteterminante
Nous pourrions aussi le faire entre les longueurs de peacutetales et largeurs de
seacutepales et inversement mecircme si cela semble moins naturel
La librairie Seaborn propose une matrice precircte agrave lemploi via le graphique
Scatterplot Matrix pour reacutealiser ce type de graphique
import seaborn as sns
import pandas as pd
snsset()
df = pdDataFrame(data columns=iris[feature_names] )
df[target] = target
df[label] = dfapply(lambda x iris[target_names][int(xtarget)] axis=1)
dfhead()
correction
Idem si le code
ne tourne pas
pas grave
regarder les
reacutesultats
Observer avec Seaborn
Il ne reste plus quagrave dessiner le graphique avec Seaborn
snspairplot(df hue=label vars=iris[feature_names] size=2)
Exercice Quelle
classification
proposeriez-vous laquo de
tecircte raquo
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Observer avec Seaborn Pour moi plusieurs
scheacutemas semblent
bien seacuteparer les
espegraveces
Voici ma proposition
drsquoalgo
Si longueur petalelt25
cm alors sebosa
Si longueur petale
entre 25 et 5 cm
versicolor
Sinon virginica
correction
Apprentissage
On va essayer de traiter ceci avec des algorithmes Nous pourrions ici utiliser
plusieurs algorithmes
Nous proposons de commencer par la classification Naive Bayes qui suppose que
chaque classe est construite agrave partir dune distribution Gaussiegravenne aligneacutee
Elle nimpose pas de deacutefinir dhyperparamegravetres et est tregraves rapide
Il faut utiliser GaussianNB qui est dans sklearnnaive_bayes
Puis Il faut creacuteer une instance du classificateur GaussianNB
Il faut faire fitter nos donneacutees data et target pour lrsquoapprentissage
Donc avec fit(data target)
Si on ne sait plus ce que lrsquoon peut faire avec notre classificateur imprimons son
directory avec print(dir(clf))
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Apprentissage
from sklearnnaive_bayes import GaussianNB
Creacuteation du classifieur
clf = GaussianNB()
Apprentissage
clffit(data target)
GaussianNB(priors=None)
print(dir(clf))
[ _abc_cache _abc_negative_cache _abc_negative_cache_version
_abc_registry _estimator_type _get_param_names _joint_log_likelihood
_partial_fit _update_mean_variance fit get_params partial_fit predict
predict_log_proba predict_proba priors score set_params ]
clfget_params()
priors None
correction
Apprentissage
Exercice Exeacutecutons la preacutediction sur les donneacutees dapprentissage elles-
mecircmes avec clfpredict(data)
Et imprimer le reacutesultat qursquoobservez-vous Qursquoen pensez-vous
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Apprentissage
Exeacutecutons la preacutediction sur les donneacutees dapprentissage elles-mecircmes
result = clfpredict(data)
result
array([0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 2 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 2 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2
2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2])
mes remarques a priori on a fait tourner lrsquoalgo ndashtrouveacute par nos donneacutees
drsquoentreacutee ndash sur nos donneacutees drsquoentreacutee on aurait pu impaginer qursquoil redonne
exactement les valeurs drsquoeacutetiquettes vraies or ce nrsquoest pas le cas
correction
Qualiteacute de la preacutediction
Exercice Observons la qualiteacute de la preacutediction
Lagrave ou la preacutediction est juste la diffeacuterence de result - target doit ecirctre eacutegale agrave 0 Si la
preacutediction est parfaite nous aurons des zeacuteros dans tout le tableau Ce qui est agrave peine
le cas
Montrer les erreurs de preacutediction et calculer le pourcentage de reacuteussite agrave trouver la
bonne eacutetiquette de notre algorithme
Qursquoen deacuteduisez-vous
Pensez-vous que lrsquoalgorithme a lsquosurapprisrsquo
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Qualiteacute de la preacutediction
Lagrave ou la preacutediction est juste la diffeacuterence de result - target doit ecirctre eacutegale agrave 0 Si la
preacutediction est parfaite nous aurons des zeacuteros dans tout le tableau Ce qui est agrave peine
le cas
result - target
array([ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0])
Calculons le pourcentage derreur
errors = sum(result = target) 6 erreurs sur 150 mesures
print(Nb erreurs errors)
print( Pourcentage de preacutediction juste (150-errors)100150) 96 de reacuteussite Nb
erreurs 6
Pourcentage de preacutediction juste 960
On aurait pu penser que les tableaux seraient parfaitement identiques mais
lalgorithme utiliseacute estime vraiment le label final en fonction des regravegles de probabiliteacute
quil a eacutetablies Ces regravegles ne sont pas rigoureusement identiques agrave la reacutealiteacute
Cela prouve aussi que lalgorithme essaye de trouver un classement intelligent et ne
se contente pas de comparer les valeurs dorigines aux valeurs entrantes
Ici nous ne sommes pas dans un cas de surapprentissage
correction
qualiteacute de la preacutediction Exercice
Ici nous avons regardeacute que notre algo preacutevoit le bon classement dans
96 des cas Pensez-vous que crsquoest un bon algorithme
que proposeriez-vous pour mieux calculer si votre algorithme est bon ou
pas
Regarder dans sklearndans sklearnmetrics regarder lrsquo accuracy_score
accuracy_score(result target)
Regarder aussi la matrice de confusiondans sklearnmetrics regarder
confusion_matrix
confusion_matrix(target result)
De quoi srsquoagit-il
httpsfrwikipediaorgwikiMatrice_de_confusion
Ou si vous avez le temps
httpsopenclassroomscomfrcourses4297211-evaluez-et-ameliorez-les-
performances-dun-modele-de-machine-learning
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
qualiteacute de la preacutediction Notre solution pour mesurer la qualiteacute de la preacutediction est tregraves rudimentaire
Scikit-Learn propose des solutions plus abouties
from sklearnmetrics import accuracy_score
accuracy_score(result target) 96 de reacuteussite
095999999999999996
Scikit-Learn permet aussi de calculer la matrice de confusion
from sklearnmetrics import confusion_matrix
conf = confusion_matrix(target result)
conf
array([[50 0 0]
[ 0 47 3]
[ 0 3 47]])
La matrice de confusion mesure
Les true positives ceux preacutevus en telle classe et qui el sont reacuteellement
Les false positive ils ont eacuteteacute preacutevus dans une classe mais en fait sont drsquoune
autre
Les false negatives on ne les avait pas preacutevu dans cette classe alors qursquoen
fait ils y sont en vrai
Les true negatives on ne les avait pas preacutevu ici et on a bien fait car ils nrsquoy
sont pas en vrai
correction
qualiteacute de la preacutediction
correction
Qualiteacute de la preacutediction Et Seaborn permet de la repreacutesenter avec le Heatmap
snsheatmap(conf square=True annot=True cbar=False
xticklabels=list(iristarget_names) yticklabels=list(iristarget_names))
pltxlabel(valeurs preacutedites)
pltylabel(valeurs reacuteelles)
Lon observe ici que
Lespegravece Setosa a eacuteteacute parfaitement identifieacutee
3 Virginica ont eacuteteacute confondues avec des Versicolor et inversemment
Ce nest pas tregraves surprenant les graphiques montrent une nette seacuteparation des
Setosa avec les 2 autres groupes qui sont nettement moins deacutetacheacutes
Correction compleacutement avec seaborn
Seacuteparation du jeu de tests et dapprentissage
Maintenant une prise de recul srsquoimpose
Nous avons entraineacute notre modegravele sur une base de donneacutees
On trouve un algorithme
Ensuite on regarde sur ces mecircmes donneacutees si lsquolrsquoalgorithme est performant
Nrsquoy a-t-il pas quelque chose qui vous gecircne
Imaginons que nos fleurs soient des versicolor agrave 95
Trouvez moi un algorithme bon agrave 95
Reacuteponse lrsquoaglo toutes les fleurs sont des versicolor sera bon nrsquoest-ce pas
Aussi on peut tregraves bien faire un algo juste agrave 100 avec nos donneacutees drsquoentreacutee si je
reprends lrsquoexemple preacuteceacutedent je vois que les fleurs numeacuteros52 70 77 106 119
133 sont mal eacutetiquetteacutees je peux tregraves bien ajouter dans mon algo
Et si numeacutero= 527077 alors eacutetiquette 2
Et si numeacutero= 106119 133 alors eacutetiquette 3
Que pensez-vous drsquoun tel algo
Exercice Que proposeriez-vous pour remeacutedier agrave cela
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Seacuteparation du jeu de tests et dapprentissage
La reacuteponse est dans le fait de seacuteparer le jeu de donneacutees de deacutepart
Nous ne disposons que dun seul jeu de donneacutees connues
Geacuteneacuteralement lon teste lalgorithme sur de nouvelles donneacutees sinon les reacutesultats sont
forceacutement toujours tregraves bons
Nous pourrions choisir un enregistrement sur 2 comme ci-dessous
data_test target_test = data[2] target[2]
data_train target_train = data[12] target[12]
target_test target_train len(target_test) len(target_train)
(array([0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2]) array([0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2])
75
75)
Mais ce nest pas une tregraves bonne meacutethode
Dans cet exemple nous seacutelectionnons un enregistrement sur 2 Nous nous en sortons
bien car toutes les fleurs sont regroupeacutees par ordre de famille dans le tableau mais si
les setosa avaient eacuteteacute stockeacutees 1 sur 2 elles auraient soit toutes eacuteteacute utiliseacutees pour
lapprentissage et aucune naurait figureacute dans le jeu de tests ou inversement
correction
Model selection
Dans les faits on va plutocirct seacuteparer notre jeu de donneacutees en un jeu de donneacutee
drsquoentrainement aux alentours de 75 des donneacutees drsquoentreacutee et garder le reste en
jeu de test
Le module model_selection de Scikit-Learn propose des fonctions pour seacuteparer le
jeu de donneacutees du jeu de tests qui sont attentives agrave ce type de petits problegravemes
Il faut importer
train_test_split
Et donner la taille des donneacutees de tests
data_test = train_test_split(data target random_state=0 train_size=05)
httpsscikit-
learnorgstablemodulesgeneratedsklearnmodel_selectiontrain_test_splithtml
Exercice deacutecomposer notre jeu de donneacutees en jeu drsquoentrainement et jeu de test
avec 50 des donneacutees en jeu de test
Imprimez les 5 premiers eacuteleacutements
correction
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Model selection
from sklearncross_validation import train_test_split Version 0171 from
sklearnmodel_selection import train_test_split version 0181
split the data with 50 in each set
data_test = train_test_split(data target random_state=0 train_size=05)
data_train data_test target_train target_test = data_test
La fonction train_test_split permet de deacutecomposer le jeu de donneacutees en 2
groupes les donneacutees pour lapprentissage et les donneacutees pour les tests
Le paramegravetre train_size indique la taille du jeu dapprentissage qui sera utiliseacute
50 des enregistrements
data_test[5]
array([[ 58 28 51 24]
[ 6 22 4 1 ]
[ 55 42 14 02]
[ 73 29 63 18]
[ 5 34 15 02]])
correction
Exercice maintenant reacute-entrainer le modegravele avec les nouvelles donneacutees
drsquoentrainement (seulement) et calculer le score et la matrice de confusion
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
classification Il ne reste plus quagrave relancer la classification
clf = GaussianNB()
clffit(data_train target_train)
result = clfpredict(data_test)
Puis de calculer de nouveau la qualiteacute de la preacutediction
Score
accuracy_score(result target_test)
Cela reste toujours tregraves bon
094666666666666666
Affichons la matrice de confusion Matrice de confusion
conf = confusion_matrix(target_test result)
conf
array([[21 0 0]
[ 0 30 0]
[ 0 4 20]])
correction
les territoires de la classification Notre preacutedicteur sest construit une image de nos donneacutees
Visualisons-lagrave pour toutes les combinaisons de longueurs et largeurs de
seacutepales connues
Lideacutee est la suivante
Nous construisons un maillage de toutes les combinaisons possibles des
longueurs et largeurs des seacutepales comprises entre leurs valeurs minmax
Pour chaque couple de point (longueur largeur) compris entre les
minmax observeacutes nous demandons de preacutedire lespegravece de la fleur
Nous affichons sur la carte les preacutedictions reacutealiseacutees (une couleur pour
chaque point)
On ne conserve que les longueurslargeurs des seacutepales
data = irisdata[ 2]
target = iristarget
data[5]
Aperccedilu des donneacutees
array([[ 51 35]
[ 49 3 ]
[ 47 32]
[ 46 31]
[ 5 36]])
les territoires de la classification choisissons Gaussian NB comme classificateur
clf = GaussianNB()
clffit(data target)
et un indice de population de notre tableau de 015 cm tous les points seront
eacuteloigneacutes les uns des autres de 015 cm
h = 15
Nous recherchons les valeurs minmax de longueurslargeurs des seacutepales en
ajoutant 1 pour laisser juste un peu de marge
x_min x_max = data[ 0]min() - 1 data[ 0]max() + 1
y_min y_max = data[ 1]min() - 1 data[ 1]max() + 1
et nous construisons un ensemble de points fictifs x et y seacutepareacutes de 015
x = nparange(x_min x_max h)
y = nparange(y_min y_max h)
Le tableau x contient la liste des longueurs des seacutepales qui seront utiliseacutees pour les
tests de classification comprises entre les minmax observeacutes et seacutepareacutes de 015 cm
x
array([ 33 345 36 375 39 405 42 435 45
465 48 495 51 525 54 555 57 585
6 615 63 645 66 675 69 705 72
735 75 765 78 795 81 825 84 855
87 885])
les territoires de la classification Explications
Le tableau xx contient les diffeacuterentes longueurs reacutepeacuteteacutees autant de fois que nous
avons de mesures pour les largeurs
xx Vecteur des valeurs de X reacutepeacuteteacute autant de fois que lon a de valeurs
diffeacuterentes pour Y
array([[ 33 345 36 855 87 885]
[ 33 345 36 855 87 885]
[ 33 345 36 855 87 885]
[ 33 345 36 855 87 885]
[ 33 345 36 855 87 885]
[ 33 345 36 855 87 885]])
Inversement le tableau yy contient chaque largeur reacutepeacuteteacutee autant de fois quil y a
de mesures diffeacuterentes des longueurs
yy
array([[ 1 1 1 1 1 1 ]
[ 115 115 115 115 115 115]
[ 13 13 13 13 13 13 ]
[ 505 505 505 505 505 505]
[ 52 52 52 52 52 52 ]
[ 535 535 535 535 535 535]])
les territoires de la classification La fonction ravel applatit un tableau agrave n dimensions en 1 tableau dune dimension
a = [ [10 20]
[ 1 2] ]
nparray(a)ravel()
array([10 20 1 2])
La fonction zip geacutenegravere quant-agrave-elle une liste de n-uplets constitueacutee des eacuteleacutements du mecircme rang de
chaque liste reccedilue en paramegravetre
list(zip([102030] [123]))
[(10 1) (20 2) (30 3)]
Nous pouvons donc maintenant visualiser le contenu du jeu de donneacutees geacuteneacutereacute
data_samples[10]
[(32999999999999998 10)
(34499999999999997 10)
(35999999999999996 10)
(37499999999999996 10)
(38999999999999995 10)
(40499999999999989 10)
(41999999999999993 10)
(43499999999999996 10)
(44999999999999991 10)
(46499999999999986 10)]
Ces couples de points ne sont autres que des mesures de fleurs imaginaires comprises entre les
valeurs minmax connues
Le but eacutetant de deacuteterminer leur espegravece pour voir lextension des territoires de chacune delle telle que
classeacutee par lordinateur
les territoires de la classification Nous pouvons maintenant afficher les espegraveces telles que lalgorithme les
eacutevaluerait si nous les mesurerions dans la nature
Z = clfpredict(data_samples)
Z = Zreshape(xxshape)
pltfigure(1)
pltpcolormesh(xx yy Z) Affiche les deacuteductions en couleurs pour les
couples xy Plot also the training points pltscatter(data[ 0] data[ 1]
c=target)
colors = [violet yellow red]
C = [colors[x] for x in Z]
pltscatter(xxravel() yyravel() c=C)
pltxlim(xxmin() - 1 xxmax() + 1)
pltylim(yymin() - 1 yymax() + 1)
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
Cette image nest autre que votre clef de
deacutetermination Imprimez-lagrave et partez
identifier les fleurs sur le terrain mesurez
les longueurslargeurs de seacutepales
recherchez-les sur le graphique la couleur
du point vous donne lespegravece
les territoires de la classification
Affichons le limites avec pcolormesh
pltfigure(1)
pltpcolormesh(xx yy Zreshape(xxshape)) Affiche les deacuteductions en
couleurs pour les couples xy Plot also the training points
colors = [violet yellow red]
C = [colors[x] for x in target]
pltscatter(data[ 0] data[ 1] c=C)
pltxlim(xxmin() xxmax())
pltylim(yymin() yymax())
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
KNN Essayons le mecircme traitement en remplaccedilant GaussianNB par
KN
La classe agrave utiliser est
from sklearn import neighbors
clf = neighborsKNeighborsClassifier()
Si vous travaillez dans un notebook Jupyter (fortement
recommandeacute) utilisez le deacutecorateur interact pour faire varier
lhyperparamegravetre N du nombre voisins
from ipywidgets import interact
interact(n=(020))
def n_change(n=5)
clf = neighborsKNeighborsClassifier(n_neighbors=n)
clffit(data target)
Z = clfpredict(data_samples)
pltfigure(1)
pltpcolormesh(xx yy Zreshape(xxshape)) Affiche les deacuteductions en couleurs pour les
couples xy Plot also the training points
colors = [violet yellow red]
C = [colors[x] for x in target]
pltscatter(data[ 0] data[ 1] c=C)
pltxlim(xxmin() xxmax())
pltylim(yymin() yymax())
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
KNN Calcul de la preacutecision de la preacutediction en
fonction de N
data_test target_test = irisdata[2]
iristarget[2]
data_train target_train = irisdata[12]
iristarget[12]
result = []
n_values = range(120)
for n in n_values
clf=neighborsKNeighborsClassifier
(n_neighbors=n)
clffit(data_train target_train)
Z = clfpredict(data_test)
score = accuracy_score(Z
target_test)
resultappend(score)
pltplot(list(n_values) result)
Le graphique geacuteneacutereacute montre que la preacutediction semble la meilleure pour N=8
Si vous souhaitez deacutecouvrir comment optimiser au mieux vos hyperparamegravetres la
fonction grid search vous simplifie eacutenormeacutement la recherche des hyperparamegravetres
optimaux
KNN httppython-prepagithubioateliersdata_mininghtml
Lorsqursquoarrive une observation inconnue nous allons chercher dans la base de donneacutee drsquoentrainement les
lsquoplus proches voisinsrsquo qui lui ressemblent plus et nous faisons un vote entre eux pour deacutecider de la classe de
lrsquoobservation inconnue
Comme nous avons un problegraveme de classification il nous faut un ldquoclassifierrdquo
gtgtgt from sklearn import neighbors
gtgtgt clf = neighborsKNeighborsClassifier()
clf sait apprendre agrave faire des deacutecisions agrave partir de donneacutees
gtgtgt clffit(data target)
et preacutedire sur des donneacutees
gtgtgt clfpredict(data[10])
array([0 0 0 0 0 1 1 2 1 1 2 2 2 2 2])
gtgtgt target[10]
array([0 0 0 0 0 1 1 1 1 1 2 2 2 2 2])
Remarque
Comment faire que un preacutedire aux plus proches voisins nrsquoait aucune erreur sur les donneacutees drsquoentraicircnement
Pourquoi est-ce illusoire
72122 Donneacutees de test
Pour tester la preacutediction sur des donneacutees non vues il nous faut en mettre de coteacute
gtgtgt data_train = data[2]
gtgtgt data_test = data[12]
gtgtgt target_train = target[2]
gtgtgt target_test = target[12]
gtgtgt clffit(data_train target_train)
Maintenant testons la preacutediction sur les donneacutees de ldquotestrdquo
gtgtgt npsum(clfpredict(data_test) - target_test)
1
Une seule erreur
Apprentissage non superviseacute Si nous supprimons linformation target nous tombons dans le cas dalgorithmes de
clustering nous pouvons toujours demander agrave ce que notre algorithme seacutepare nos
donneacutees en 3 groupes sans connaissance de leurs veacuteritables eacutetiquettes
Saura-t-il retrouver les groupes initiaux
Reacuteduction de dimension
Dans le cas des algorithmes non superviseacutes il est tregraves freacutequent de disposer de tregraves
grandes quantiteacutes de paramegravetres Ne sachant pas encore qui est responsable de
quoi on a tendance agrave tout livrer agrave la machine
Cela pose 2 problegravemes
La visualisation des donneacutees au delagrave de 3 paramegravetres notre cerveau est bien mal
outilleacute pour se repreacutesenter les donneacutees
La complexiteacute des calculs plus le nombre de paramegravetres est grand plus nous
aurons des calculs complexes et longs
Pour contourner ces problegravemes il est courant de reacuteduire la dimension du vecteur de
donneacutees agrave quelque chose de plus simple La difficulteacute est alors de reacuteduire le
nombre de paramegravetres tout en conservant lessentiel de linformation notamment
les variations susceptibles de permettre le regroupement des donneacutees
Plusieurs techniques de reacuteduction sont disponibles avec Scikit-Learn
Nous utiliserons pour cet exemple lanalyse en composante principale dite PCA
Le module manifold propose aussi dautres types dalgorithmes
PCA PCA est une technique lineacuteaire de reacuteduction de dimension qui a
lavantage decirctre tregraves rapide Elle sutilise simplement
Vous deacutefinissez le nombre de paramegravetres
Vous alimentez lalgorithme avec les donneacutees agrave reacuteduire
Vous lancez la preacutediction ici appeleacutee reacuteductiontransformation
from sklearndecomposition import PCA
Deacutefinition de lhyperparamegravetre du nombre de composantes voulues
model = PCA(n_components=2)
Alimentation du modegravele
modelfit(irisdata) Transformation avec ses propres donneacutees
reduc = modeltransform(irisdata )
Nous venons de reacuteduire notre vecteur de 4 paramegravetres en 1 vecteur de 2
paramegravetres dont les variations sont censeacutees ecirctre similaires
Autrement dit nous devrions ecirctre capable de classer nos fleurs avec ces
vecteurs reacuteduits en ayant une qualiteacute proche de celle utilisant les vecteurs
originaux
PCA
irisdata[5]
Consultation des donneacutees originales
array([[ 51 35 14 02]
[ 49 3 14 02]
[ 47 32 13 02]
[ 46 31 15 02]
[ 5 36 14 02]])
Et de leur version reacuteduite
reduc[5]
array([[-268420713 032660731]
[-271539062 -016955685]
[-288981954 -013734561]
[-27464372 -031112432]
[-272859298 033392456]])
dfhead()
Ajoutons les nouveaux paramegravetres dans le dataframe dorigine
df[PCA1] = reduc[ 0]
df[PCA2] = reduc[ 1]
dfhead()
PCA
Puis affichons les nouveaux couples de points (PCA1 PCA2) avec la
couleur de lespegravece associeacutee
colors = [violet yellow blue]
pltscatter(df[PCA1] df[PCA2] c=[ colors[c] for c in df[target] ])
pltxlabel(PCA1)
pltylabel(PCA2)
Nous obtenons 3 groupes plutocirct bien dissocieacutes
Maintenant ce nouveau classement peut-il
permettre un bon regroupement des 3
espegraveces le graphique semble le confirmer
veacuterifions cela avec le clustering
Clustering Il ne reste plus quagrave exeacutecuter le regroupement Plusieurs algorithmes
existent
k-Means qui se rapproche des plus proches voisins dans sa logique
recherche les donneacutees proches des centres des clusters Il est tregraves simple
mais nest vraiment efficace que sur des donneacutees organiseacutees en cercles
ici nous avons plutocirct des droites ou des ellipses
GMM Gaussian Mixture Models est plus complexe mais sadapate tregraves
bien agrave diffeacuterentes formes de clusters (groupes)
Scikit Learn en propose beaucoup dautres comme Spectral clustering
Mean Shift Hierarchical clustering
Nous utiliserons GMM pour cet exemple
from sklearnmixture import GaussianMixture
Creacuteation du modegravele avec 3 groupes de donneacutees
model = GaussianMixture (n_components=3 covariance_type=full)
Apprentissage il ny en a pas vraiment
modelfit(df[[PCA1 PCA2]])
Preacutediction
groups = modelpredict(df[[PCA1 PCA2]])
Clustering La preacutediction eacutetant faicircte pour chaque groupe geacuteneacutereacute nous affichons la
couleur reacuteelle des espegraveces si le clustering a eacuteteacute efficace il ny aura
quune seule couleur par groupe
df[group] = groups
snslmplot(PCA1 PCA2 data=df hue=label col=group
fit_reg=False)
Le groupe setosa est tregraves bien identifieacute il y a toujours une impreacutecision
entre les classes virginica et versicolor mais le reacutesultat reste remarquable
sur ce petit eacutechantillon
IRIS agrave vous Peacutedagogie
Lrsquoideacutee est de reprendre lrsquoensemble de ce que lrsquoon vient de voir et de tout refairehelliptout seul
Le but de cet exercice est
bull De faire tourner les algorithmes suivants
bull Naives Bayes gaussian
bull Mais aussi
bull SVM
bull KNN
bull PCA
bull Gaussian mixture
bull De comparer les reacutesultats de ces diffeacuterents algorithmes
A la fin de cet exercice on aura
-Fait tourner de nombreuses fonctionnaliteacutes de sklearn
-Montreacute nos donneacutees et reacutesultats en scheacutema
-fait tourneacute sur nos python gaussian NB mais aussi KNN et SVM PCA gaussian mixture
-compareacute les reacutesultats drsquoun mecircme set de donneacutees sur diffeacuterents algorithmes
-deacutecouvert ce que lrsquoon appelle classification reacuteduction de dimensionnaliteacute clustering hellip
Exercice IRIS avec diffeacuterents algos
Crsquoest agrave vous lancez-vous avec la base des iris et commenccedilons par lrsquoalgorithme KNN
key nearest neighbours = les n voisins les plus proches qui est un autre algorithme (sur
lequel on reviendra en deacutetail)
Tout drsquoabord
Importer depuis sklearn les datasets
Iris
et donnez la taille des donneacutees
httppython-prepagithubioateliersdata_mininghtml
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
IRIS donneacutees httppython-prepagithubioateliersdata_mininghtml
gtgtgt from sklearn import datasets
gtgtgt iris = datasetsload_iris()
gtgtgt data = irisdata
gtgtgt datashape
(150 4)
correction
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
IRIS donneacutees
Ensuite donnez les informations que lrsquoon a sur les iris en terme de seacutepales petaleshellip
httppython-prepagithubioateliersdata_mininghtml
IRIS donneacutees donnez les informations que lrsquoon a sur les iris en terme de seacutepales petaleshellip
httppython-prepagithubioateliersdata_mininghtml
gtgtgt irisfeature_names
[sepal length (cm)
sepal width (cm)
petal length (cm)
petal width (cm)]
correction
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
IRIS target
Quelles sont les target de votre base iris
Et quelles sont les noms des especes
httppython-prepagithubioateliersdata_mininghtml
IRIS target Quelles sont les target de votre base iris
Et quelles sont les noms des especes
httppython-prepagithubioateliersdata_mininghtml
gtgtgt target = iristarget
array([0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2])
gtgtgt iristarget_names
array([setosa versicolor virginica] dtype=|S10)
correction
IRIS visualisation
Ensuite dessinnez sur un sheacutema ce que lrsquoon veut voir en important la
meacutethode pyplot de matplotlib matplotlibpyplot
Et sur un sheacutema de 4 sur 3 avec la methode figure et figsize
Tracez le nuage de point avec matplotlib pyplot scatter (plus drsquoexplications
sur httpwwwpython-simplecompython-matplotlibscatterplotphp ) en
prenant comme donneacutees drsquoabcisses les donneacutees drsquoentreacutee les longueur de
seacutepales
Et en ordonneacutee les largeur de sepales
Avec en couleur diffeacuterentes les diffeacuterentes espegraveces pour les points traceacutes
Nommer les axes avec xlabel et ylabel de matplotlibpyplot
httppython-prepagithubioateliersdata_mininghtml
IRIS visualisation
httppython-prepagithubioateliersdata_mininghtml
pltfigure(figsize=(4 3))
pltscatter(data[ 0] data[ 1] c=target)
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
plttitle(lsquovoici nos donneacutees IRISrsquo)
correction
IRIS visualisation
httppython-prepagithubioateliersdata_mininghtml
from matplotlib import pyplot as plt
from sklearn import datasets
iris = datasetsload_iris()
data = irisdata
target = iristarget
Une nouvelle figure
pltfigure(figsize=(4 3))
pltscatter(data[ 0] data[ 1] c=target)
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
Mise en page de la figure
plttight_layout()
pltshow()
correction
IRIS seacutepales Nous allons maintenant entrainer notre modegravele avec le classificateurs KNN
Tout drsquoabord on ne va prendre que les deux
premiegraveres informations dans notre set de
donneacutees que lrsquoon nommera iris longueur et
largeur des sepales
on nomme target les target des iris
IRIS seacutepales Deacutecision de ne prendre que les seacutepales
iris = datasetsload_iris()
data = irisdata[ 2]
target = iristarget
correction
IRIS meshgrid Creacuteation de la grille
Nous allons maintenant dessiner une carte avec des couleurs pour visualiser les
diffeacuterents algorithmes
Pour dessiner cette carte on va dessiner plein de points eacuteloigneacutes de h= 002
chacun
On va determiner x_min le minimum des donneacutees de longueurs des seacutepales et lui
ocircter -1 (pour garder une frontiegravere)
Et x_max le maximum des donneacutees de longueurs des seacutepales et lui ajouter +1
(pour garder une frontiegravere)
De mecircme pour les largeurs de seacutepales
y_min le minimum des donneacutees de largeurs des seacutepales et lui ocircter -1 (pour garder
une frontiegravere)
Et y_max le maximum des donneacutees de largeurs des seacutepales et lui ajouter +1 (pour
garder une frontiegravere)
On va maintenant creacuteer une grille (meshgrid) xx yy entre ces valeurs minimum et
maximum des x et y (on pourra utiliser la meacutethode arange de numpy)
IRIS meshgrid Nous allons maintenant entrainer notre modegravele avec le classificateurs KNN
h = 02 pas de la grille
deacutefinition des points limites [x_min x_max][y_min y_max]
x_min x_max = data[ 0]min() - 1 data[ 0]max() + 1
y_min y_max = data[ 1]min() - 1 data[ 1]max() + 1
construction de la grille avec meshgrid et arange
xx yy = npmeshgrid(nparange(x_min x_max h)
nparange(y_min y_max h))
correction
IRIS KNN fit Nous allons maintenant entrainer notre modegravele avec le classificateurs KNN
Maintenant deacutefinissez un classificateur clf KNN neighborsKNeighborsClassifier
Et le faire fitter aux donneacutees drsquoentreacutee data et de target
IRIS KNN fit Nous allons maintenant entrainer notre modegravele avec le classificateurs KNN
on creacutee un instance de Neighbours Classifier
et on le fait fitter aux data
clf = neighborsKNeighborsClassifier()
clffit(data target)
correction
IRIS KNN predict Nous allons maintenant preacutedire tous les points de la grille
Maintenant il faut preacutedire gracircce agrave ce classificateur clf
la classification de chacun des points de la grille
On va utiliser la methode ravel sur les xx et yy et
np_c pour les transformer chacun en points
Et numpyc_ pour concateacutener lrsquoensemble des points
en un set de donneacutees data agrave preacutedire
IRIS KNN predict Nous allons maintenant faire des preacutedictions sur tous nos points
Z = clfpredict(npc_[xxravel() yyravel()])
correction
IRIS KNN Visualisation Nous allons maintenant dessiner tout ceci
Il faut reshaper Z pour avoir le bon format qui doit ecirctre le mecircme que celui de xx
Et ensuite dessiner une figure de taille 43 (par figure et figsize)
Et ensuite mettre les points en couleur gracircce agrave pcolor leurs abcisses sont xx leurs
ordonneacutees yy et leurs couleurs provient du classificateur Z
Y ajouter les points drsquoentrainement avec en abcisses les longueurs de seacutepales en
ordonneacutee les largeurs de seacutepales et en couleur leur target diffeacuterentes
On peut prendre en limite sur les abcisses xlim les minimum et maximum des xx
On peut prendre en limite sur les ordonneacutees ylim les minimum et maximum des yy
IRIS KNN Visualisation Nous allons maintenant dessiner tout ceci
Z = Zreshape(xxshape)
pltfigure(1 figsize=(4 3))
pltclf()
pltpcolormesh(xx yy Z)
Plot also the training points
pltscatter(data[ 0] data[ 1] c=target)
pltxlim(xxmin() xxmax())
pltylim(yymin() yymax())
pltshow()
correction
IRIS Autres classificateurs Nous allons maintenant comparer les diffeacuterents algorithmes de classification
Refaire tourner tout ceci avec un classificateur naive bayes et un classificateur SVM
Nrsquooubliez pas drsquoimporter els bonnes bibliothegraveques
from sklearnsvm import LinearSVC
from sklearnmulticlass import OneVsOneClassifier
pour le svm
Et from sklearnnaive_bayes import GaussianNB
Pour le naive bayes
IRIS Autres classificateurs Nous allons maintenant utiliser drsquoautres algorithmes
Il vous suffit de prendre ces autres algorithmes
clf = neighborsKNeighborsClassifier()
from sklearnsvm import LinearSVC
from sklearnmulticlass import OneVsOneClassifier
clf =OneVsOneClassifier(LinearSVC(random_state=0))
from sklearnnaive_bayes import GaussianNB
clf =GaussianNB()
correction
IRIS Autres classificateurs import numpy as np
from sklearn import datasets
import matplotlibpyplot as plt
iris = datasetsload_iris()
data = irisdata
datashape
print(irisfeature_names )
target = iristarget
print( iristarget_names )
pltfigure(figsize=(4 3))
pltscatter(data[ 0] data[ 1] c=target)
pltxlabel(Longueur du sepal (cm))
pltylabel(Largueur du sepal (cm))
pltshow()
from sklearnnaive_bayes import
GaussianNB
Creacuteation du classifieur
clf = GaussianNB()
Apprentissage
clffit(data target)
print(dir(clf))
print (clfget_params())
result = clfpredict(data)
print (clfpredict(data))
from sklearnmetrics import
accuracy_score
print(accuracy_score(result target))
correction
avec knn
from sklearn import neighbors
clf2 =
neighborsKNeighborsClassifier()
Apprentissage
clf2fit(data target)
print(dir(clf2))
print (clf2get_params())
result2 = clf2predict(data)
print (clf2predict(data))
print(accuracy_score(result2
target))
avec svm
from sklearnsvm import LinearSVC
from sklearnmulticlass import
OneVsOneClassifier
clf3 =
OneVsOneClassifier(LinearSVC(ran
dom_state=0))
clf3fit(data target)
print (clf3predict(data))
result3 = clf3predict(data)
print(accuracy_score(result3
target))
on va dessiner cela
We use only the 2 first features
data = irisdata[ 2]
target = iristarget
h = 02
step size in the mesh
we create an instance of Neighbours
Classifier and fit the data
clf = neighborsKNeighborsClassifier()
clf
=OneVsOneClassifier(LinearSVC(random_stat
e=0))
clf =GaussianNB()
clffit(data target)
Plot the decision boundary For that we will
asign a color to each
point in the mesh [x_min m_max]x[y_min
y_max]
x_min x_max = data[ 0]min() - 1 data[
0]max() + 1
y_min y_max = data[ 1]min() - 1 data[
1]max() + 1
xx yy = npmeshgrid(nparange(x_min x_max
h) nparange(y_min y_max h))
Z = clfpredict(npc_[xxravel() yyravel()])
Put the result into a color plot
Z = Zreshape(xxshape)
pltfigure(1 figsize=(4 3))
pltclf()
pltpcolor(xx yy Z)
Plot also the training points
pltscatter(data[ 0] data[ 1] c=target)
pltxlim(xxmin() xxmax())
pltylim(yymin() yymax())
pltshow()
IRIS Autres classificateurs correction
IRIS Autres classificateurs
Retrouvez quel sont les diffeacuterents classificateurs ici
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant appliquer un algorithme de reacuteduction de dimensionaliteacute
Reprendre vos donneacutees iris de deacutepart et appliquer lrsquoalgorithme PCA pour ne garder
que deux dimensions puis lrsquoappliquer agrave nos donneacutees et le dessiner sur un sheacutema
On va donc importer le module depuis sklearndecomposition qui srsquoappelle PCA
Dire que lrsquoon a deux dimensions avec n_components de PCA
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant utiliser un algorithme de reacuteduction de dimensionaliteacute
from sklearndecomposition import PCA
clf = PCA(n_components=2)
correction
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant appliquer un algorithme de reacuteduction de dimensionaliteacute
On va appliquer ce modegravele PCA agrave nos donneacutees IRIS
Le faire fitter avec fit
Et donner les nouvelles dimensions avec reduc
httpsscikit-learnorgstablemodulesgeneratedsklearndecompositionPCAhtml
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant utiliser un algorithme de reacuteduction de dimensionaliteacute
iris = datasetsload_iris()
clffit(irisdata) fit aux donneacutees
reduc = clftransform(irisdata )
correction
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant appliquer un algorithme de reacuteduction de dimensionaliteacute
Nous allons visualiser cette classification sur un sheacutema agrave deux dimensions avec
matplotlib pyplot
En utilisaant figure scatter et show
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant utiliser un algorithme de reacuteduction de dimensionaliteacute
pltfigure(1 figsize=(4 3))
pltscatter(reduc[ 0] reduc[ 1] c=target)
plttitle(avec pca)
pltshow()
correction
IRIS reacuteduction de dimensionaliteacute Nous allons maintenant utiliser un algorithme de reacuteduction de dimensionaliteacute
correction
IRIS clustering Nous allons maintenant appliquer un algorithme de clustering
Nous allons reprendre nos donneacutees et leur appliquer lrsquoalgorithme de clustering
gaussian mixture
httpsscikit-
learnorgstablemodulesgeneratedsklearnmixtureGaussianMixturehtml
from sklearnmixture import GaussianMixture
Avec
n_components=3
et une covariance_type=full
IRIS clustering Nous allons maintenant utiliser un algorithme de clustering
from sklearnmixture import GaussianMixture
Creacuteation du modegravele avec 3 groupes de
donneacutees
clf = GaussianMixture (n_components=3
covariance_type=full)
correction
IRIS clustering Nous allons maintenant appliquer un algorithme de clustering
Reprendre les scheacutemas preacuteceacutedents avec les donneacutees data
Mais aussi avec les donneacutees reduites (issues de PCA)
IRIS clustering Nous allons maintenant utiliser un algorithme de clustering
clffit(reduc target)
Plot the decision boundary For that we will asign a color to each
point in the mesh [x_min m_max]x[y_min y_max]
x_min x_max = reduc[ 0]min() - 1 reduc[ 0]max() + 1
y_min y_max = reduc[ 1]min() - 1 reduc[ 1]max() + 1
xx yy = npmeshgrid(nparange(x_min x_max h) nparange(y_min y_max h))
Z = clfpredict(npc_[xxravel() yyravel()])
Put the result into a color plot
Z = Zreshape(xxshape)
pltfigure(1 figsize=(4 3))
pltclf()
pltpcolor(xx yy Z)
Plot also the training points
pltscatter(reduc[ 0] reduc[ 1] c=target)
pltxlim(xxmin() xxmax())
pltylim(yymin() yymax())
plttitle(avec le clustering)
pltshow()
correction
IRIS clustering Nous allons maintenant utiliser un algorithme de clustering
correction
Avec les data initiales
Avec les data reacuteduites
IRIS decision tree Un petit dernier algo pour la fin
On va tenter les arbres de deacutecision decision tree en anglais
Je vous donne directement le code agrave injecter et agrave vous de le faire tourner
from sklearntree import DecisionTreeClassifier
params = random_state 0 max_depth 4
clf = DecisionTreeClassifier(params)
IRIS decision tree Nous allons maintenant utiliser les arbres de deacutecision decision trees
import numpy as np
from sklearn import datasets
import matplotlibpyplot as plt
iris = datasetsload_iris()
data = irisdata
data = irisdata[ 2]
target = iristarget
from sklearntree import DecisionTreeClassifier
params = random_state 0 max_depth 4
clf = DecisionTreeClassifier(params)
clffit(data target)
x_min x_max = data[ 0]min() - 1 data[ 0]max() + 1
y_min y_max = data[ 1]min() - 1 data[ 1]max() + 1
xx yy = npmeshgrid(nparange(x_min x_max h) nparange(y_min y_max h))
Z = clfpredict(npc_[xxravel() yyravel()])
Put the result into a color plot
Z = Zreshape(xxshape)
pltfigure(1 figsize=(4 3))
pltclf()
pltpcolor(xx yy Z)
Plot also the training points
pltscatter(data[ 0] data[ 1] c=target)
pltxlim(xxmin() xxmax())
pltylim(yymin() yymax())
plttitle(random forest)
pltshow()
correction
IRIS decision tree Nous allons maintenant utiliser un algorithme drsquoarbre de deacutecision
correction
IRIS big picture Retrouver sur le scheacutema ci-dessous ce que lrsquoon a fait et pourquoi
Pour aller plus loin Il est important de disposer de ressources pour sessayer au machine learning
Le site Kaggle propose de nombreuses ressources (jeux de donneacutees et exemples) sur le
machine learning
Il propose aussi des compeacutetions ou les membres peuvent comparer leurs algorithmes
Beaucoup de sites proposent des jeux de donneacutees
Open data du gouvernement franccedilais
Enigmaio
Une recherche Internet sur Open data vous donnera beaucoup de ressources
Conclusion
Nous voilagrave initieacutes au Machine Learning avec Scikit-Learn La librairie propose de
nombreux exemples et jeux de donneacutees Elle est extrecircmement riche et simple
Les difficulteacutes de cette discipline consistent agrave
comprendre les notions matheacutematiques derriegravere chaque algorithme pour avoir une
ideacutee de leurs limites
choisir les hyperparamegravetres
bien dimensionner ses jeux de donneacutees dapprentissage
Ensuite quelque soit votre algorithme cest tregraves simple
On instancie la classe et ses hyper-paramegravetres
On fournit les donneacutees dapprentissage agrave la meacutethode fit (si superviseacute)
On demande la deacutetermination des donneacutees avec la meacutethode predict
DIABETE Peacutedagogie
Lrsquoideacutee est de prendre un cas reacuteel drsquoanalyse de diabete et drsquo appliquer une regression lineacuteaire en
separant jeu de test et jeu drsquoentrainement
Le but de cet exercice est
bull De se deacutebrouiller au maximum toute seule en appliquant ce qui a eacuteteacute vu sur un cas simple
bull De faire tourner les algorithmes suivants
bull Reacutegression lineaire
bull Drsquoappliquer la meacutethode
bull Seacuteparation du jeu de test et du jeu drsquoentrainement
bull Drsquoeacutevaluer notre algorithme
A la fin de cet exercice on aura
-Fait tourner sur un cas reacuteel un algorithme de regression lineacuteaire de sklearn en python
-Montreacute nos donneacutees et reacutesultats en scheacutema
-Appliqueacute la meacutethode de seacuteparation de jeu de test et jeu drsquoentrainement
- Eacutevalueacute notre algorithme
- Travailleacute sur un cas reacuteel et appris sur al maladie du diabegravete (si vous ecirctes inteacuteresseacutes voir
Eric-Marsaudon-Diabete-defi-medical-du-21eme-siecle )
Diabete Exercice
Le but de cet exercice est drsquoappliquer la meacutethode de reacutegression lineacuteaire aux cas de
diabegravetes en reprenant totalement la meacutethode avec jeu de tests et jeu drsquoentrainement
et calcul de performance
Il nous faut prendre les donneacutees de diabetes dans sklearn
from sklearn import datasets
diabetes = datasetsload_diabetes()
httpsscikit-learnorgstableauto_exampleslinear_modelplot_olshtml
Correction slide suivant ndash agrave ne regarder que si vous ecirctes perdus ou si vous avez fini
Regression lineacuteaire diabegravetes
import matplotlibpyplot as plt
import numpy as np
from sklearn import datasets linear_model
from sklearnmetrics import mean_squared_error r2_score
Load the diabetes dataset
diabetes = datasetsload_diabetes()
Use only one feature
diabetes_X = diabetesdata[ npnewaxis 2]
print (dir(diabetes))
print (diabetesfeature_names)
print (diabetesDESCR)
print (diabetestarget)
httpsscikit-learnorgstableauto_exampleslinear_modelplot_olshtml
correction
Regression lineacuteaire diabegravetes
Split the data into trainingtesting sets
diabetes_X_train = diabetes_X[-20]
diabetes_X_test = diabetes_X[-20]
Split the targets into trainingtesting sets
diabetes_y_train = diabetestarget[-20]
diabetes_y_test = diabetestarget[-20]
Create linear regression object
regr = linear_modelLinearRegression()
Train the model using the training sets
regrfit(diabetes_X_train diabetes_y_train)
Make predictions using the testing set
diabetes_y_pred = regrpredict(diabetes_X_test)
httpsscikit-learnorgstableauto_exampleslinear_modelplot_olshtml
correction
Regression lineacuteaire diabegravetes
The coefficients
print(Coefficients n regrcoef_)
The mean squared error
print(Mean squared error 2f
mean_squared_error(diabetes_y_test diabetes_y_pred))
Explained variance score 1 is perfect prediction
print(Variance score 2f r2_score(diabetes_y_test diabetes_y_pred))
Plot outputs
pltscatter(diabetes_X_test diabetes_y_test color=black)
pltplot(diabetes_X_test diabetes_y_pred color=blue linewidth=3)
pltxticks(())
pltyticks(())
pltshow()
httpsscikit-learnorgstableauto_exampleslinear_modelplot_olshtml
correction
Regression lineacuteaire diabegravetes httpsscikit-learnorgstableauto_exampleslinear_modelplot_olshtml
correction
Regression lineacuteaire diabegravetes httpsscikit-learnorgstableauto_exampleslinear_modelplot_olshtml
correction
EXERCICE ISSUS DU LIVRE Prateek Joshi
Artificial intelligence with Python
Artificial Intelligence with Python Peacutedagogie
Lrsquoideacutee est de ces exercices est de lsquofaire le tourrsquo de ce qui existe en machine leanring en terme
drsquoalgorithmesainsi que de meacutethode de travail Les exercices sont tous issus du livre de Prateek
Joshi Artificial intelligence with Python bookpdf et couvrent lrsquoensemble des chapitres 1 agrave 5
Le but de ces exercice est
bull Drsquoavoir au moins vu une fois les algorithmes les plus reacutepandus en terme de machine learning
bull Regressions logistique linaires polynomiales maive bayes svm decision trees et random
forest (arbres de deacutecisions et forecircts aleacuteatoires)KNN gridsearchCV adaboost ainsi que des
algorithmes de clustering Kmeans meanshift silhouette score GMM gaussian Mixture enfin
des algorithmes de recommandation avec le filtrage collaboratif
bull De pouvoir srsquoentrainer soi-mecircme en python
bull Mais aussi de beacuteneacuteficier drsquoexemples qui fonctionnent (les py sont donneacutes en annexe)
bull De mieux comprendre les meacutethodes drsquoanalyses de donneacutees preprocessing encodage et
deacutecodage validation croiseacutee scoring confusion matrix variance pertes calssification report
courbe de dimensionaliteacute hellip
A la fin de ces exercices on aura
- Brosseacute lrsquoensemble des meacutethodes de machine learning
- Acquis des connaissances de base des datascientits sur le travail et lrsquoanayse des donneacutees
exercices
Tous ces exercices neacutecessitent drsquoutiliser les librairies suivantes de Python
NumPy httpdocsscipyorgdocnumpy-1101userinstallhtml
SciPy httpwwwscipyorginstallhtml
scikit-learn httpscikit-learnorgstableinstallhtml
matplotlib httpmatplotliborg142usersinstallinghtml
EXERCICE 1 PREPROCESSING
Exercice1 preprocessing travailler les donneacutees
(normalisation etc) Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
Le but de cet exercice est de travailler sur les
donneacutees en les reformattant avant de les utiliser
dans des algorithmesOn va utiliser les meacutethodes
de de sklearn qui sont dans preprocessing
httpsscikit-
learnorgstablemodulesgeneratedsklearnpreproc
essinghtml
Exercice1 binarisation [73 -99 -45]])
On va utiliser la meacutethode de binarisation de sklearn qui est dans preporcessing
httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingbinarizehtml preprocessingBinarizer() Et la transformation transform(X[ y copy]) qui va binariser chaque eacuteleacutement de X
Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
Le but de lrsquoexercice est de binariser de lrsquoinformation lrsquoinformation sera transformeacutee en booleacuteen
par exemple pour du traitement drsquoimage en transformation des pixels en pixel noir et pixel blanc seulement
Voici les donneacutees agrave binariser
([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Et voici ce que lrsquoon veut obtenir
Binarized data
[[ 1 0 1]
[ 0 1 0]
[ 1 0 0]
[ 1 0 0]]
Exercice1 binarisation Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
correction
import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Binarize data
data_binarized =
preprocessingBinarizer()transform(input_data)
print(nBinarized datan data_binarized)
Exercice1 calcul de moyenne et de lrsquoeacutecart-type
Calculer la moyenne et lrsquoeacutecart type
([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Et voici ce que lrsquoon veut obtenir la moyenne et lrsquoeacutecart type pour chaque colonne
Moyenne Mean = [ 3775 -115 -13 ]
Lrsquoeacutecart-type est donneacute par la laquo standard deviation raquo
Std deviation = [ 312039661 636651396 40620192 ]
On va utiliser les meacutethodes mean et std de sklearn qui sont dans preprocessing
httpsscikit-learnorgstablemodulespreprocessinghtml
mean
Std
Pour la moyenne mean on indiquera quel axe prendre axis = 0 ou 1
Exercice1 moyenne et ecart-type Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
correction
import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Print mean and standard deviation
print(nBEFORE)
print(Mean = input_datamean(axis=0))
print(Std deviation = input_datastd(axis=0))
Exercice1 mean removal centrage des donneacutees
On va vouloir maintenant transformer nos donneacutees pour obtenir une moyenne agrave 000 et un eacutecart type agrave 1
([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Et voici ce que lrsquoon veut obtenir
Moyenne Mean = [ 0 0 0]
Ecart-type standard deviation
Std deviation = [ 1 1 1 ]
On va utiliser la meacutethode scale de sklearn qui est dans preprocessing
httpsscikit-learnorgstablemodulesgeneratedsklearnpreprocessingscalehtml
Exercice1 centrage des donneacutees Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
correction
import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
on centre les donneacutees
data_scaled = preprocessingscale(input_data)
on reacuteimprime moyenne et eacutecart-types
print(Mean = data_scaledmean(axis=0))
print(Std deviation = data_scaledstd(axis=0))
Exercice1 mise agrave lrsquoeacutechelle
On va vouloir maintenant transformer nos donneacutees pour obtenir une eacutecart maximal de 1
([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Et voici ce que lrsquoon veut obtenir
Min max scaled data
[[ 074117647 039548023 1 ]
[ 0 1 0 ]
[ 06 05819209 087234043]
[ 1 0 017021277]] On va utiliser les meacutethodes MinMaxScaler et fit_transform de sklearn qui est dans
preprocessing httpsscikit-
learnorgstablemodulesgeneratedsklearnpreprocessingMinMaxScalerhtml
Exercice1 mise agrave lrsquoeacutechelle Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
correction
import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
mise agrave lrsquoeacutechelle data_scaler_minmax =
preprocessingMinMaxScaler(feature_range=(0 1))
data_scaled_minmax =
data_scaler_minmaxfit_transform(input_data)
print(nMin max scaled datan data_scaled_minmax)
Exercice 1 Normalisation L1
On va vouloir maintenant normaliser nos donneacutees
([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Et voici ce que lrsquoon veut obtenir
L1 normalized data
[[ 045132743 -025663717 02920354 ]
[-00794702 051655629 -040397351]
[ 0609375 00625 0328125 ]
[ 033640553 -04562212 -020737327]]
On va utiliser la meacutethode normalize de sklearn avec la norm lsquol1rsquo qui est dans
preprocessing httpsscikit-
learnorgstablemodulesgeneratedsklearnpreprocessingnormalizehtml
Exercice1 normalisation L1 Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
correction
import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Normalisation L1
datadata_normalized_l1 =
preprocessingnormalize(input_data norm=l1)
print(nL1 normalized datan
data_normalized_l1)
Exercice1 Normalisation L2
On va vouloir maintenant normaliser nos donneacutees en
([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Et voici ce que lrsquoon veut obtenir
L2 normalized data
[[ 075765788 -043082507 049024922]
[-012030718 078199664 -061156148]
[ 087690281 008993875 047217844]
[ 055734935 -075585734 -034357152]]
On va utiliser la meacutethode de normalize de sklearn avec la norm lsquol2rsquo qui est dans
preprocessing httpsscikit-
learnorgstablemodulesgeneratedsklearnpreprocessingnormalizehtml
Exercice1 normalisation L2 Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p32
correction
import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Normalisation L2
data_normalized_l2 =
preprocessingnormalize(input_data norm=l2)
print(nL2 normalized datan
data_normalized_l2)
Annexe diffeacuterences L1 et L2
httpwwwchiokaindifferences-between-the-l1-norm-and-the-l2-norm-least-absolute-
deviations-and-least-squares
La ligne verte correspond agrave une normalisation L2 et est le chemin le plus
court unique alors que les lignes rouges jaunes ou bleues (normalisaiton
L1) sont toutes de la mecircme longueur (=12) pour aller el plus vite drsquoen bas agrave
gauche vers haut agrave droite On peut geacuteneacuteraliser cela agrave n dimensions L1 a
plusieurs solutions
Exercice1 solution import numpy as np
from sklearn import preprocessing
input_data = nparray([[51 -29 33]
[-12 78 -61]
[39 04 21]
[73 -99 -45]])
Binarize data
data_binarized = preprocessingBinarizer(threshold=21)transform(input_data)
print(nBinarized datan data_binarized)
Print mean and standard deviation
print(nBEFORE)
print(Mean = input_datamean(axis=0))
print(Std deviation = input_datastd(axis=0))
Remove mean
data_scaled = preprocessingscale(input_data)print(nAFTER)
print(Mean = data_scaledmean(axis=0))
print(Std deviation = data_scaledstd(axis=0))
Min max scaling
data_scaler_minmax = preprocessingMinMaxScaler(feature_range=(0 1))
data_scaled_minmax = data_scaler_minmaxfit_transform(input_data)
print(nMin max scaled datan data_scaled_minmax)
Normalize
datadata_normalized_l1 = preprocessingnormalize(input_data norm=l1)
data_normalized_l2 = preprocessingnormalize(input_data norm=l2)
print(nL1 normalized datan data_normalized_l1)
print(nL2 normalized datan data_normalized_l2)
EXERCICE 2 ENCODER LES DONNEES
Exercice2 encoder des donneacutees Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p36
Voici des donneacutees
[red black red green black yellow white]
Voici ce que lrsquoon veut obtenir
Tester aussi avec [green red black] comme donneacutees drsquoentreacutee qursquoobient-on
On va utiliser la meacutethode LabelEncoder fit et transform de sklearn qui est dans
preprocessing httpsscikit-
learnorgstablemodulesgeneratedsklearnpreprocessingLabelEncoderhtml
Exercice2 encodage Data preprocessing Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p36
correction
import numpy as np
from sklearn import preprocessing
creacuteation de nos donneacutees
input_labels = [red black red green black yellow white]
creacuteation de lrsquoencoder et laquo fittage raquo des donneacutees
encoder = preprocessingLabelEncoder()
encoderfit(input_labels)
Print the mapping
print(nLabel mapping)
for i item in enumerate(encoderclasses_)
print(item --gt i)
testons avec un nouveau jeu de donneacutees
test_labels = [green red black]
encoded_values = encodertransform(test_labels)
print(nLabels = test_labels)
print(Encoded values = list(encoded_values))
Exercice2 deacutecoder des donneacutees Data labelling Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p36
Voici des donneacutees
[3 0 4 1]
Voici ce que lrsquoon veut obtenir
On va utiliser la meacutethode LabelEncoder et inverse_transform de sklearn qui est dans
preprocessing httpsscikit-
learnorgstablemodulesgeneratedsklearnpreprocessingLabelEncoderhtml
Exercice2 solution Data labelling Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p36
import numpy as np
from sklearn import preprocessing
Sample input labels
input_labels = [red black red green black yellow white]
Create label encoder and fit the labels
encoder = preprocessingLabelEncoder()
encoderfit(input_labels)
Print the mapping
print(nLabel mapping)
for i item in enumerate(encoderclasses_)
print(item --gt i)
Encode a set of labels using the encoder
test_labels = [green red black]
encoded_values = encodertransform(test_labels)
print(nLabels = test_labels)
print(Encoded values = list(encoded_values))
Decode a set of values using the encoder
encoded_values = [3 0 4 1]
decoded_list = encoderinverse_transform(encoded_values)
print(nEncoded values = encoded_values)
print(Decoded labels = list(decoded_list))
correction
EXERCICE 3 REGRESSION LOGISTIQUE
Exercice3 regression logistique Data logistic regressionPrateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p37
Voici des donneacutees ([[31 72] [4 67]
[29 8] [51 45] [6 5] [56 5]
[33 04] [39 09] [28 1] [05 34] [1
4] [06 49]])
Et les labels leur correspondant ([0 0
0 1 1 1 2 2 2 3 3 3])
On veut classifier ces donneacutees en
utilisant la regression logistique
On va utiliser la meacutethode LogisticRegression et fit (pour entrainer le classificateur) de
LinearModel de sklearn
httpsscikit-
learnorgstablemodulesgeneratedsklearnlinear_modelLogisticRegressionhtml
et liblinear comme solver LIBLINEAR ndash A Library for Large Linear Classification
httpwwwcsientuedutw~cjlinliblinear (LIBLINEAR implements linear SVMs and logistic regression models
trained using a coordinate descent algorithm)
Et 1- 100 ou 900 comme donneacutee pour C C est un reacuteel par deacutefaut 1 plus il est petit plus la regularisation est
lsquofortersquo
Exercice3 regression logistique Data logistic regressionPrateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p37
Voici ce que lrsquoon veut obtenir
On va deacutefinir un module que lrsquoon eacutecrit pour toutes nos visualisations future afin de
pouvoir eacutecrire ensuite (voir slide suivant)
from utilities import visualize_classifier
machine learning
bullREGRESSION LOGISTIQUE
regression logistique httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-predictif-lineaire4507831-predisez-lineairement-la-
probabilite-de-l-appartenance-d-un-point-a-une-classe
reacutesoudre Devient donc
Et maximiser le maximum de vraisemblance revient agrave
regression logistique httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-predictif-lineaire4507831-predisez-lineairement-la-
probabilite-de-l-appartenance-d-un-point-a-une-classe
Et en remplaccedilant par sa valeur ceci revient agrave maximiser
Qui est une fonction concave donc on pourra lui appliquer la meacutethode du gradient
pour la reacutesoudre (la suite pour ceux qui veulent ici
httpswwwdiensfrappstatnotescours2-regressionpdf )
regression logistique httpsopenclassroomscomfrcourses4444646-entrainez-un-modele-predictif-lineaire4507831-predisez-lineairement-la-
probabilite-de-l-appartenance-d-un-point-a-une-classe
La reacutegression logistique est largement reacutepandue dans de nombreux domaines
On peut citer de faccedilon non exhaustive
En meacutedecine elle permet par exemple de trouver les facteurs qui caracteacuterisent
un groupe de sujets malades par rapport agrave des sujets sains
Dans le domaine des assurances elle permet de cibler une fraction de la
clientegravele qui sera sensible agrave une police drsquoassurance sur tel ou tel risque
particulier
Dans le domaine bancaire pour deacutetecter les groupes agrave risque lors de la
souscription drsquoun creacutedit
En eacuteconomeacutetrie pour expliquer une variable discregravete Par exemple les
intentions de vote aux eacutelections
Par exemple Vincent Loonis utilise un modegravele de reacutegression logistique pour
eacutetudier les deacuteterminants de la reacuteeacutelection des deacuteputeacutes franccedilais depuis les
deacutebuts de la IIIe Reacutepublique4
httpsfrwikipediaorgwikiRC3A9gression_logistique
Exercice3 regression logistique Data regression logistique Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p37
Avec C=900
Exercice3 utilities Data regression logistique Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p37
import numpy as np
import matplotlibpyplot as plt
def visualize_classifier(classifier X y)
Define the minimum and maximum values for X and Y
that will be used in the mesh grid
min_x max_x = X[ 0]min() - 10 X[ 0]max() + 10
min_y max_y = X[ 1]min() - 10 X[ 1]max() + 10
Define the step size to use in plotting the mesh grid
mesh_step_size = 001
Define the mesh grid of X and Y values
x_vals y_vals = npmeshgrid(nparange(min_x max_x mesh_step_size) nparange(min_y max_y
mesh_step_size))
Run the classifier on the mesh grid
output = classifierpredict(npc_[x_valsravel() y_valsravel()])
Reshape the output array
output = outputreshape(x_valsshape)
Create a plot
pltfigure()
Choose a color scheme for the plot
pltpcolormesh(x_vals y_vals output cmap=pltcmgray)
Overlay the training points on the plot
pltscatter(X[ 0] X[ 1] c=y s=75 edgecolors=black linewidth=1 cmap=pltcmPaired)
Specify the boundaries of the plot
pltxlim(x_valsmin() x_valsmax())
pltylim(y_valsmin() y_valsmax())
Specify the ticks on the X and Y axes
pltxticks((nparange(int(X[ 0]min() - 1) int(X[ 0]max() + 1) 10)))
pltyticks((nparange(int(X[ 1]min() - 1) int(X[ 1]max() + 1) 10)))
pltshow()
Exercice3 solution Data regression logistiquePrateek Joshi Artificial intelligence with Python bookpdf Chapter 2
p37
import numpy as np
from sklearn import linear_model
import matplotlibpyplot as plt
from utilities import visualize_classifier
on deacutefinit les donneacutees drsquoentreacutee
X = nparray([[31 72] [4 67] [29 8] [51 45] [6 5] [56 5] [33 04] [39 09]
[28 1] [05 34] [1 4] [06 49]])
y = nparray([0 0 0 1 1 1 2 2 2 3 3 3])
on creacutee le classifier en utilisant la reacutegression logistique
classifier = linear_modelLogisticRegression(solver=liblinear C=1)
classifier = linear_modelLogisticRegression(solver=liblinear C=100)
on entraine le classificateur
classifierfit(X y)
on le visualise
visualize_classifier(classifier X y)
EXERCICE 4 NAIVES BAYES
Exercice4 Naive Bayes Data naive bayes Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p41
Creacuteer un nouveau fichier et importer les packages suivants
numpy que lrsquoon appelera np
matplotlibpyplot que lrsquoon nomera plt
On veut utiliser la classification Naive Bayes avec une reacutepartition gaussienne
Depuis sklearnNaiumlve_bayes importer GaussianNB
Nous calculerons la cross validation (voir explications page suivante)
depuis sklearnmodel_selection importer cross_val_score
et pour visualiser
from utilities import visualize_classifier
Nous prendrons comme donneacutees data_multivar_nbtxt
Qursquoest-ce que ce fichier Que contient-il
Nous allons ensuite prendre ces donneacutees dans une lsquodatarsquo avec un deacutelimiteur qui est un virgule
data = nploadtxt(input_file delimiter=)
Regarder ces donneacutees on voit que la derniegravere colonne est 01 2 ou 3 ce sont les labels
Creacuteer les donneacutees X et la derniegravere colonne sont les labels y
X y = data[ -1] data[ -1]
Creacuteer une instance du classificateur Naiumlve Bayes entrainez-le (fit) et regarder le reacutesultat gracircce agrave from utilities import visualize_classifier
Exercice4 Naive Bayes Data naive bayes Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p41
import numpy as np
import matplotlibpyplot as plt
from sklearnnaive_bayes import GaussianNB
from sklearn import model_selection
from utilities import visualize_classifier
prenons les donneacutees en entreacutee
input_file = data_multivar_nbtxtlsquo
et chargeons les en data evac un delimiteur qui est une virgule
data = nploadtxt(input_file delimiter=)
X y = data[ -1] data[ -1]
creacuteons une instance de clssificateur Gaussian NB
classifier = GaussianNB()
entrainons le classifier
classifierfit(X y)
et visualisons le
visualize_classifier(classifier X y)
Exercice4 Naive Bayes exercice Data naive bayes Prateek Joshi Artificial intelligence with Python bookpdf Chapter 2 p41