Recherche de site Web

Algorithmes d'apprentissage automatique de régression de vérification ponctuelle en Python avec scikit-learn


La vérification ponctuelle est un moyen de découvrir quels algorithmes fonctionnent bien pour votre problème d'apprentissage automatique.

Vous ne pouvez pas savoir à l’avance quels algorithmes sont les mieux adaptés à votre problème. Vous devez tester un certain nombre de méthodes et concentrer votre attention sur celles qui se révèlent les plus prometteuses.

Dans cet article, vous découvrirez 6 algorithmes d'apprentissage automatique que vous pouvez utiliser lors de la vérification ponctuelle de votre problème de régression en Python avec scikit-learn.

Démarrez votre projet avec mon nouveau livre Machine Learning Mastery With Python, comprenant des tutoriels étape par étape et les fichiers code source Python pour tous les exemples.

Commençons.

  • Mise à jour de janvier 2017 : mise à jour pour refléter les modifications apportées à l'API scikit-learn dans la version 0.18.
  • Mise à jour de mars 2018 : ajout d'un lien alternatif pour télécharger l'ensemble de données, car l'original semble avoir été supprimé.

Présentation des algorithmes

Nous allons examiner 7 algorithmes de classification que vous pouvez vérifier ponctuellement sur votre ensemble de données.

4 algorithmes d'apprentissage automatique linéaire :

  1. Régression linéaire
  2. Régression de crête
  3. Régression linéaire LASSO
  4. Régression nette élastique

3 algorithmes d'apprentissage automatique non linéaire :

  1. K-Voisins les plus proches
  2. Arbres de classification et de régression
  3. Machines à vecteurs de support

