L'apprentissage automatique transforme divers secteurs, dont l'immobilier. Une tâche courante consiste à prédire les prix des logements en fonction de diverses caractéristiques telles que le nombre de chambres, de salles de bains, la superficie en pieds carrés et l'emplacement. Dans cet article, nous explorerons comment créer un modèle d'apprentissage automatique à l'aide de scikit-learn pour prédire les prix de l'immobilier, couvrant tous les aspects, du prétraitement des données au déploiement du modèle.
Scikit-learn est l'une des bibliothèques les plus utilisées pour l'apprentissage automatique en Python. Il propose des outils simples et efficaces pour l’analyse et la modélisation des données. Qu'il s'agisse de classification, de régression, de clustering ou de réduction de dimensionnalité, scikit-learn fournit un ensemble complet d'utilitaires pour vous aider à créer des modèles d'apprentissage automatique robustes.
Dans ce guide, nous allons créer un modèle de régression en utilisant scikit-learn pour prédire les prix de l'immobilier. Passons en revue chaque étape du processus.
La tâche à accomplir est de prédire le prix d'une maison en fonction de ses caractéristiques telles que :
Il s'agit d'un problème d'apprentissage supervisé où la variable cible (prix de l'immobilier) est continue, ce qui en fait une tâche de régression. Scikit-learn fournit une variété d'algorithmes de régression, tels que Régression linéaire et Random Forest, que nous utiliserons dans ce projet.
Vous pouvez soit utiliser un ensemble de données du monde réel comme l'ensemble de données Kaggle House Prices, soit collecter vos propres données à partir d'une API publique.
Voici un exemple de ce à quoi pourraient ressembler vos données :
Chambres | Salle de bains | Superficie (pieds carrés) | Emplacement | Prix ($) |
---|---|---|---|---|
3 | 2 | 1500 | Boston | 300 000 |
4 | 3 | 2000 | Seattle | 500 000 |
La variable cible ici est le Prix.
Avant d'introduire les données dans un modèle d'apprentissage automatique, nous devons les prétraiter. Cela inclut la gestion des valeurs manquantes, l'encodage des caractéristiques catégorielles et la mise à l'échelle des données.
Les données manquantes sont courantes dans les ensembles de données du monde réel. Nous pouvons soit remplir les valeurs manquantes avec une mesure statistique comme la médiane, soit supprimer les lignes avec les données manquantes :
data.fillna(data.median(), inplace=True)
Étant donné que les modèles d'apprentissage automatique nécessitent une saisie numérique, nous devons convertir les fonctionnalités catégorielles telles que l'emplacement en nombres. Label Encoding attribue un numéro unique à chaque catégorie :
from sklearn.preprocessing import LabelEncoder encoder = LabelEncoder() data['Location'] = encoder.fit_transform(data['Location'])
Il est important de mettre à l'échelle des fonctionnalités telles que la zone et le prix pour garantir qu'elles sont sur la même échelle, en particulier pour les algorithmes sensibles à l'ampleur des fonctionnalités. Voici comment nous appliquons la mise à l'échelle :
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X)
Toutes les fonctionnalités ne contribuent pas de manière égale à la variable cible. La sélection des fonctionnalités aide à identifier les fonctionnalités les plus importantes, ce qui améliore les performances du modèle et réduit le surajustement.
Dans ce projet, nous utilisons SelectKBest pour sélectionner les 5 principales fonctionnalités en fonction de leur corrélation avec la variable cible :
from sklearn.feature_selection import SelectKBest, f_regression selector = SelectKBest(score_func=f_regression, k=5) X_new = selector.fit_transform(X, y)
Maintenant que nous avons prétraité les données et sélectionné les meilleures fonctionnalités, il est temps d'entraîner le modèle. Nous utiliserons deux algorithmes de régression : Régression linéaire et Random Forest.
La régression linéaire trace une ligne droite à travers les données, minimisant ainsi la différence entre les valeurs prédites et réelles :
from sklearn.linear_model import LinearRegression linear_model = LinearRegression() linear_model.fit(X_train, y_train)
Random Forest est une méthode d'ensemble qui utilise plusieurs arbres de décision et fait la moyenne de leurs résultats pour améliorer la précision et réduire le surajustement :
from sklearn.ensemble import RandomForestRegressor forest_model = RandomForestRegressor(n_estimators=100) forest_model.fit(X_train, y_train)
Pour évaluer dans quelle mesure nos modèles se généralisent, nous divisons les données en ensembles de formation et de test :
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size=0.2, random_state=42)
Après avoir entraîné les modèles, nous devons évaluer leurs performances à l'aide de métriques telles que Erreur quadratique moyenne (MSE) et R-carré (R²).
MSE calcule la différence quadratique moyenne entre les valeurs prédites et réelles. Un MSE inférieur indique de meilleures performances :
from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred)
R² nous indique dans quelle mesure le modèle explique la variance de la variable cible. Une valeur de 1 signifie une prédiction parfaite :
from sklearn.metrics import r2_score r2 = r2_score(y_test, y_pred)
Comparez les performances des modèles de régression linéaire et de forêt aléatoire à l'aide de ces métriques.
Pour améliorer encore les performances du modèle, nous pouvons affiner les hyperparamètres. Pour Random Forest, les hyperparamètres tels que n_estimators (nombre d'arbres) et max_degree (profondeur maximale des arbres) peuvent avoir un impact significatif sur les performances.
Voici comment utiliser GridSearchCV pour l'optimisation des hyperparamètres :
from sklearn.model_selection import GridSearchCV param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [None, 10, 20] } grid_search = GridSearchCV(RandomForestRegressor(), param_grid, cv=5) grid_search.fit(X_train, y_train) best_model = grid_search.best_estimator_
Une fois que vous avez formé et réglé le modèle, l'étape suivante est le déploiement. Vous pouvez utiliser Flask pour créer une application Web simple qui sert des prédictions.
Voici une application Flask de base pour servir de prévisions sur les prix de l'immobilier :
from flask import Flask, request, jsonify import joblib app = Flask(__name__) # Load the trained model model = joblib.load('best_model.pkl') @app.route('/predict', methods=['POST']) def predict(): data = request.json prediction = model.predict([data['features']]) return jsonify({'predicted_price': prediction[0]}) if __name__ == '__main__': app.run()
Enregistrez le modèle entraîné à l'aide de joblib :
import joblib joblib.dump(best_model, 'best_model.pkl')
De cette façon, vous pouvez faire des prédictions en envoyant des requêtes à l'API.
Dans ce projet, nous avons exploré l'ensemble du processus de création d'un modèle d'apprentissage automatique utilisant scikit-learn pour prédire les prix de l'immobilier. Du prétraitement des données et de la sélection des fonctionnalités à la formation, à l'évaluation et au déploiement du modèle, chaque étape a été couverte par des exemples de code pratiques.
Que vous soyez nouveau dans l'apprentissage automatique ou que vous cherchiez à appliquer scikit-learn à des projets du monde réel, ce guide fournit un flux de travail complet que vous pouvez adapter à diverses tâches de régression.
N'hésitez pas à expérimenter différents modèles, ensembles de données et techniques pour améliorer les performances et la précision de votre modèle.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3