真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript機(jī)器學(xué)習(xí)之線性回歸

譯者按:AI時(shí)代,不會(huì)機(jī)器學(xué)習(xí)的JavaScript開發(fā)者不是好的前端工程師。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、上杭網(wǎng)站維護(hù)、網(wǎng)站推廣。

  • 原文: Machine Learning with JavaScript : Part 1
  • 譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權(quán)歸原作者所有,翻譯僅用于學(xué)習(xí)。

使用JavaScript做機(jī)器學(xué)習(xí)?不是應(yīng)該用Python嗎?是不是我瘋了才用JavaScript做如此繁重的計(jì)算?難道我不用Python和R是為了裝逼?scikit-learn(Python機(jī)器學(xué)習(xí)庫)不能使用Python吧?

嗯,我并沒有開玩笑...

其實(shí)呢,類似于Python的scikit-learn,JavaScript開發(fā)者也開發(fā)了一些機(jī)器學(xué)習(xí)庫,我打算用一下它們。

JavaScript不能用于機(jī)器學(xué)習(xí)?

  1. 太慢(幻覺?)
  2. 矩陣操作太難(有函數(shù)庫啊,比如math.js
  3. JavaScript只能用于前端開發(fā)(Node.js開發(fā)者笑了)
  4. 機(jī)器學(xué)習(xí)庫都是Python(JS開發(fā)者)

JavaScript機(jī)器學(xué)習(xí)庫

  1. brain.js (神經(jīng)網(wǎng)絡(luò))
  2. Synaptic (神經(jīng)網(wǎng)絡(luò))
  3. Natural (自然語言處理)
  4. ConvNetJS (卷積神經(jīng)網(wǎng)絡(luò))
  5. mljs (一系列AI庫)
  6. Neataptic (神經(jīng)網(wǎng)絡(luò))
  7. Webdnn (深度學(xué)習(xí))

我們將使用mljs來實(shí)現(xiàn)線性回歸,源代碼在GitHub倉庫: machine-learning-with-js。下面是詳細(xì)步驟:

1. 安裝模塊

$ yarn add ml-regression csvtojson

或者使用 npm

$ npm install ml-regression csvtojson
  • ml-regression模塊提供了一些回歸算法
  • csvtojson模塊用于將CSV數(shù)據(jù)轉(zhuǎn)換為JSON。

2. 初始化并導(dǎo)入數(shù)據(jù)

下載.csv數(shù)據(jù)。

假設(shè)你已經(jīng)初始化了一個(gè)NPM項(xiàng)目,請?jiān)?strong>index.js中輸入以下內(nèi)容:

const ml = require("ml-regression");
const csv = require("csvtojson");
const SLR = ml.SLR; // 線性回歸

const csvFilePath = "advertising.csv"; // 訓(xùn)練數(shù)據(jù)
let csvData = [], 
    X = [], 
    y = []; 

let regressionModel;

使用csvtojson模塊的fromFile方法加載數(shù)據(jù):

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

3. 轉(zhuǎn)換數(shù)據(jù)

導(dǎo)入的數(shù)據(jù)為json對象數(shù)組,我們需要使用dressData函數(shù)將其轉(zhuǎn)化為兩個(gè)數(shù)據(jù)向量xy:

// 將JSON數(shù)據(jù)轉(zhuǎn)換為向量數(shù)據(jù)
function dressData() {
    /**
     * 原始數(shù)據(jù)中每一行為JSON對象
     * 因此需要將數(shù)據(jù)轉(zhuǎn)換為向量數(shù)據(jù),并將字符串解析為浮點(diǎn)數(shù)
     * {
     *   TV: "10",
     *   Radio: "100",
     *   Newspaper: "20",
     *   "Sales": "1000"
     * }
     */
    csvData.forEach((row) => {
        X.push(f(row.Radio));
        y.push(f(row.Sales));
    });
}

// 將字符串解析為浮點(diǎn)數(shù)
function f(s) {
    return parseFloat(s);
}

4. 訓(xùn)練數(shù)據(jù)并預(yù)測

編寫performRegression函數(shù):

// 使用線性回歸算法訓(xùn)練數(shù)據(jù)
function performRegression() {
    regressionModel = new SLR(X, y);
    console.log(regressionModel.toString(3));
    predictOutput();
}

regressionModeltoString方法可以指定參數(shù)的精確度。

predictOutput函數(shù)可以根據(jù)輸入值輸出預(yù)測值。

// 接收輸入數(shù)據(jù),然后輸出預(yù)測值
function predictOutput() {
    rl.question("請輸入X用于預(yù)測(輸入CTRL+C退出) : ", (answer) => {
        console.log(`當(dāng)X = ${answer}時(shí), 預(yù)測值y = ${regressionModel.predict(parseFloat(answer))}`);
        predictOutput();
    });
}

predictOutput函數(shù)使用了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"; // 訓(xùn)練數(shù)據(jù)
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(); 
    });

// 使用線性回歸算法訓(xùn)練數(shù)據(jù)
function performRegression() {
    regressionModel = new SLR(X, y);
    console.log(regressionModel.toString(3));
    predictOutput();
}

// 將JSON數(shù)據(jù)轉(zhuǎn)換為向量數(shù)據(jù)
function dressData() {
    /**
     * 原始數(shù)據(jù)中每一行為JSON對象
     * 因此需要將數(shù)據(jù)轉(zhuǎn)換為向量數(shù)據(jù),并將字符串解析為浮點(diǎn)數(shù)
     * {
     *   TV: "10",
     *   Radio: "100",
     *   Newspaper: "20",
     *   "Sales": "1000"
     * }
     */
    csvData.forEach((row) => {
        X.push(f(row.Radio));
        y.push(f(row.Sales));
    });
}

// 將字符串解析為浮點(diǎn)數(shù)
function f(s) {
    return parseFloat(s);
}

// 接收輸入數(shù)據(jù),然后輸出預(yù)測值
function predictOutput() {
    rl.question("請輸入X用于預(yù)測(輸入CTRL+C退出) : ", (answer) => {
        console.log(`當(dāng)X = ${answer}時(shí), 預(yù)測值y = ${regressionModel.predict(parseFloat(answer))}`);
        predictOutput();
    });
}

執(zhí)行 node index.js ,則輸出如下:

$ node index.js
f(x) = 0.202 * x + 9.31
請輸入X用于預(yù)測(輸入CTRL+C退出) : 151.5
當(dāng)X = 151.5時(shí), 預(yù)測值y =  39.98974927911285
請輸入X用于預(yù)測(輸入CTRL+C退出) :

恭喜!你已經(jīng)使用JavaScript訓(xùn)練了一個(gè)線性回歸模型,如下:

f(x) = 0.202 * x + 9.31

感興趣的話,請持續(xù)關(guān)注 machine-learning-with-js,我將使用JavaScript實(shí)現(xiàn)各種機(jī)器學(xué)習(xí)算法。

關(guān)于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實(shí)時(shí)BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計(jì)處理了7億+錯(cuò)誤事件,得到了Google、360、金山軟件、百姓網(wǎng)等眾多知名用戶的認(rèn)可。歡迎免費(fèi)試用!

JavaScript機(jī)器學(xué)習(xí)之線性回歸

版權(quán)聲明

轉(zhuǎn)載時(shí)請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/07/03/javascript-machine-learning-regression/


當(dāng)前題目:JavaScript機(jī)器學(xué)習(xí)之線性回歸
標(biāo)題路徑:http://weahome.cn/article/ghjich.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部