Chaque recette est démontrée sur un ensemble de données Boston House Price. Il s'agit d'un problème de régression où tous les attributs sont numériques (mise à jour : téléchargez les données à partir d'ici).

Chaque recette est complète et autonome. Cela signifie que vous pouvez le copier et le coller dans votre propre projet et commencer à l'utiliser immédiatement.

Un harnais de test avec validation croisée 10 fois est utilisé pour démontrer comment vérifier ponctuellement chaque algorithme de machine learning et des mesures d'erreur quadratique moyenne sont utilisées pour indiquer les performances de l'algorithme. Notez que les valeurs d’erreur quadratique moyenne sont inversées (négatives). Il s'agit d'une bizarrerie de la fonction cross_val_score() utilisée qui nécessite que toutes les métriques de l'algorithme soient triées par ordre croissant (une valeur plus grande est préférable).

Les recettes supposent que vous connaissez chaque algorithme d'apprentissage automatique et comment les utiliser. Nous n’entrerons pas dans les détails de l’API ou du paramétrage de chaque algorithme.

Algorithmes d'apprentissage automatique linéaire

Cette section fournit des exemples d'utilisation de 4 algorithmes d'apprentissage automatique linéaire différents pour la régression en Python avec scikit-learn.

1. Régression linéaire

La régression linéaire suppose que les variables d'entrée ont une distribution gaussienne. On suppose également que les variables d’entrée sont pertinentes par rapport à la variable de sortie et qu’elles ne sont pas fortement corrélées les unes aux autres (un problème appelé colinéarité).

Vous pouvez construire un modèle de régression linéaire à l'aide de la classe LinearRegression.

# Linear Regression
import pandas
from sklearn import model_selection
from sklearn.linear_model import LinearRegression
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = LinearRegression()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-34.7052559445

2. Régression de crête

La régression Ridge est une extension de la régression linéaire dans laquelle la fonction de perte est modifiée pour minimiser la complexité du modèle mesuré comme la somme au carré des valeurs des coefficients (également appelée norme l2).

Vous pouvez créer un modèle de régression Ridge à l'aide de la classe Ridge.

# Ridge Regression
import pandas
from sklearn import model_selection
from sklearn.linear_model import Ridge
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = Ridge()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-34.0782462093

3. Régression LASSO

L'opérateur de retrait et de sélection le moins absolu (ou LASSO en abrégé) est une modification de la régression linéaire, comme la régression de crête, où la fonction de perte est modifiée pour minimiser la complexité du modèle mesuré comme la somme des valeurs absolues des valeurs des coefficients (également appelées la norme L1).

Vous pouvez construire un modèle LASSO en utilisant la classe Lasso.

# Lasso Regression
import pandas
from sklearn import model_selection
from sklearn.linear_model import Lasso
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = Lasso()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-34.4640845883

4. Régression ElasticNet

ElasticNet est une forme de régression de régularisation qui combine les propriétés de la régression Ridge et de la régression LASSO. Il cherche à minimiser la complexité du modèle de régression (ampleur et nombre de coefficients de régression) en pénalisant le modèle en utilisant à la fois la norme l2 (somme des valeurs des coefficients au carré) et la norme l1 (somme des valeurs des coefficients absolus).

Vous pouvez créer un modèle ElasticNet à l'aide de la classe ElasticNet.

# ElasticNet Regression
import pandas
from sklearn import model_selection
from sklearn.linear_model import ElasticNet
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = ElasticNet()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-31.1645737142

Algorithmes d'apprentissage automatique non linéaires

Cette section fournit des exemples d'utilisation de 3 algorithmes d'apprentissage automatique non linéaires différents pour la régression en Python avec scikit-learn.

1. K-Voisins les plus proches

K-Nearest Neighbours (ou KNN) localise les K instances les plus similaires dans l'ensemble de données d'entraînement pour une nouvelle instance de données. Parmi les K voisins, une variable de sortie moyenne ou médiane est prise comme prédiction. Il convient de noter la métrique de distance utilisée (l'argument métrique). La distance de Minkowski est utilisée par défaut, qui est une généralisation à la fois de la distance euclidienne (utilisée lorsque toutes les entrées ont la même échelle) et de la distance de Manhattan (lorsque les échelles des variables d'entrée diffèrent).

Vous pouvez créer un modèle KNN pour la régression à l'aide de la classe KNeighborsRegressor.

# KNN Regression
import pandas
from sklearn import model_selection
from sklearn.neighbors import KNeighborsRegressor
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = KNeighborsRegressor()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-107.28683898

2. Arbres de classification et de régression

Les arbres de décision ou arbres de classification et de régression (CART comme on les appelle) utilisent les données d'entraînement pour sélectionner les meilleurs points pour diviser les données afin de minimiser une mesure de coût. La mesure de coût par défaut pour les arbres de décision de régression est l'erreur quadratique moyenne, spécifiée dans le paramètre critère.

Vous pouvez créer un modèle CART pour la régression à l'aide de la classe DecisionTreeRegressor.

# Decision Tree Regression
import pandas
from sklearn import model_selection
from sklearn.tree import DecisionTreeRegressor
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = DecisionTreeRegressor()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-35.4906027451

3. Machines vectorielles de support

Des machines à vecteurs de support (SVM) ont été développées pour la classification binaire. La technique a été étendue aux problèmes de prédiction à valeur réelle appelés Support Vector Regression (SVR). Comme l'exemple de classification, SVR est construit sur la bibliothèque LIBSVM.

Vous pouvez créer un modèle SVM pour la régression à l'aide de la classe SVR.

# SVM Regression
import pandas
from sklearn import model_selection
from sklearn.svm import SVR
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.data"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataframe = pandas.read_csv(url, delim_whitespace=True, names=names)
array = dataframe.values
X = array[:,0:13]
Y = array[:,13]
seed = 7
kfold = model_selection.KFold(n_splits=10, random_state=seed)
model = SVR()
scoring = 'neg_mean_squared_error'
results = model_selection.cross_val_score(model, X, Y, cv=kfold, scoring=scoring)
print(results.mean())

Remarque : Vos résultats peuvent varier en raison de la nature stochastique de l'algorithme ou de la procédure d'évaluation, ou des différences de précision numérique. Pensez à exécuter l’exemple plusieurs fois et comparez le résultat moyen.

L’exécution de l’exemple fournit une estimation de l’erreur quadratique moyenne.

-91.0478243332

Résumé

Dans cet article, vous avez découvert des recettes d'apprentissage automatique pour la régression en Python à l'aide de scikit-learn.

Plus précisément, vous avez appris :

4 algorithmes d'apprentissage automatique linéaire :

  • Régression linéaire
  • Régression de crête
  • Régression linéaire LASSO
  • Régression nette élastique

3 algorithmes d'apprentissage automatique non linéaire :

  • K-Voisins les plus proches
  • Arbres de classification et de régression
  • Machines à vecteurs de support

Avez-vous des questions sur les algorithmes d'apprentissage automatique de régression ou sur cet article ? Posez vos questions dans les commentaires et je ferai de mon mieux pour y répondre.

Articles connexes