成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

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

gitmilk / 2505人閱讀

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

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

原文: 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í)庫(kù))不能使用Python吧?

嗯,我并沒(méi)有開(kāi)玩笑...

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

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

太慢(幻覺(jué)?)

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

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

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

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

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

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

Natural (自然語(yǔ)言處理)

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

mljs (一系列AI庫(kù))

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

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

我們將使用mljs來(lái)實(shí)現(xiàn)線性回歸,源代碼在GitHub倉(cāng)庫(kù): 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)目,請(qǐ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對(duì)象數(shù)組,我們需要使用dressData函數(shù)將其轉(zhuǎn)化為兩個(gè)數(shù)據(jù)向量xy:

// 將JSON數(shù)據(jù)轉(zhuǎn)換為向量數(shù)據(jù)
function dressData() {
    /**
     * 原始數(shù)據(jù)中每一行為JSON對(duì)象
     * 因此需要將數(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ù)測(cè)

編寫(xiě)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ù)測(cè)值。

// 接收輸入數(shù)據(jù),然后輸出預(yù)測(cè)值
function predictOutput() {
    rl.question("請(qǐng)輸入X用于預(yù)測(cè)(輸入CTRL+C退出) : ", (answer) => {
        console.log(`當(dāng)X = ${answer}時(shí), 預(yù)測(cè)值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對(duì)象
     * 因此需要將數(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ù)測(cè)值
function predictOutput() {
    rl.question("請(qǐng)輸入X用于預(yù)測(cè)(輸入CTRL+C退出) : ", (answer) => {
        console.log(`當(dāng)X = ${answer}時(shí), 預(yù)測(cè)值y = ${regressionModel.predict(parseFloat(answer))}`);
        predictOutput();
    });
}

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

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

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

f(x) = 0.202 * x + 9.31

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/87130.html

相關(guān)文章

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

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

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

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

    huhud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<