成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

gitmilk / 2454人閱讀

摘要:不能用于機(jī)器學(xué)習(xí)太慢幻覺矩陣操作太難有函數(shù)庫啊,比如只能用于前端開發(fā)開發(fā)者笑了機(jī)器學(xué)習(xí)庫都是開發(fā)者機(jī)器學(xué)習(xí)庫神經(jīng)網(wǎng)絡(luò)神經(jīng)網(wǎng)絡(luò)自然語言處理卷積神經(jīng)網(wǎng)絡(luò)一系列庫神經(jīng)網(wǎng)絡(luò)深度學(xué)習(xí)我們將使用來實現(xiàn)線性回歸,源代碼在倉庫。

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

原文: Machine Learning with JavaScript : Part 1

譯者: Fundebug

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

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

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

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

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

太慢(幻覺?)

矩陣操作太難(有函數(shù)庫啊,比如math.js

JavaScript只能用于前端開發(fā)(Node.js開發(fā)者笑了)

機(jī)器學(xué)習(xí)庫都是Python(JS開發(fā)者)

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

brain.js (神經(jīng)網(wǎng)絡(luò))

Synaptic (神經(jīng)網(wǎng)絡(luò))

Natural (自然語言處理)

ConvNetJS (卷積神經(jīng)網(wǎng)絡(luò))

mljs (一系列AI庫)

Neataptic (神經(jīng)網(wǎng)絡(luò))

Webdnn (深度學(xué)習(xí))

我們將使用mljs來實現(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)初始化了一個NPM項目,請在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)化為兩個數(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}時, 預(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}時, 預(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時, 預(yù)測值y =  39.98974927911285
請輸入X用于預(yù)測(輸入CTRL+C退出) :

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

f(x) = 0.202 * x + 9.31

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

歡迎加入我們Fundebug的全棧BUG監(jiān)控交流群: 622902485

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87130.html

相關(guān)文章

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

    摘要:在統(tǒng)計學(xué)中,線性回歸是利用稱為線性回歸方程的最小二乘函數(shù)對一個或多個自變量和因變量之間關(guān)系進(jìn)行建模的一種回歸分析維基百科。對當(dāng)前示例作圖表示衡量線性回歸法的指標(biāo)誤差一個訓(xùn)練后的模型通常都會使用測試數(shù)據(jù)集測試該模型的準(zhǔn)確性。 在統(tǒng)計學(xué)中,線性回歸(Linear regression)是利用稱為線性回歸方程的最小二乘函數(shù)對一個或多個自變量和因變量之間關(guān)系進(jìn)行建模的一種回歸分析維基百科。 簡...

    Jonathan Shieber 評論0 收藏0
  • 機(jī)器學(xué)習(xí)之多項式回歸與模型泛化

    摘要:還提供了,將多項式特征數(shù)據(jù)歸一化和線性回歸組合在了一起,大大方便的編程的過程。在機(jī)器學(xué)習(xí)算法中,主要的挑戰(zhàn)來自方差,解決的方法主要有降低模型復(fù)雜度降維增加樣本數(shù)使用驗證集模型正則化。 多項式回歸 多項式回歸使用線性回歸的基本思路 非線性曲線如圖: showImg(https://segmentfault.com/img/bVbkn4q?w=372&h=252); 假設(shè)曲線表達(dá)式為:$y...

    huhud 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<