Une introduction à Redis-ML.  Partie un

Une introduction à Redis-ML. Partie un

Malgré un intérêt généralisé pour apprentissage automatique (ML), son utilisation efficace dans un environnement en temps réel est un problème complexe qui n’a pas reçu suffisamment d’attention de la part des développeurs de frameworks. Presque tous les langages disposent d’un framework pour implémenter la partie « apprentissage » de l’apprentissage automatique, mais très peu de frameworks prennent en charge le côté « prédiction » de l’apprentissage automatique.

Une fois que vous avez formé un modèle ML, comment pouvez-vous créer une application en temps réel basée sur ce modèle ? Avec de nombreux kits d’outils, vous devez créer votre propre application. Nous commençons à peine à voir des frameworks axés sur le côté prédiction de l’apprentissage automatique.

Un article précédent a fourni un aperçu des fonctionnalités disponibles dans le module Redis-ML, donc dans cet article, nous allons approfondir l’apprentissage automatique – expliquer certaines des techniques de manière accessible et montrer comment vous pouvez augmenter une machine pipeline d’apprentissage avec Redis. À titre d’exemple, nous allons parcourir le code d’un exemple de programme de prévision des prix médians des logements à partir de diverses caractéristiques d’un quartier.

L’exemple de code de cet article est écrit en Python 3 à l’aide d’une variété de packages disponibles gratuitement pour l’apprentissage automatique. Vous devrez installer les packages suivants, à l’aide de pip3 ou de votre gestionnaire de packages préféré, pour exécuter les exemples :

  • scikit-learn (0.18.2)
  • numérique (1.13.1)
  • scipy (0.19.1)
  • redis (2.10.5)

Vous aurez également besoin d’une instance Redis 4.0.0 et du module Redis-ML. Shay Nativ, le développeur derrière le module Redis-ML, a créé un conteneur Docker avec Redis 4.0.0 et le module Redis-ML préchargé. Pour utiliser ce conteneur conjointement avec le code de cet article, lancez le conteneur à l’aide de la commande :

docker run -it -p 6379:6379 shaynativ/redis-ml

Docker téléchargera et exécutera automatiquement le conteneur, en mappant le port Redis par défaut (6379) du conteneur à votre ordinateur.

Pour construire notre prédicteur du prix du logement, nous utiliserons une technique d’apprentissage automatique connue sous le nom de régression linéaire.

La régression linéaire faisait partie de la boîte à outils du statisticien bien avant l’invention de l’apprentissage automatique algorithmique. Avec la régression linéaire, nous essayons de prédire un résultat (parfois appelé la valeur dépendante) à partir d’une ou plusieurs quantités connues (variables explicatives). Pour que la régression linéaire fonctionne, nous devons être capables d’estimer avec précision nos résultats avec une ligne droite.

Exemple de régression linéaire

Dans le graphique ci-dessus, tiré de l’article de Wikipedia sur la régression linéaire, nous pouvons voir comment nos points de données se regroupent autour d’une ligne idéalisée. Cet ensemble de données est un bon candidat pour la régression linéaire. En pratique, la régression linéaire est utilisée pour modéliser une variété de problèmes du monde réel où une relation linéaire à partir d’observations peut prédire avec précision un résultat, tel que le prix d’une maison en fonction de la superficie en pieds carrés, ou le GPA du collège à partir des scores GPA et SAT du lycée. .

D’après l’algèbre, nous savons qu’une droite est représentée par une équation de la forme y = b + ax, donc pour “apprendre” un modèle de cette forme, nous devons appliquer un algorithme pour découvrir les paramètres de la ligne – la pente et l’interception. Rien d’incroyablement fantaisiste, en fait avant l’apprentissage automatique algorithmique, la plupart des statisticiens “adapteraient” ces modèles à la main. De nos jours, il est beaucoup plus courant d’utiliser un ordinateur pour trouver les paramètres de la ligne et une variété de kits d’outils (TensorFlow, Scikit, Apache Spark) sont disponibles pour résoudre un problème de régression linéaire. La chose importante à retenir est qu’une fois que nous avons appris un modèle de régression linéaire, nous avons une formule mathématique pour prédire les résultats qui pourrait être mise en œuvre par n’importe quel système.

