JavaScript机械进修之线性回归

译者按: AI时期,不会机械进修的JavaScript开辟者不是好的前端工程师。

原文: 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完成种种机械进修算法。

迎接到场我们Fundebug全栈BUG监控交换群: 622902485

《JavaScript机械进修之线性回归》

版权声明:
转载时请说明作者Fundebug以及本文地点:
https://blog.fundebug.com/2017/07/03/javascript-machine-learning-regression/

    原文作者:Fundebug
    原文地址: https://segmentfault.com/a/1190000010168716
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