Passer au contenu principal




Aujourd'hui, nous allons en apprendre davantage sur l'apprentissage automatique dans JS, et oui, si vous lisez bien.

Apprentissage automatique dans JS

¡¿JAVASCRIPT?! ¿No debería estar usando python? ¿Estoy loca por probar esos cálculos en JavaScript? ¿Estoy tratando de actuar con calma usando un lenguaje que no es python o R? scikit-learn ne fonctionne même pas en javascript?

Réponse courte: Non, je ne suis pas fou.

Réponse longue: C'est possible et je suis surpris que les développeurs ne lui aient pas accordé l'attention qu'elle mérite. En ce qui concerne scikit-learn, les gens de JS ont créé leur propre ensemble de bibliothèques pour le contrer, et je vais en utiliser une aussi. Mais d'abord, un peu sur l'apprentissage automatique.

Selon Arthur Samuel, l'apprentissage automatique donne aux ordinateurs la possibilité d'apprendre sans être explicitement programmé. En d'autres termes, cela donne à l'ordinateur la capacité de s'enseigner et d'exécuter les instructions correctes, sans que vous ne lui donniez d'instructions.

Ha existido desde hace bastante tiempo, con Google pasando de la stratégie de móvil primero a la de IA primero.

Pourquoi JavaScript n'est-il pas mentionné avec ML?

  • Il est très lent. (C'est un mythe)
  • La manipulation des tableaux est difficile (il existe des bibliothèques, par exemple math.js).
  • Sólo preocupado por el Desarrollo Web (En algún lugar, Node.js se está riendo de esto.)
  • Les bibliothèques sont généralement faites pour python. (Les gens de JS ne sont pas en retard)

Il existe une poignée de bibliothèques JavaScript avec des algorithmes pour Apprentissage automatique préconçus, tels que Régression linéaire, SVM, Naive-Bayes, etc. En voici quelques uns,

  • brain.js (Les réseaux de neurones)
  • Synaptique (Les réseaux de neurones)
  • Naturel (Traitement du langage naturel)
  • ConvNetJS (réseaux de neurones convolutifs)
  • mljs (Un ensemble de sous-bibliothèques avec une variété de fonctions)
  • Neatáptic (Les réseaux de neurones)
  • Webdnn (L'apprentissage en profondeur)

Nous allons utiliser la bibliothèque de régression de mljs pour effectuer une certaine régression linéaire de la sorcellerie hahaha.

Étape 1. Installez les bibliothèques

Fil $ ajouter ml-régression csvtojson

Ou si tu aimes npm

$ npm installer ml-régression csvtojson

ml-régression il fait ce que son nom implique.

csvtojson est un analyseur rapide csv afin de node.js qui permet de télécharger des fichiers de données csv et les convertir en JSON.

Téléchargez le fichier de données (.csv) depuis ici et mettez-le dans votre projet.

En supposant que vous ayez déjà initialisé un projet npm vide, ouvrez le fichier indice.js et entrez ce qui suit. (Vous pouvez copier / coller si vous le souhaitez, mais je préfère que vous l'écriviez vous-même pour une meilleure compréhension.)

const ml = require ('ml-regression'); const csv = require ('csvtojson'); const SLR = ml.SLR; // Régression linéaire simple const csvFilePath = 'advertising.csv'; // Données let csvData = [], // Données analysées X = [], // entrée y = []; // sortie let regressionModel;

Maintenant, nous allons utiliser la méthode fromFile de csvtojson pour charger notre fichier de données.

csv () .fromFile (csvFilePath) .on ('json', (jsonObj) => {csvData.push (jsonObj);}) .on ('done', () => {dressData (); // Pour obtenir Points de données d'objet JSON performRegression ();});

Dresser les données pour les préparer à l'exécution

Les objets JSON que nous gardons csvData ce sont bien des objets, et nous avons besoin d'une série de points de données d'entrée ainsi que de points de données de sortie. Nous allons exécuter nos données via une fonction robeData qui remplira nos variables X et y.

function dressData () {/ ** * Une ligne dans l'objet de données ressemble à ceci: * {* TV: "10", * Radio: "100", * Journal: "20", * "Sales": "1000" *} * * Par conséquent, lors de l'ajout des points de données, nous devons analyser la valeur * de la chaîne comme un flottant. * / csvData.forEach ((row) => {X.push (f (row.Radio)); y.push (f (row.Sales));}); } fonction f (s) {retourne parseFloat (s); }

Entraînez votre modèle et commencez à prédire

Maintenant que nos données ont été habillées avec succès, il est temps de former notre modèle.

Pour ce faire, nous allons écrire une fonction performRegression:

function performRegression () {regressionModel = nouveau SLR (X, y); // Entraîne le modèle sur les données d'entraînement console.log (regressionModel.toString (3)); prédireOutput (); }

Le modèle de régression a une méthode pour Chaîne qui prend un paramètre appelé précision pour les sorties à virgule flottante.

La fonction predireOutput vous permet de saisir des valeurs d'entrée et envoie la sortie attendue à votre console.

Voici à quoi cela ressemble: (Notez que j'utilise l'utilitaire de lecture de Node.js)

function predictOutput () {rl.question ('Entrez l'entrée X pour la prédiction (Appuyez sur CTRL + C pour quitter):', (answer) => {console.log (`At X = $ {answer}, y = $ {regressionModel .predict (parseFloat (réponse))} `); predictOutput ();}); }

Y aquí está el código para agregar la entrada de lectura del Nom d'utilisateur:

const readline = require ('readline'); // Pour que l'utilisateur demande l'autorisation des prédictions const rl = readline.createInterface ({input: process.stdin, output: process.stdout});

Nous avons fini!

Si vous avez suivi les étapes, voici à quoi vous devriez ressembler index.js:

const ml = require ('régression ml-'); const csv = require ('csvtojson'); const SLR = ml.SLR; // Régression linéaire simple const csvFilePath = 'advertising.csv'; // Données let csvData = [], // Données analysées X = [], // Entrée y = []; // Sortie let regressionModel; const readline = require ('readline'); // Pour que l'utilisateur demande l'autorisation des prédictions const rl = readline.createInterface ({{) input: process.stdin, output: process.stdout}); csv () .fromFile (csvFilePath) .on ('json', (jsonObj) => {csvData.push (jsonObj);}) .on ('done', () => {dressData (); // Pour obtenir Points de données d'objets JSON performRegression ();}); function performRegression () {regressionModel = nouveau SLR (X, y); // Entraîne le modèle sur les données d'entraînement console.log (regressionModel.toString (3)); prédireOutput (); } function dressData () {/ ** Une ligne dans l'objet de données a la même apparence: * {* TV: "10", * Radio: "100", Newspaper: "20", "Sales": "1000" *} * Par conséquent, lors de l'ajout des points de données, nous devons analyser la valeur de la chaîne comme un flottant. * / csvData.forEach ((row) => {{svData.forEach X.push (f (row.Radio)); y.push (f (row.Sales));}); } la fonction f (s) renvoie parseFloat (s); } function predictOutput () {rl.question ('Entrez l'entrée X pour la prédiction (Appuyez sur CTRL + C pour quitter):', (answer) => {console.log (`At X = $ {answer}, y = $ { regressionModel.predict (parseFloat (réponse))} `); predictOutput ();}); }

Accédez à votre terminal et exécutez le nœud index.js et il générera quelque chose comme ceci:

node index.js Entrez l'entrée X pour la prédiction (Appuyez sur CTRL + C pour quitter): 151,5 f (x) = 0,202 * x + 9,31 Entrez l'entrée X pour la prédiction (Appuyez sur CTRL + C pour quitter): À X = 151,5, y = 39,989749279911285