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

来源:互联网 发布:小号软件 编辑:程序博客网 时间:2024/06/18 16:30

本文和大家分享的主要是使用javascript构建机器学习模型相关内容,一起来看看吧,希望对大家学习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 回归库来进行一些线性回归操作。

  1. 安装库

  $ npm install ml-regression csvtojson

  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 Regression

  const csvFilePath = 'advertising.csv'; // Data

  let csvData = [], // parsed Data

  X = [], // Input

  y = []; // Output

  我把文件放在了项目的根目录下,如果你想放在其他地方,请记得更新 csvFilePath

  现在我们使用 csvtojson 的 fromFile 方法加载数据文件:

  csv()

  .fromFile(csvFilePath)

  .on('json', (jsonObj) => {

  csvData.push(jsonObj);

  })

  .on('done', () => {

  dressData(); // To get data points from JSON Objects

  performRegression();

  });

  3. 打包数据,准备执行

  JSON 对象被存储在 csvData 中,我们还需要输入数据点数组和输出数据点。我们通过一个填充 和 变量的 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 函数:

  function performRegression() {

  regressionModel = new SLR(X, y); // Train the model on training data

  console.log(regressionModel.toString(3));

  predictOutput();

  }

  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 predictions

  const 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 Regression

  const csvFilePath = 'advertising.csv'; // Data

  let csvData = [], // parsed Data

  X = [], // Input

  y = []; // Output

  let regressionModel;

  const readline = require('readline'); // For user prompt to allow predictions

  const 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();

  });

  }

  到你的终端上运行 node index.js,得到的输出会是这样:

  $ node index.js

  f(x) = 0.202 * x + 9.31

  Enter input X for prediction (Press CTRL+C to exit) : 151.5

  At X = 151.5, y = 39.98974927911285

  Enter input X for prediction (Press CTRL+C to exit) :

 

 

来源:网络


原创粉丝点击