Modèles d’apprentissage profond dans Keras

Online Coding Courses for Kids

introduction

L’apprentissage en profondeur est actuellement l’un des domaines les plus intéressants et les plus prometteurs de l’intelligence artificielle (IA) et de l’apprentissage automatique. Grâce aux progrès technologiques et aux algorithmes de ces dernières années, l’apprentissage en profondeur a ouvert la porte à une nouvelle ère d’applications d’IA.

Dans bon nombre de ces applications, les algorithmes d’apprentissage en profondeur ont des performances égales à celles des experts humains les a surpassés.

Python est devenu le langage de référence pour l’apprentissage automatique et bon nombre des bibliothèques et des frameworks d’apprentissage profond les plus populaires et les plus puissants tels que TensorFlow, Keras, et PyTorch sont construits en Python.

Dans cet article, nous allons effectuer une analyse exploratoire des données (EDA) sur un ensemble de données avant le prétraitement des données et enfin, créer un modèle d’apprentissage en profondeur dans Keras et l’évaluer.

Pourquoi Keras?

Keras est une API d’apprentissage en profondeur construite sur TensorFlow. TensorFlow est une plateforme d’apprentissage automatique de bout en bout qui permet aux développeurs de créer et de déployer des modèles d’apprentissage automatique. TensorFlow a été développé et utilisé par Google; bien qu’il soit sorti sous une licence open source en 2015.

Keras fournit une API de haut niveau pour TensorFlow. Cela facilite grandement la création de différents types de modèles d’apprentissage automatique tout en profitant des avantages de l’infrastructure et de l’évolutivité de TensorFlow.

Il vous permet de définir, compiler, former et évaluer des modèles d’apprentissage en profondeur en utilisant une syntaxe simple et concise comme nous le verrons plus loin dans cette série.

Keras est très puissant; c’est le plus utilisé outil d’apprentissage automatique par haut Kaggle champions dans les différentes compétitions organisées sur Kaggle.

Prévision des prix immobiliers avec Deep Learning

Nous allons construire un régression modèle d’apprentissage en profondeur pour prédire le prix d’une maison en fonction des caractéristiques de la maison telles que l’âge de la maison, le nombre d’étages de la maison, la taille de la maison et de nombreuses autres caractéristiques.

Dans le premier article de la série, nous allons importer les packages et les données et en faire L’analyse exploratoire des données (EDA) pour se familiariser avec l’ensemble de données avec lequel nous travaillons.

Importation des packages requis

Dans cette étape préliminaire, nous importons les packages nécessaires aux étapes suivantes:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Nous importons tensorflow qui inclut Keras et quelques autres outils utiles. Pour la brièveté du code, nous importons keras et layers séparément donc au lieu de tf.keras.layers.Dense nous pouvons écrire layers.Dense.

Nous importons également pandas et numpy qui sont extrêmement utiles et largement utilisés pour stocker et gérer les données ainsi que pour les manipuler.

Et pour visualiser et explorer les données, nous importons plt du matplotlib paquet et seaborn. Matplotlib est une bibliothèque fondamentale pour la visualisation, tandis que Seaborn le rend beaucoup plus simple à utiliser.

Chargement des données

Pour ce didacticiel, nous travaillerons avec un ensemble de données qui rapporte les ventes d’unités résidentielles entre 2006 et 2010 dans une ville appelée Ames, située dans l’Iowa, aux États-Unis.

Pour chaque vente, l’ensemble de données décrit de nombreuses caractéristiques de l’unité résidentielle et indique le prix de vente de cette unité. Ce prix de vente sera la variable cible que nous voulons prédire en utilisant les différentes caractéristiques de l’unité.

Le jeu de données contient en fait beaucoup de données caractéristiques sur chaque unité, y compris la superficie de l’unité, l’année de construction de l’unité, la taille du garage, le nombre de cuisines, le nombre de salles de bain, le nombre de chambres, le style du toit , le type de système électrique, la classe du bâtiment et bien d’autres.

Vous pouvez en savoir plus sur l’ensemble de données sur cette page sur Kaggle.

Pour télécharger le fichier de jeu de données exact que nous utiliserons dans ce didacticiel, visitez sa page Kaggle et cliquez sur le bouton de téléchargement. Cela téléchargera un fichier CSV contenant les données.

Nous renommerons ce fichier en AmesHousing.csv et chargez-le dans notre programme en utilisant Pandas read_csv() fonction:

df = pd.read_csv('AmesHousing.csv')

L’ensemble de données chargé contient 2 930 lignes (entrées) et 82 colonnes (caractéristiques). Voici une vue tronquée de seulement quelques lignes et colonnes:

OrdrePIDSous-classe MSZonage MSFaçade du LotSuperficie du terrainrue
0152630110020RL14131770Paver
1252635004020RH8011622Paver
2352635101020RL8114267Paver

Comme nous l’avons dit précédemment, chaque ligne décrit une vente d’unité résidentielle en spécifiant de nombreuses caractéristiques de l’unité et son prix de vente. Et, encore une fois, pour obtenir plus d’informations sur la signification de chaque variable de cet ensemble de données, veuillez visiter cette page sur Kaggle.

