Les techniques standards appliquA�es A� OpenSolarMap (1/3)

2 commentaires sur Les techniques standards appliquA�es A� OpenSolarMap (1/3)

Lorsqu’un algorithme simple ne convient pas, la deuxiA?me A�tape d’un projet de machine learning est d’essayer des « grands classiques ». Ces algorithmes sont plus complexes d’un point de vue thA�orique, mais des implA�mentations toutes prA?tes existent etA�cette A�tape est gA�nA�ralementA�rapide A� mettre en A�uvre.

RA�gression Logistique

La rA�gression logistiqueA�porte un nom dA�routant puisque cette mA�thode est utilisA�e autant pour des problA?mes de rA�gression que de classification. De plus, le choix par Pierre FranA�ois VerhulstA�du terme « logistique » est aujourd’hui un mystA?re. Pourtant, la rA�gression logistique est sans doute la mA�thode la plus rA�pandue pour traiter des problA?mes de classification comme c’est le cas ici.

Il existe une multitude d’implA�mentations de la rA�gression logistique. La mA�thode utilisA�e pour OpenSolarMap est celle de Scikit-Learn.A� Scikit-Learn est un ensemble d’implA�mentation en langage Python d’algorithmes courants. Cette librairie maintenue par l’INRIA est trA?s populaire partout dans le monde. Voir la documentation de l’implA�mentation : http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html.

EntraA�ner puis tester un modA?le de rA�gression logistique requiert peu de code A� A�crire :

train_data, val_data, test_data = load.load_all_data(train_ids, val_ids, test_ids, l, color)
model = sklearn.linear_model.LogisticRegression(penalty='l2', C=1e10)
model.fit(train_data, train_labels)
predictions = model.predict(val_data)
err = (predictions != val_labels).sum() / len(val_labels)

Passons en revue chaque ligne :

  1. Les donnA�es sont chargA�es dans les variablesA�train_data, val_data etA�test_data.A�La fonction load.load_all_data(), spA�cifique a notre problA?me,A�prend en paramA?tre la liste des identifiants de toits A� charger, la taille l des images voulue et le nombre de canaux de couleur voulus (rouge, vert et bleu ou noir et blanc). Les images de toitures sont sA�parA�es en 3 A�chantillons :
    • Un A�chantillon d’apprentissage.
    • Un A�chantillon de test.
    • Un A�chantillon de validation.
  2. Un objet python encapsulantA�un modA?le de rA�gression linA�aire est crA�A�. Les paramA?tres penalty et CA�configurentA�la rA�gularisation. LaA�rA�gularisationA�est utile lorsque le nombre de features est comparable A� la taille de l’A�chantillon. Ici, il y a plusieurs milliers d’exemples dans l’A�chantillon d’apprentissage et quelques centaines de features tout au plus. Pour simplifier, le paramA?tre C a une valeur trA?s A�levA�e (1e10 = 10.000.000.000) ce qui correspond A� une rA�gularisation nA�gligeable.
  3. Le modA?le est entraA�nA� sur l’A�chantillon d’apprentissage. Le modA?le a accA?s aux features (train_data) mais aussi aux labels (train_labels) pour pouvoir se corriger et s’amA�liorer.
  4. Le modA?le fait des prA�dictions sur l’A�chantillon de test. Maintenant le modA?le n’a pas accA?s aux labels.
  5. Le taux d’erreurs de la prA�diction du modA?le est calculA� comme le quotient du nombre d’erreurs sur la taille de l’A�chantillon.
lr

Figure 1 : choix des hyperparamA?tres pour la rA�gression logistique

On choisit la taille des images l et le choix de couleurs (rouge, vert et bleu ou noir et blanc) en essayant plusieurs combinaison. La figure 1 montre que la taille qui donne les meilleurs rA�sultats est de 6 pixels par 6 pixels. Le fait de tester successivement plusieurs hyper-paramA?tres (les paramA?tres, comme l, qui sont extA�rieurs au modA?le de rA�gression logistique et dA�finis par le data-scientist) peut provoquer un phA�nomA?ne appelA� surapprentissage. Il est nA�cessaire de valider la performance sur un A�chantillon qui n’a A�tA� utilisA� ni durant l’apprentissage ni durant la phase de test, l’A�chantillon de validation. Dans notre situation, le taux d’erreur sur l’A�chantillon de validation est de 12.5%.

 

Support Vector Machines

Si la rA�gression logistique a A�tA� dA�veloppA�e dans la fin des annA�es 60 par le statisticien David Cox et elle est maintenant considA�rA�e comme un outil de statistique classique, les « machines A� vecteurs de support » sont dA�veloppA�es depuis les annA�es 90 et constituent encore un domaine de recherche trA?s actif. Cette diffA�rence d’A?ge, ainsi que le fait que l’analyse mathA�matique de ces deux mA�thodes est trA?s diffA�rente fait souvent oublier que les performances, tant en prA�diction qu’en temps de calcul, sont souvent trA?s semblables.

Passer de la rA�gression logistique au Support Vector Classifier (SVC)A�est presque immA�diat, il faut remplacer la ligne

model = sklearn.linear_model.LogisticRegression(penalty='l2', C=1e10)

par la ligne

model = sklearn.svm.LinearSVC(penalty='l2', C=1e10, dual=False)

Le paramA?tre dual=FalseA�commande A� la librairie Scikit-Learn de ne pas utiliser l’implA�mentation « duale », qui est appropriA�eA�dans les cas oA? le nombre de features est plus important que la taille de l’A�chantillon.

Le meilleur rA�sultat est toujours obtenu avec une taille de 6 pixels par 6 pixels, mais cette fois-ci en couleurs (rouge, vert et bleu). Le rA�sultat de l’A�tape de la validation est aussi de 12.5%.

svm

Figure 2 : choix des hyperparamA?tres pour la SVM

Quels sont les grands classiques ?

Pour beaucoup de problA?mes de machine learning, il existe un ou plusieursA�algorithmes classiques A� essayer en prioritA�. Pour aider A� faire ce choix, le projet Scikit-Learn a A�ditA� un arbre de dA�cision trA?s pratique :

ml_map

À propos de l'auteur:

2 Commentaires

  1. /

    […] Lorsqu’un algorithme simple ne convient pas, la deuxième étape d’un projet de machine learning est d’essayer des « grands classiques ». Ces algorithmes sont plus complexes d’un point de vue théorique, mais des implémentations toutes prêtes existent et cette étape est généralement rapide à mettre en œuvre. Régression Logistique La régression logistique porte un nom déroutant puisque cette méthode est…  […]

Haut de page