Examinons un exemple d’exécution d’une régression linéaire et découvrons les paramètres du modèle à l’aide du populaire package Python scikit-learn et de l’ensemble de données Boston Housing.

Le Boston Housing Dataset est un ensemble de données classique utilisé dans les statistiques d’enseignement et l’apprentissage automatique. L’ensemble de données prédit le prix médian du logement pour un quartier de la région de Boston en utilisant des caractéristiques du quartier telles que le nombre moyen de pièces dans une maison, la distance par rapport aux principaux centres d’emploi de Boston ou le taux de criminalité. Pour faciliter la visualisation du processus de régression linéaire, nous allons travailler avec une seule caractéristique des données, la colonne Nombre moyen de pièces par logement (RM).

L’ensemble de données sur le logement de Boston est fourni dans le cadre du package scikit-learning. Commençons donc par tracer nos données pour visualiser la relation entre le nombre de chambres (RM) et le prix médian (MEDV) :Initial Data

Bien qu’il ne s’agisse pas d’une ligne parfaite, nous pouvons voir une relation linéaire assez forte entre le nombre moyen de pièces et le prix médian des maisons dans un quartier. Nous pouvons même dessiner une représentation idéalisée de la relation et voir comment les points de données se regroupent autour d’elle.Data with Regression Line

Le code suivant montre comment charger le jeu de données Boston Housing à l’aide de scikit. L’ensemble de données Boston Housing se compose de douze caractéristiques différentes utilisées pour prédire les prix des logements, donc après avoir chargé l’ensemble de données, nous extrayons les données de la cinquième colonne (la colonne RM) à partir des données de notre échantillon.

from sklearn.datasets import load_boston

boston = load_boston()

boston_RM = boston.data[:,5]
boston_PRICE = boston.target

Maintenant, nous divisons nos données en deux ensembles, un ensemble d’apprentissage et un ensemble de test. Pour notre exemple, nous créons notre ensemble d’apprentissage à partir des 400 premiers échantillons et l’ensemble de test à partir des 106 échantillons restants.

# slice the data into train and test sets
x_train = boston_RM[:400].reshape(-1, 1)
x_test = boston_RM[400:].reshape(-1, 1)
y_train = boston.target[:400]
y_test = boston.target[400:]

Cette méthode de fractionnement garantit que nous exécutons toujours avec les mêmes ensembles pour des résultats reproductibles.

Maintenant que nous avons construit nos ensembles d’entraînement et de test, nous pouvons utiliser le modèle LinearRegression fourni par scikit pour ajuster une ligne à nos données :

lm = LinearRegression()
lm.fit(x_train, y_train)

coef = lm.coef_[0]
int = lm.intercept_
print('Coef: {coef}, Intercept: {int}'.format(coef=coef, int=int))

Après avoir exécuté notre code, nous constatons que scikit a ajusté une ligne à nos données avec un coefficient de 9,40550212 et une interception de -35,26094818316348.

Maintenant que nous avons ces paramètres, nous pouvons implémenter un modèle linéaire pour prédire les prix des logements dans la région de Boston en fonction du nombre moyen de pièces dans une maison dans un quartier d’intérêt. Maintenant que j’ai ce modèle, comment puis-je créer une application pour faire des prédictions en temps réel et utiliser les fonctionnalités d’une application ou d’un site Web ?

Le pack Scikit fournit une fonction de prédiction pour évaluer un modèle formé, mais l’utilisation d’une fonction dans une application nécessite la mise en œuvre d’une multitude d’autres services pour la rendre rapide et fiable. C’est là que Redis peut augmenter vos systèmes d’apprentissage automatique.

Le module Redis-ML tire parti de la nouvelle API Modules pour ajouter une régression linéaire standard en tant que type de données natif. Le module peut créer des régressions linéaires et les utiliser pour prédire des valeurs.

Pour ajouter une régression linéaire à Redis, vous devez utiliser la commande ML.LINREG.SET pour ajouter une régression linéaire à la base de données. La commande ML.LINGREG.SET a la forme suivante :

ML.LINREG.SET key intercept coeef [...]

