请选择 进入手机版 | 继续访问电脑版
记得收藏【国际动画教程网】,赶快注册吧!
注册

合作站点账号登陆

QQ登录

只需一步,快速开始

扫一扫,访问微社区

快捷导航
查看: 51585|回复: 0
收起左侧

JavaScript机器学习之线性回归

[复制链接]
发表于 2017-7-4 21:00:50 | 显示全部楼层 |阅读模式

原文: Machine Learning with JavaScript : Part 1

译者: Fundebug

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

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

嗯,我并没有开玩笑…

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

JavaScript不能用于机器学习?

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

JavaScript机器学习库

  1. brain.js (神经网络)
  2. Synaptic (神经网络)
  3. Natural (自然语言处理)
  4. ConvNetJS (卷积神经网络)
  5. mljs (一系列AI库)
  6. Neataptic (神经网络)
  7. Webdnn (深度学习)

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

1. 安装模块

$ yarn add ml-regression csvtojson

或者使用 npm

$ npm install ml-regression csvtojson

 

2. 初始化并导入数据

下载.csv数据

假设你已经初始化了一个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函数将其转化为两个数据向量xy:

// 将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();

}

regressionModeltoString方法可以指定参数的精确度。

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

// 接收输入数据,然后输出预测值

function predictOutput() {

    rl.question("请输入X用于预测(输入CTRL+C退出) : ", (answer) => {
    
    console.log('当X = ${answer}时, 预测值y = ${regressionModel.predict(parseFloat(answer))}');
    
    predictOutput();
    
    });

}

 

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

 

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

 

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




上一篇:15 个有趣的 JS 和 CSS 库
下一篇:使用JavaScript和MQTT开发物联网应用
一起共享资源,共建精品资源平台。记得一定要收藏我们网站。www.gjdhjc.com ||||| 还有我们的网址导航:www.58q8.com【链接失效可以留言看到第一时间补帖,如果懒的回复我也是没办法了】
快速回复 返回顶部 返回列表