Heute werden wir etwas über maschinelles Lernen in JS lernen, und ja, wenn Sie richtig lesen.
Maschinelles Lernen in 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-lernen funktioniert nicht einmal in Javascript?
Kurze Antwort: Nein. Ich bin nicht verrückt.
Lange Antwort: Es ist möglich und ich bin überrascht, dass die Entwickler ihm nicht die Aufmerksamkeit geschenkt haben, die er verdient. Sprechen über scikit-lernen, Die Leute bei JS haben ihre eigenen Bibliotheken erstellt, um dem entgegenzuwirken, und ich werde auch eine verwenden. Aber zuerst ein wenig über maschinelles Lernen.
Laut Arthur Samuel gibt maschinelles Lernen Computern die Möglichkeit zu lernen, ohne explizit programmiert zu werden. Mit anderen Worten, es gibt dem Computer die Möglichkeit, sich selbst beizubringen und die richtigen Anweisungen auszuführen, ohne dass Sie ihm Anweisungen geben.
Ha existido desde hace bastante tiempo, con Google pasando de la Strategie de móvil primero a la de IA primero.
Warum wird JavaScript bei ML nicht erwähnt?
- Es ist sehr langsam. (Dies ist ein Mythos)
- Die Array-Manipulation ist schwierig (es gibt Bibliotheken, zum Beispiel math.js).
- Sólo preocupado por el Desarrollo Web (En algún lugar, Node.js se está riendo de esto.)
- Bibliotheken sind normalerweise für Python gemacht. (JS Leute sind nicht zurück)
Es gibt eine Handvoll JavaScript-Bibliotheken mit Algorithmen für Maschinelles Lernen vorgefertigt, wie z Lineare Regression, SVMs, Naive-Bayes, und so weiter. Hier sind einige davon,
- brain.js (Neuronale Netze)
- Synaptisch (Neuronale Netze)
- natürlich (Verarbeitung natürlicher Sprache)
- ConvNetJS (Faltungs-Neuronale Netze)
- mljs (Eine Reihe von Unterbibliotheken mit einer Vielzahl von Funktionen)
- Ordentlich (Neuronale Netze)
- Webdnn (Tiefes Lernen)
Wir werden die Regressionsbibliothek von verwenden mljs eine lineare Regressionshexerei durchführen hahaha.
Schritt 1. Installieren Sie die Bibliotheken
$ Garn ml-Regression csvtojson hinzufügen
Oder wenn du magst npm
$ npm installiere ml-Regression csvtojson
ml-Regression es macht, was der Name andeutet.
csvtojson ist ein schneller Parser csv zum node.js das ermöglicht das Hochladen von Datendateien csv und konvertieren sie zu JSON.
Laden Sie die Datendatei herunter (.csv) schon seit Hier und fügen Sie es in Ihr Projekt ein.
Angenommen, Sie haben bereits ein Projekt initialisiert npm leer, öffne die Datei Index.js und geben Sie Folgendes ein. (Sie können kopieren / einfügen, wenn Sie möchten, aber ich bevorzuge, dass Sie es zum besseren Verständnis selbst schreiben.)
const ml = erfordern ('ml-Regression'); const csv = require ('csvtojson'); const SLR = ml.SLR; // Einfache lineare Regression const csvFilePath = 'Advertising.csv'; // Daten lassen csvData = [], // Analysierte Daten X = [], // Eingabe y = []; // Ausgabe letgressionModel;
Jetzt werden wir die Methode verwenden aus Datei von csvtojson um unsere Datendatei zu laden.
csv () .fromFile (csvFilePath) .on ('json', (jsonObj) => {csvData.push (jsonObj);}) .on ('done', () => {dressData (); // Um zu erhalten JSON-Objektdatenpunkte performRegression ();});
Dressing-Daten, um sie für die Ausführung vorzubereiten
Die Objekte JSON dass wir drin bleiben csvData Sie sind gut, Objekte, und wir brauchen eine Reihe von Eingabedatenpunkten sowie Ausgabedatenpunkten. Wir werden unsere Daten über eine Funktion ausführen dressData welches unsere Variablen X und y ausfüllt.
Funktion dressData () {/ ** * Eine Zeile im Datenobjekt sieht folgendermaßen aus: * {* TV: "10", * Radio: "100", * Zeitung: "20", * "Sales": "1000" *} * * Daher müssen wir beim Hinzufügen der Datenpunkte den Wert * der Zeichenfolge als Gleitkomma analysieren. * / csvData.forEach ((row) => {X.push (f (row.Radio)); y.push (f (row.Sales));}); } function f (s) {return parseFloat (s); }}
Trainieren Sie Ihr Modell und beginnen Sie mit der Vorhersage
Nachdem unsere Daten erfolgreich verarbeitet wurden, ist es Zeit, unser Modell zu trainieren.
Dazu schreiben wir eine Funktion performRegression:
Funktion performRegression () {RegressionModell = neue Spiegelreflexkamera (X, y); // Trainiere das Modell auf Trainingsdaten console.log (RegressionModel.toString (3)); PredictOutput (); }}
Das Regressionsmodell hat eine Methode für String Dies erfordert einen Parameter namens Genauigkeit für Gleitkommaausgänge.
Die Funktion PredictOutput Hier können Sie Eingabewerte eingeben und die erwartete Ausgabe an Ihre Konsole senden.
So sieht es aus: (Beachten Sie, dass ich das Lesezeilen-Dienstprogramm von Node.j verwende.)
Funktion predOutput () {rl.question ('Geben Sie Eingabe X zur Vorhersage ein (drücken Sie STRG + C, um das Programm zu beenden):', (Antwort) => {console.log (`Bei X = $ {Antwort}, y = $ {Regressionsmodell .predict (parseFloat (Antwort))} `); PredictOutput ();}); }}
Y aquí está el código para agregar la entrada de lectura del Nutzername:
const readline = require ('readline'); // Damit der Benutzer nach Vorhersagen fragt, die zulässig sind const rl = readline.createInterface ({input: process.stdin, output: process.stdout});
Wir sind fertig!
Wenn Sie die Schritte befolgt haben, sollten Sie so aussehen index.js:
const ml = erfordern ('Regression ml-'); const csv = require ('csvtojson'); const SLR = ml.SLR; // Einfache lineare Regression const csvFilePath = 'Advertising.csv'; // Daten lassen csvData = [], // Analysierte Daten X = [], // Eingabe y = []; // Ausgabe let regressionModel; const readline = require ('readline'); // Damit der Benutzer nach Vorhersagen fragt, die zulässig sind const rl = readline.createInterface ({{) input: process.stdin, output: process.stdout}); csv () .fromFile (csvFilePath) .on ('json', (jsonObj) => {csvData.push (jsonObj);}) .on ('done', () => {dressData (); // Um zu erhalten JSON Objects-Datenpunkte performRegression ();}); Funktion performRegression () {RegressionModell = neue Spiegelreflexkamera (X, y); // Trainiere das Modell auf Trainingsdaten console.log (RegressionModel.toString (3)); PredictOutput (); } function dressData () {/ ** Eine Zeile im Datenobjekt sieht gleich aus: * {* TV: "10", * Radio: "100", Zeitung: "20", "Sales": "1000" *} * Daher müssen wir beim Hinzufügen der Datenpunkte den Wert der Zeichenfolge als Gleitkomma analysieren. * / csvData.forEach ((row) => {{svData.forEach X.push (f (row.Radio)); y.push (f (row.Sales));}); } Funktion f (s) gibt parseFloat (s) zurück; } function PredictOutput () {rl.question ('Geben Sie Eingabe X für die Vorhersage ein (drücken Sie STRG + C, um den Vorgang zu beenden):', (Antwort) => {console.log (`Bei X = $ {Antwort}, y = $ { gressionModel.predict (parseFloat (Antwort))} `); PredictOutput ();}); }}
Gehen Sie zu Ihrem Terminal und führen Sie den Knoten index.js aus. Dieser generiert Folgendes:
node index.js Geben Sie den Eingang X für die Vorhersage ein (drücken Sie STRG + C, um den Vorgang zu beenden): 151,5 f (x) = 0,202 * x + 9,31 Geben Sie den Eingang X für die Vorhersage ein (drücken Sie STRG + C, um den Vorgang zu beenden): Bei X = 151,5, y = 39,989749279911285