作家
登录

如何使用JavaScript构建机器学习模型

作者: 来源: 2017-07-07 16:40:46 阅读 我要评论

今朝,机械进修范畴建模的重要说话是 Python 和 R,前不久腾讯推出的机械进修框架 Angel 则支撑 Java 和 Scala。本文作者 Abhishek Soni 则用行动告诉我们,开辟机械进修模型,JavaScript 也可以。

JavaScript?我不是应当应用 Python 吗?甚至 Scikit-learn 在 JavaScript 上都不工作。

这是可能的,实际上,连我本身都惊奇于开辟者对此忽视的立场。就 Scikit-learn 而言,Javascript 的开辟者事实上已经推出了实用的看维它会在本文中有所说起。那么,让我们看看 Javascript 在机械进修上可以或许做什么吧。

根据人工智能前驱 Arthur Samuel 的说法,机械进修为计算机供给了无需明白编程的进修才能。换句话说,它使得计算机可以或许自我进修并履行精确的指令,无需仁攀类供给全部指导。

谷歌已经把本身移动优先的策略转换到人工智能优先良久了。

为什么 JavaScript 在机械进修界未被说起过?

  • 慢(真的假的?)
  • 矩阵操作很艰苦(这里有库,比如 math.js)
  • 仅用于 Web 开辟(然而这里还有 Node.js)
  • 机械进修库平日是在 Python 上的(还好,JS 的开辟者人数也不少)

在 JavaScript 中有一些可供应用的预制库,个中包含一些机械进修算法,如线性回归、SVM、朴实贝叶斯等等,以下是个中的一部分。

  • brain.js(神经收集)
  • Synaptic(神经收集)
  • Natural(天然说话处理)
  • ConvNetJS(卷积神经收集)
  • mljs(一组具有多种功能的子库)

起首,我们将应用 mljs 回归库来进行一些线性回归操作。

function performRegression() {    regressionModel = new SLR(X, y); // Train the model on training data    console.log(regressionModel.toString(3));    predictOutput();}

参考代码:https://github.com/abhisheksoni27/machine-learning-with-js

1. 安装库

$ npm install ml-regression csvtojson

Linear Regression

ml-regression 正如其名,负责机械进修的线性回归。

csvtojson 是一个用于 node.js 的快速 CSV 解析器,它许可加载 CSV 数据文件并将其转换为 JSON。

2. 初始化并加载数据

下载数据文件(.csv),并将其参加你的项目。

链接:http://www-bcf.usc.edu/~gareth/ISL/Advertising.csv

如不雅你已经初始化了一个空的 npm 项目,打开 index.js,输入以下代码。

const ml = require('ml-regression');const csv = require('csvtojson');const SLR = ml.SLR; // Simple Linear Regressionconst csvFilePath = 'advertising.csv'; // Datalet csvData = http://mdsa.51cto.com/art/201707/[], // parsed Data    X = [], // Input    y = []; // Outputlet regressionModel;

我把文件放在了项目标根目次下,如不雅你想放在其他处所,请记得更新 csvFilePath。

如今我们应用 csvtojson 的 fromFile 办法加载数据文件:

图1

$ yarn add ml-regression csvtojson
csv()    .fromFile(csvFilePath)    .on('json', (jsonObj) => {        csvData.push(jsonObj);    })    .on('done', () => {        dressData(); // To get data points from JSON Objects        performRegression();     });

3. 打包数据,预备履行

JSON 对象被存储在 csvData 中,我们还须要输入数据点数组和输出数据点。我们经由过程一个填充 X 和 Y 变量的 dressData 函数来运行数据。

function dressData() {    /**     * One row of the data object looks like:     * {     *   TV: "10",     *   Radio: "100",     *   Newspaper: "20",     *   "Sales": "1000"     * }     *     * Hence, while adding the data points,     * we need to parse the String value as a Float.     */    csvData.forEach((row) => {        X.push(f(row.Radio));        y.push(f(row.Sales));    });}function f(s) {    return parseFloat(s);}

4. 练习模型开端猜测

数据已经打包完毕,是时刻练习我们的模型了。

为此,我们须要写一个 performRegression 函数:

performRegression 函数有一个办法 toString,它为浮点输出获取一个名为 precision 的参数。predictOutput 函数能让你输入数值,然后将模型的输出传到控制台。它是如许的(留意,我应用的是 Node.js 的 readline 对象):

function predictOutput() {    rl.question('Enter input X for prediction (Press CTRL+C to exit) : ', (answer) => {        console.log(`At X = ${answer}, y =  ${regressionModel.predict(parseFloat(answer))}`);        predictOutput();    });}

以下是为了增长浏览用户的代码

const readline = require('readline'); // For user prompt to allow predictionsconst rl = readline.createInterface({    input: process.stdin,     output: process.stdout});

5. 大年夜功告成!

遵守以上步调,你的 index.js 应当是如许:

const ml = require('ml-regression');const csv = require('csvtojson');const SLR = ml.SLR; // Simple Linear Regressionconst csvFilePath = 'advertising.csv'; // Datalet csvData = http://mdsa.51cto.com/art/201707/[], // parsed Data    X = [], // Input    y = []; // Outputlet regressionModel;const readline = require('readline'); // For user prompt to allow predictionsconst rl = readline.createInterface({    input: process.stdin,     output: process.stdout});csv()    .fromFile(csvFilePath)    .on('json', (jsonObj) => {        csvData.push(jsonObj);    })    .on('done', () => {        dressData(); // To get data points from JSON Objects        performRegression();     });function performRegression() {    regressionModel = new SLR(X, y); // Train the model on training data    console.log(regressionModel.toString(3));    predictOutput();}function dressData() {    /**     * One row of the data object looks like:     * {     *   TV: "10",     *   Radio: "100",     *   Newspaper: "20",     *   "Sales": "1000"     * }     *     * Hence, while adding the data points,     * we need to parse the String value as a Float.     */    csvData.forEach((row) => {        X.push(f(row.Radio));        y.push(f(row.Sales));    });}function f(s) {    return parseFloat(s);}function predictOutput() {    rl.question('Enter input X for prediction (Press CTRL+C to exit) : ', (answer) => {        console.log(`At X = ${answer}, y =  ${regressionModel.predict(parseFloat(answer))}`);        predictOutput();    });}	
				
			

  推荐阅读

  《安徽省“十三五”信息化发展规划》政策解读

近日,省当局印发了《安徽省“十三五”信息化成长筹划》(皖政〔2017〕86号,以下简称《筹划》),现就有关政策解读如下。一、《筹划》出台的背景当前,我国信息化成长面对的情况、前提和内涵正产生深刻变更>>>详细阅读


本文标题:如何使用JavaScript构建机器学习模型

地址:http://www.17bianji.com/lsqh/36088.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)