Entra\u00eener puis tester un mod\u00e8le de r\u00e9gression logistique requiert d\u2019\u00e9crire un peu de code :<\/p>\n\n\n\n
train_data, val_data, test_data = load.load_all_data(train_ids, val_ids, test_ids, l, color)\nmodel = sklearn.linear_model.LogisticRegression(penalty='l2', C=1e10)\nmodel.fit(train_data, train_labels)\npredictions = model.predict(val_data)\nerr = (predictions != val_labels).sum() \/ len(val_labels)\n<\/pre>\n\n\n\nPassons en revue chaque ligne :<\/p>\n\n\n\n
Les donn\u00e9es sont charg\u00e9es dans les variables train_data<\/code>, val_data<\/code> et test_data<\/code>. La fonction load.load_all_data()<\/code>, sp\u00e9cifique a notre probl\u00e8me, prend en param\u00e8tre la liste des identifiants de toits \u00e0 charger, la taille l<\/code>\n des images voulue et le nombre de canaux de couleur voulu (rouge, vert \net bleu ou noir et blanc). Les images de toitures sont s\u00e9par\u00e9es en 3 \n\u00e9chantillons :\n Un \u00e9chantillon d\u2019apprentissage ;<\/li> Un \u00e9chantillon de test ;<\/li> Un \u00e9chantillon de validation.<\/li><\/ul>\n <\/li> Un objet python encapsulant un mod\u00e8le de r\u00e9gression lin\u00e9aire est cr\u00e9\u00e9. Les param\u00e8tres penalty<\/code> et C<\/code> configurent la r\u00e9gularisation. La r\u00e9gularisation<\/a>\n est utile lorsque le nombre de features est comparable \u00e0 la taille de \nl\u2019\u00e9chantillon. Ici, il y a plusieurs milliers d\u2019exemples dans \nl\u2019\u00e9chantillon d\u2019apprentissage et quelques centaines de features tout au \nplus. Pour simplifier, le param\u00e8tre C<\/code> a une valeur tr\u00e8s \u00e9lev\u00e9e (1e10 = 10.000.000.000<\/code>) ce qui correspond \u00e0 une r\u00e9gularisation n\u00e9gligeable.<\/li>Le mod\u00e8le est entra\u00een\u00e9 sur l\u2019\u00e9chantillon d\u2019apprentissage. Le mod\u00e8le a acc\u00e8s aux features (train_data<\/code>) mais aussi aux labels (train_labels<\/code>) pour pouvoir se corriger et s\u2019am\u00e9liorer.<\/li>Le mod\u00e8le fait des pr\u00e9dictions sur l\u2019\u00e9chantillon de test. Maintenant le mod\u00e8le n\u2019a pas acc\u00e8s aux labels.<\/li> Le taux d\u2019erreurs de la pr\u00e9diction du mod\u00e8le est calcul\u00e9 comme le quotient du nombre d\u2019erreurs sur la taille de l\u2019\u00e9chantillon.<\/li><\/ol>\n\n\n\n <\/a><\/figure>\n\n\n\n\n Figure 1 : choix des hyperparam\u00e8tres pour la r\u00e9gression logistique\n <\/p>\n\n\n\n
On choisit la taille des images l<\/code>\n et le choix de couleurs (rouge, vert et bleu ou noir et blanc) en \nessayant plusieurs combinaison. La figure 1 montre que la taille qui \ndonne les meilleurs r\u00e9sultats est de 6 pixels par 6 pixels. Le fait de \ntester successivement plusieurs hyper-param\u00e8tres (les param\u00e8tres comme l<\/code>, qui sont ext\u00e9rieurs au mod\u00e8le de r\u00e9gression logistique et d\u00e9finis par le data-scientist) peut provoquer un ph\u00e9nom\u00e8ne appel\u00e9 surapprentissage<\/a>.\n Il est n\u00e9cessaire de valider la performance sur un \u00e9chantillon qui n\u2019a \n\u00e9t\u00e9 utilis\u00e9 ni durant l\u2019apprentissage ni durant la phase de test, l\u2019 \u00e9chantillon de validation<\/a>. Dans notre situation, le taux d\u2019erreur sur l\u2019\u00e9chantillon de validation est de 12.5%.<\/p>\n\n\n\n##Support Vector Machines<\/p>\n\n\n\n
Si la r\u00e9gression logistique a \u00e9t\u00e9 d\u00e9velopp\u00e9e dans la fin des ann\u00e9es \n60 par le statisticien David Cox et elle est maintenant consid\u00e9r\u00e9e comme\n un outil de statistique classique, les \u00ab machines \u00e0 vecteurs de \nsupport \u00bb sont d\u00e9velopp\u00e9es depuis les ann\u00e9es 90 et constituent encore un\n domaine de recherche tr\u00e8s actif. Cette diff\u00e9rence d\u2019\u00e2ge, ainsi que le \nfait que l\u2019analyse math\u00e9matique de ces deux m\u00e9thodes est tr\u00e8s diff\u00e9rente\n fait souvent oublier que les performances, tant en pr\u00e9diction qu\u2019en \ntemps de calcul, sont souvent tr\u00e8s semblables.<\/p>\n\n\n\n
Passer de la r\u00e9gression logistique au Support Vector Classifier (SVC)<\/a> est presque imm\u00e9diat, il faut remplacer la ligne<\/p>\n\n\n\nmodel = sklearn.linear_model.LogisticRegression(penalty='l2', C=1e10)\n<\/pre>\n\n\n\npar la ligne<\/p>\n\n\n\n
model = sklearn.svm.LinearSVC(penalty='l2', C=1e10, dual=False)\n<\/pre>\n\n\n\nLe param\u00e8tre dual=False<\/code> \ncommande \u00e0 la librairie Scikit-Learn de ne pas utiliser l\u2019impl\u00e9mentation\n \u00ab duale \u00bb, qui est appropri\u00e9e dans les cas o\u00f9 le nombre de features est\n plus important que la taille de l\u2019\u00e9chantillon.<\/p>\n\n\n\nLe meilleur r\u00e9sultat est toujours obtenu avec une taille de 6 pixels \npar 6 pixels, mais cette fois-ci en couleurs (rouge, vert et bleu). Le \nr\u00e9sultat de l\u2019\u00e9tape de la validation est aussi de 12.5%.<\/p>\n\n\n\n <\/a><\/figure>\n\n\n\n\n Figure 2 : choix des hyperparam\u00e8tres pour la SVM\n <\/p>\n\n\n\n
Quels sont les grands classiques ?<\/h1>\n\n\n\n Pour beaucoup de probl\u00e8mes de machine learning, il existe un ou \nplusieurs algorithmes classiques \u00e0 essayer en priorit\u00e9. Pour aider \u00e0 \nfaire ce choix, le projet Scikit-Learn a \u00e9dit\u00e9 un arbre de d\u00e9cision<\/a> tr\u00e8s pratique :<\/p>\n\n\n\n <\/a><\/figure><\/div>\n","protected":false},"excerpt":{"rendered":"Lorsqu\u2019un algorithme simple ne convient pas, la deuxi\u00e8me \u00e9tape d\u2019un projet de machine learning est d\u2019essayer des \u00ab grands classiques \u00bb. Ces algorithmes sont plus complexes d\u2019un point de vue th\u00e9orique, mais des impl\u00e9mentations toutes pr\u00eates existent et cette \u00e9tape est g\u00e9n\u00e9ralement rapide \u00e0 mettre en oeuvre. R\u00e9gression logistique La r\u00e9gression logistique porte un nom d\u00e9routant puisque …<\/p>\n
Les techniques standards appliqu\u00e9es \u00e9 OpenSolarMap (1\/3)<\/span> Lire la suite\u00a0\u00bb<\/a><\/p>\n","protected":false},"author":27,"featured_media":10711,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":""},"categories":[271],"tags":[96,275],"uagb_featured_image_src":{"full":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19.png",403,281,false],"thumbnail":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19-150x150.png",150,150,true],"medium":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19-300x209.png",300,209,true],"medium_large":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19.png",403,281,false],"large":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19.png",403,281,false],"1536x1536":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19.png",403,281,false],"2048x2048":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19.png",403,281,false],"rpwe-thumbnail":["https:\/\/preprod.etalab.gouv.fr\/wp-content\/uploads\/2019\/06\/image-agd19-45x45.png",45,45,true]},"uagb_author_info":{"display_name":"Michel Blancard","author_link":"https:\/\/preprod.etalab.gouv.fr\/author\/michel"},"uagb_comment_info":0,"uagb_excerpt":"Lorsqu\u2019un algorithme simple ne convient pas, la deuxi\u00e8me \u00e9tape d\u2019un projet de machine learning est d\u2019essayer des \u00ab grands classiques \u00bb. Ces algorithmes sont plus complexes d\u2019un point de vue th\u00e9orique, mais des impl\u00e9mentations toutes pr\u00eates existent et cette \u00e9tape est g\u00e9n\u00e9ralement rapide \u00e0 mettre en oeuvre. R\u00e9gression logistique La r\u00e9gression logistique porte un nom d\u00e9routant puisque\u2026","_links":{"self":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts\/10710"}],"collection":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/comments?post=10710"}],"version-history":[{"count":1,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts\/10710\/revisions"}],"predecessor-version":[{"id":10712,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/posts\/10710\/revisions\/10712"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/media\/10711"}],"wp:attachment":[{"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/media?parent=10710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/categories?post=10710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/preprod.etalab.gouv.fr\/wp-json\/wp\/v2\/tags?post=10710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}