Avant de continuer, nous supprimerons certaines fonctionnalités (colonnes) de l’ensemble de données car elles ne fournissent aucune information utile au mode. Ces fonctionnalités sont Order et PID:

df.drop(['Order', 'PID'], axis=1, inplace=True)

Analyse exploratoire des données (EDA)

L’analyse exploratoire des données (EDA) nous aide à mieux comprendre les données et à y repérer les modèles. La variable la plus importante à explorer dans les données est la variable cible: SalePrice.

Un modèle d’apprentissage automatique est aussi bon que les données d’entraînement – vous vouloir pour le comprendre si vous voulez comprendre votre modèle. La première étape de la construction d’un modèle doit être une bonne exploration des données.

Étant donné que l’objectif final est de prédire les valeurs de la maison, nous nous concentrerons sur SalePrice variable et les variables qui ont une forte corrélation avec elle.

Distribution des prix de vente

Tout d’abord, examinons la distribution de SalePrice. Les histogrammes sont un moyen simple et efficace d’examiner les distributions de variables. Utilisons Matplotlib pour tracer un histogramme qui affiche la distribution du SalePrice:

fig, ax = plt.subplots(figsize=(14,8))
sns.distplot(df['SalePrice'], kde=False, ax=ax)

L’image ci-dessous montre l’histogramme résultant après l’application d’une mise en forme pour améliorer l’apparence:

histogramme des prix de vente

Nous pouvons également regarder le SalePrice distribution utilisant différents types de parcelles. Par exemple, faisons un parcelle d’essaim de SalePrice:

fig, ax = plt.subplots(figsize=(14,8))
sns.swarmplot(df['SalePrice'], color='#2f4b7c', alpha=0.8, ax=ax)

Cela entraînerait:

prix de vente parcelle d'essaim

En regardant l’histogramme et le diagramme d’essaim ci-dessus, nous pouvons voir que pour la plupart des unités, le prix de vente varie de 100 000 $ à 200 000 $. Si nous générons une description du SalePrice variable utilisant Pandas describe() fonction:

print(df['SalePrice'].describe().apply(lambda x: '{:,.1f}'.format(x)))

Nous recevrons:

count      2,930.0
mean     180,796.1
std       79,886.7
min       12,789.0
25%      129,500.0
50%      160,000.0
75%      213,500.0
max      755,000.0
Name: SalePrice, dtype: object

De là, nous savons que:

  • Le prix de vente moyen est de 180796 $
  • Le prix de vente minimum est de 12789 $
  • Le prix de vente maximal est de 755 000 $

Corrélation avec le prix de vente

Voyons maintenant comment les variables prédictives de nos données corrélatif avec la cible SalePrice. Nous calculerons ces valeurs de corrélation en utilisant la méthode de Pearson, puis visualiserons les corrélations en utilisant un carte de chaleur:

fig, ax = plt.subplots(figsize=(10,14))
saleprice_corr = df.corr()[['SalePrice']].sort_values(
  by='SalePrice', ascending=False)
sns.heatmap(saleprice_corr, annot=True, ax=ax) 

Et voici la carte thermique qui montre comment les variables prédictives sont corrélées avec SalePrice.

Des couleurs plus claires sur la carte indiquent une correlation positive les valeurs et les couleurs plus foncées indiquent des valeurs de corrélation positives inférieures et parfois des valeurs de corrélation négatives:

carte thermique de corrélation

De toute évidence, le SalePrice variable a une corrélation 1: 1 avec elle-même. Cependant, il existe d’autres variables qui sont fortement corrélées avec le SalePrice dont nous pouvons tirer quelques conclusions.

Par exemple, nous pouvons voir que SalePrice est fortement corrélé avec le Overall Qual variable qui décrit la qualité globale du matériau et la finition de la maison. Nous pouvons également voir une forte corrélation avec Gr Liv Area qui spécifie la surface habitable hors sol de l’unité.

Examen des différents degrés de corrélation

Maintenant que nous avons des variables qui sont fortement corrélées avec SalePrice à l’esprit, examinons les corrélations plus en profondeur.

Certaines variables sont fortement corrélées à la SalePrice, et certains ne le sont pas. En les vérifiant, nous pouvons tirer des conclusions sur ce qui est prioritaire lorsque les gens achètent des propriétés.

Corrélation élevée

Tout d’abord, examinons deux variables qui ont une corrélation positive élevée avec SalePrice – à savoir Overall Qual qui a une valeur de corrélation de 0.8 et Gr Liv Area qui a une valeur de corrélation de 0.71.

Overall Qual représente la qualité globale du matériau et de la finition de la maison. Explorons leur relation plus en détail en traçant un nuage de points, en utilisant Matplotlib:

fig, ax = plt.subplots(figsize=(14,8))
ax.scatter(x=df['Overall Qual'], y=df['SalePrice'], color="#388e3c", 
           edgecolors="#000000", linewidths=0.1, alpha=0.7);
plt.show()

Voici le nuage de points résultant:

nuage de points à corrélation élevée

