Régression isotone non paramétrique avec Scikit-Learn

Machine LearningMachine LearningBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce tutoriel, nous allons apprendre à connaître la régression isotone, qui est une technique de régression non paramétrique qui trouve une approximation non décroissante d'une fonction tout en minimisant l'erreur quadratique moyenne sur les données d'entraînement. Nous utiliserons scikit-learn, une bibliothèque populaire de machine learning en Python, pour implémenter la régression isotone et la comparer à la régression linéaire.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet de notes pour accéder au carnet Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que le carnet Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations du carnet Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez des commentaires après la session, et nous résoudrons rapidement le problème pour vous.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/ModelSelectionandEvaluationGroup(["Model Selection and Evaluation"]) sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/linear_model("Linear Models") sklearn/ModelSelectionandEvaluationGroup -.-> sklearn/isotonic("Isotonic Regression") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/utils("Utilities") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/linear_model -.-> lab-49172{{"Régression isotone non paramétrique avec Scikit-Learn"}} sklearn/isotonic -.-> lab-49172{{"Régression isotone non paramétrique avec Scikit-Learn"}} sklearn/utils -.-> lab-49172{{"Régression isotone non paramétrique avec Scikit-Learn"}} ml/sklearn -.-> lab-49172{{"Régression isotone non paramétrique avec Scikit-Learn"}} end

Importation des bibliothèques requises

Nous allons commencer par importer les bibliothèques requises pour ce tutoriel, qui sont NumPy, Matplotlib et scikit-learn.

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection

from sklearn.linear_model import LinearRegression
from sklearn.isotonic import IsotonicRegression
from sklearn.utils import check_random_state

Générer des données

Ensuite, nous allons générer quelques données à utiliser pour notre régression. Nous allons créer une tendance monotone non linéaire avec un bruit uniforme homoscédaque.

n = 100
x = np.arange(n)
rs = check_random_state(0)
y = rs.randint(-50, 50, size=(n,)) + 50.0 * np.log1p(np.arange(n))

Ajuster les modèles de régression isotone et linéaire

Nous allons maintenant ajuster les modèles de régression isotone et linéaire aux données générées.

ir = IsotonicRegression(out_of_bounds="clip")
y_ = ir.fit_transform(x, y)

lr = LinearRegression()
lr.fit(x[:, np.newaxis], y)  ## x doit être 2D pour LinearRegression

Tracer les résultats

Enfin, nous allons tracer les résultats des deux modèles de régression pour visualiser la qualité de l'ajustement aux données.

segments = [[[i, y[i]], [i, y_[i]]] for i in range(n)]
lc = LineCollection(segments, zorder=0)
lc.set_array(np.ones(len(y)))
lc.set_linewidths(np.full(n, 0.5))

fig, (ax0, ax1) = plt.subplots(ncols=2, figsize=(12, 6))

ax0.plot(x, y, "C0.", markersize=12)
ax0.plot(x, y_, "C1.-", markersize=12)
ax0.plot(x, lr.predict(x[:, np.newaxis]), "C2-")
ax0.add_collection(lc)
ax0.legend(("Données d'entraînement", "Ajustement isotone", "Ajustement linéaire"), loc="bas droite")
ax0.set_title("Ajustement de la régression isotone sur des données bruitées (n=%d)" % n)

x_test = np.linspace(-10, 110, 1000)
ax1.plot(x_test, ir.predict(x_test), "C1-")
ax1.plot(ir.X_thresholds_, ir.y_thresholds_, "C1.", markersize=12)
ax1.set_title("Fonction de prédiction (%d seuils)" % len(ir.X_thresholds_))

plt.show()

Sommaire

Dans ce tutoriel, nous avons appris à propos de la régression isotone, une technique de régression non paramétrique qui trouve une approximation non décroissante d'une fonction tout en minimisant l'erreur quadratique moyenne sur les données d'entraînement. Nous avons également implémenté la régression isotone à l'aide de scikit-learn et l'avons comparée à la régression linéaire.