{"id":10710,"date":"2016-06-23T17:23:28","date_gmt":"2016-06-23T15:23:28","guid":{"rendered":"https:\/\/www.etalab.gouv.fr\/?p=10710"},"modified":"2019-06-18T10:34:32","modified_gmt":"2019-06-18T08:34:32","slug":"les-techniques-standards-appliquees-a-opensolarmap-13","status":"publish","type":"post","link":"https:\/\/preprod.etalab.gouv.fr\/les-techniques-standards-appliquees-a-opensolarmap-13","title":{"rendered":"Les techniques standards appliqu\u00e9es \u00e9 OpenSolarMap (1\/3)"},"content":{"rendered":"\n

Lorsqu\u2019un algorithme simple ne convient pas, la \ndeuxi\u00e8me \u00e9tape d\u2019un projet de machine learning est d\u2019essayer des \n\u00ab grands classiques \u00bb. Ces algorithmes sont plus complexes d\u2019un point de\n vue th\u00e9orique, mais des impl\u00e9mentations toutes pr\u00eates existent et cette\n \u00e9tape est g\u00e9n\u00e9ralement rapide \u00e0 mettre en oeuvre.<\/strong><\/p>\n\n\n\n

R\u00e9gression logistique<\/h1>\n\n\n\n

La r\u00e9gression logistique<\/a>\n porte un nom d\u00e9routant puisque cette m\u00e9thode est utilis\u00e9e autant pour \ndes probl\u00e8mes de r\u00e9gression que de classification. De plus, le choix par\n Pierre Fran\u00e7ois Verhulst du terme \u00ab logistique \u00bb est aujourd\u2019hui un \nmyst\u00e8re. Pourtant, la r\u00e9gression logistique est sans doute la m\u00e9thode la\n plus r\u00e9pandue pour traiter des probl\u00e8mes de classification comme c\u2019est \nle cas ici.<\/p>\n\n\n\n

Il existe une multitude d\u2019impl\u00e9mentations de la r\u00e9gression logistique. La m\u00e9thode utilis\u00e9e pour OpenSolarMap est celle de Scikit-Learn<\/a>. Scikit-Learn est un ensemble d\u2019impl\u00e9mentation en langage Python<\/a> d\u2019algorithmes courants. Cette librairie maintenue par l\u2019INRIA est tr\u00e8s populaire partout dans le monde. Voir la documentation de l\u2019impl\u00e9mentation<\/a>.<\/p>\n\n\n\n

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\n

Passons en revue chaque ligne :<\/p>\n\n\n\n

  1. 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