Par convention, toutes les commandes du module Redis-ML commencent par l’identifiant du module, ML. Toutes les commandes de régression linéaire sont préfixées par LINGREG.

Pour configurer Redis afin qu’il devienne un moteur prédictif pour les prix des logements à Boston en utilisant la ligne que nous intégrons dans scikit, nous devons d’abord charger le module Redis-ML à l’aide de la directive loadmodule.

redis-server --loadmodule /path/to/redis-ml/module.so

Ensuite, nous définissons une clé pour représenter notre régression linéaire en utilisant les constantes de scikit en exécutant la commande ML.LINGREG.SET. N’oubliez pas que l’ordonnée à l’origine est la première valeur fournie et que les coefficients sont fournis dans l’ordre des caractéristiques. À partir de notre code scikit pour ajuster une ligne de régression aux données sur le logement, nous avons déterminé que notre ligne avait un coefficient de 9,40550212 pour la variable RM et une interception de -35,26094818316348. Nous pouvons utiliser la commande ML.LINGREG.SET pour définir une clé Redis afin de calculer cette relation linéaire :

127.0.0.1:6379> ML.LINREG.SET boston_house_price:rm-only -35.26094818316348 9.40550212
OK

Une fois notre boston_house_price:rm-seulement clé est créée, nous pouvons prédire à plusieurs reprises le prix médian des maisons dans un quartier en utilisant la commande ML.LINGREG.PREDICT. Pour prédire le prix médian des maisons dans un quartier qui compte en moyenne 6,2 pièces par maison, nous exécuterions la commande :

127.0.0.1:6379> ML.LINREG.PREDICT boston_house_price:rm-only 6.2
"23.053164960836519”

Redis prédit un prix médian des maisons de 23 053 $ (rappelez-vous que nos prix des logements sont en milliers) pour ce quartier.

Il est utile de comprendre comment utiliser les commandes ML.LINREG à partir de redis-cli, mais il est beaucoup plus probable que nous le fassions à partir d’une application. Nous pouvons étendre notre code Python qui correspond à la ligne de régression pour créer automatiquement la clé boston_house_price:rm-only dans Redis. Une fois que nous avons créé la clé dans Redis, nous implémentons un test qui génère des prédictions à partir de Redis à l’aide de nos données de test.

r = redis.StrictRedis('localhost', 6379)
r.execute_command("ML.LINREG.SET", "boston_house_price:rm-only", "-35.26094818316348", "9.40550212", )

redis_predict = []
for x in x_test:
    y = r.execute_command("ML.LINREG.PREDICT", "boston_house_price:rm-only", x[0])
    redis_predict.append(float(y))

Nous pouvons également générer les prédictions de scikit pour le même ensemble de données en utilisant la routine predict :

y_predict = lm.predict(x_test)

À titre de comparaison, nous avons tracé les résultats. Dans le graphique ci-dessous, les cercles noirs représentent les prix réels des données de test dans notre ensemble de données. Les marqueurs bleus (+) représentent les valeurs prédites par Scikit et les marqueurs magenta (x) représentent les valeurs prédites par Redis.Comparison Plot

Comme vous pouvez le constater, Redis et scikit font les mêmes prévisions pour le prix médian de l’immobilier compte tenu du nombre moyen de pièces. Bien que la régression linéaire puisse ne pas prédire correctement le prix exact de chaque point de données, elle fournit un moyen utile d’estimer un prix inconnu en fonction de certaines caractéristiques observables d’un quartier.

Dans cet article, nous avons approfondi la fonction de régression linéaire de Redis-ML. Nous avons examiné comment utiliser le package populaire scikit Python pour ajuster une ligne de régression linéaire à certaines données sur le logement, puis créer un moteur de prévision du prix du logement à l’aide de Redis 4.0.0 et du module Redis-ML.

Dans la prochaine partie de la série, nous verrons comment Redis-ML peut être utilisé pour implémenter un moteur de classification, un autre type de problème d’apprentissage automatique qui tente de déterminer la classe de données inconnues à partir d’exemples précédents.

Development Source

Related Posts

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Clés Redis dans la RAM |  Redis

Clés Redis dans la RAM | Redis

No Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *