博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript机器学习之线性回归
阅读量:6931 次
发布时间:2019-06-27

本文共 3816 字,大约阅读时间需要 12 分钟。

译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师。

原文:

译者:

为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习

使用JavaScript做机器学习?不是应该用Python吗?是不是我疯了才用JavaScript做如此繁重的计算?难道我不用Python和R是为了装逼?(Python机器学习库)不能使用Python吧?

嗯,我并没有开玩笑...

其实呢,类似于Python的,JavaScript开发者也开发了一些机器学习库,我打算用一下它们。

JavaScript不能用于机器学习?

  1. 太慢(幻觉?)
  2. 矩阵操作太难(有函数库啊,比如****math.js****)
  3. JavaScript只能用于前端开发(Node.js开发者笑了)
  4. 机器学习库都是Python(JS开发者)

JavaScript机器学习库

  1. (神经网络)
  2. (神经网络)
  3. (自然语言处理)
  4. (卷积神经网络)
  5. (一系列AI库)
  6. (神经网络)
  7. (深度学习)

我们将使用来实现线性回归,源代码在GitHub仓库: 。下面是详细步骤:

1. 安装模块

$ yarn add ml-regression csvtojson

或者使用 npm

$ npm install ml-regression csvtojson
  • 模块提供了一些********回归算法********
  • 模块用于将CSV数据转换为JSON。

2. 初始化并导入数据

下载。

假设你已经初始化了一个NPM项目,请在****index.js****中输入以下内容:

const ml = require("ml-regression");const csv = require("csvtojson");const SLR = ml.SLR; // 线性回归const csvFilePath = "advertising.csv"; // 训练数据let csvData = [],     X = [],     y = []; let regressionModel;

使用csvtojson模块的fromFile方法加载数据:

csv()    .fromFile(csvFilePath)    .on("json", (jsonObj) => {        csvData.push(jsonObj);    })    .on("done", () => {        dressData();         performRegression();     });

3. 转换数据

导入的数据为json对象数组,我们需要使用****dressData****函数将其转化为两个数据向量****x****和****y****:

// 将JSON数据转换为向量数据function dressData() {    /**     * 原始数据中每一行为JSON对象     * 因此需要将数据转换为向量数据,并将字符串解析为浮点数     * {     *   TV: "10",     *   Radio: "100",     *   Newspaper: "20",     *   "Sales": "1000"     * }     */    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);    console.log(regressionModel.toString(3));    predictOutput();}

****regressionModel****的****toString****方法可以指定参数的精确度。

****predictOutput****函数可以根据输入值输出预测值。

// 接收输入数据,然后输出预测值function predictOutput() {    rl.question("请输入X用于预测(输入CTRL+C退出) : ", (answer) => {        console.log(`当X = ${answer}时, 预测值y = ${regressionModel.predict(parseFloat(answer))}`);        predictOutput();    });}

****predictOutput****函数使用了Node.js的模块:

const readline = require("readline");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; // 线性回归const csvFilePath = "advertising.csv"; // 训练数据let csvData = [],     X = [],     y = []; let regressionModel;const readline = require("readline");const rl = readline.createInterface({    input: process.stdin,     output: process.stdout});csv()    .fromFile(csvFilePath)    .on("json", (jsonObj) => {        csvData.push(jsonObj);    })    .on("done", () => {        dressData();         performRegression();     });// 使用线性回归算法训练数据function performRegression() {    regressionModel = new SLR(X, y);    console.log(regressionModel.toString(3));    predictOutput();}// 将JSON数据转换为向量数据function dressData() {    /**     * 原始数据中每一行为JSON对象     * 因此需要将数据转换为向量数据,并将字符串解析为浮点数     * {     *   TV: "10",     *   Radio: "100",     *   Newspaper: "20",     *   "Sales": "1000"     * }     */    csvData.forEach((row) => {        X.push(f(row.Radio));        y.push(f(row.Sales));    });}// 将字符串解析为浮点数function f(s) {    return parseFloat(s);}// 接收输入数据,然后输出预测值function predictOutput() {    rl.question("请输入X用于预测(输入CTRL+C退出) : ", (answer) => {        console.log(`当X = ${answer}时, 预测值y = ${regressionModel.predict(parseFloat(answer))}`);        predictOutput();    });}

执行 node index.js ,则输出如下:

$ node index.js
f(x) = 0.202 * x + 9.31请输入X用于预测(输入CTRL+C退出) : 151.5当X = 151.5时, 预测值y =  39.98974927911285请输入X用于预测(输入CTRL+C退出) :

恭喜!你已经使用JavaScript训练了一个线性回归模型,如下:

f(x) = 0.202 * x + 9.31

感兴趣的话,请持续关注 ,我将使用JavaScript实现各种机器学习算法。

欢迎加入的********全栈****BUG****监控交流群****: 622902485****。

img_ea207c7ffd843f2e46ed4001365c97a8.jpe

版权声明:

转载时请注明作者以及本文地址:**
**

你可能感兴趣的文章
DHCP
查看>>
shell 执行curl传post 数据中的变量
查看>>
Zookeeper工作原理
查看>>
我的友情链接
查看>>
Point-to-Point (p2p) GRE over IPsec
查看>>
分布式助手Zookeeper(三)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
探索MySQL高可用架构之MHA(6)
查看>>
zabbix graph name marco
查看>>
EIGRP中路由重定向与过滤路由
查看>>
vim 设置
查看>>
Linux学习-13-学习ACL的使用-2
查看>>
查看 yum 命令安装的软件路径
查看>>
本人新书推荐《linux运维之道》
查看>>
阿里云OS初探(1)-- 联系人导入
查看>>
Java设计模式--工厂方法模式
查看>>
linux运维必会MySQL企业面试题近百个
查看>>
【二】初识Python基础
查看>>