Nous pouvons clairement voir qu’à mesure que la qualité globale augmente, le prix de vente des maisons a également tendance à augmenter. L’augmentation n’est pas tout à fait linéaire, mais si nous dessinions une ligne de tendance, elle serait relativement proche de linéaire.

Maintenant, voyons comment Gr Liv Area et SalePrice se rapportent les uns aux autres avec un autre nuage de points:

fig, ax = plt.subplots(figsize=(14,8))
ax.scatter(x=df['Gr Liv Area'], y=df['SalePrice'], color="#388e3c", 
           edgecolors="#000000", linewidths=0.1, alpha=0.7);
plt.show()

Voici le nuage de points résultant:

nuage de points à corrélation élevée

Encore une fois, nous pouvons clairement voir la forte corrélation positive entre Gr Liv Area et SalePrice dans ce nuage de points. Ils ont tendance à augmenter les uns avec les autres, avec quelques valeurs aberrantes.

Corrélation modérée

Ensuite, regardons les variables qui ont une corrélation positive modérée avec SalePrice. Nous allons regarder Lot Frontage qui a une valeur de corrélation de 0.36 et Full Bath qui a une valeur de corrélation de 0.55.

Lot Frontage représente la longueur du terrain devant la maison, jusqu’à la rue. Et Full Bath représente le nombre de salles de bain complètes hors sol.

Similaire à ce que nous avons fait avec Overall Qual et Gr Liv Area, nous allons tracer deux nuages ​​de points pour visualiser les relations entre ces variables et le SalePrice.

Commençons avec Lot Frontage:

fig, ax = plt.subplots(figsize=(14,8))
ax.scatter(x=df['Lot Frontage'], y=df['SalePrice'], color="orange", 
           edgecolors="#000000", linewidths=0.5, alpha=0.5);
plt.show()

nuage de points de corrélation modérée

Ici, vous pouvez voir une corrélation beaucoup plus faible. Même avec de plus grands lots devant les propriétés, le prix n’augmente pas beaucoup. Il existe une corrélation positive entre les deux, mais cela ne semble pas être aussi important pour les acheteurs que certaines autres variables.

Ensuite, montrons le nuage de points pour Full Bath:

fig, ax = plt.subplots(figsize=(14,8))
ax.scatter(x=df['Full Bath'], y=df['SalePrice'], color="orange", 
           edgecolors="#000000", linewidths=0.5, alpha=0.5);
plt.show()

nuage de points de correction modérée

Ici, vous pouvez également voir une corrélation positive, qui n’est pas si faible, mais pas trop forte. Une bonne partie des maisons avec deux salles de bain complètes ont exactement le même prix que les maisons avec une seule salle de bain. Le nombre de salles de bain influence le prix, mais pas trop.

Faible corrélation

Enfin, regardons les variables qui ont une faible corrélation positive avec SalePrice et comparez-les à ce que nous avons vu jusqu’à présent. Nous allons regarder Yr Sold qui a une valeur de corrélation de -0.031 et Bsmt Unf SF qui a une valeur de corrélation de 0.18.

Yr Sold représente l’année au cours de laquelle la maison a été vendue. Et Bsmt Unf SF représente la superficie du sous-sol non fini en pieds carrés.

Commençons avec Yr Sold:

fig, ax = plt.subplots(figsize=(14,8))
ax.scatter(x=df['Yr Sold'], y=df['SalePrice'], color="#b71c1c", 
           edgecolors="#000000", linewidths=0.1, alpha=0.5);
ax.xaxis.set_major_formatter(
  ticker.FuncFormatter(func=lambda x,y: int(x)))
plt.show()

nuage de points à faible corrélation

La corrélation ici est si faible qu’il est assez sûr de supposer qu’il n’y a fondamentalement aucune corrélation entre ces deux variables. Il est prudent de supposer que les prix des propriétés n’ont pas beaucoup changé entre 2006 et 2010.

Faisons également une intrigue pour Bsmt Unf SF:

fig, ax = plt.subplots(figsize=(14,8))
ax.scatter(x=df['Bsmt Unf SF'], y=df['SalePrice'], color="#b71c1c", 
           edgecolors="#000000", linewidths=0.1, alpha=0.5);
plt.show()

nuage de points à faible corrélation

Ici, nous pouvons voir quelques propriétés avec des Bsmt Unf SF vendu à un prix supérieur à ceux de grande valeur. Là encore, cela pourrait être dû au pur hasard, et il n’y a pas de corrélation apparente entre les deux.

Il est prudent de supposer que Bsmt Unf SF n’a pas grand-chose à voir avec le SalePrice.

Conclusion

Dans cet article, nous avons fait les premiers pas dans la plupart des projets d’apprentissage automatique. Nous avons commencé par télécharger et charger un ensemble de données qui nous intéresse.

Ensuite, nous avons effectué une analyse exploratoire des données sur les données pour bien comprendre ce à quoi nous avons affaire. Un modèle d’apprentissage automatique est aussi bon que les données d’entraînement – vous vouloir pour le comprendre si vous voulez comprendre votre modèle.

Enfin, nous avons choisi quelques variables et vérifié leur corrélation avec la variable principale que nous lorgnons – le SalePrice variable.


Close Menu