91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript機器學習之線性回歸

發布時間:2020-07-30 05:40:21 來源:網絡 閱讀:140 作者:Fundebug 欄目:web開發

譯者按: 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
  • ml-regression模塊提供了一些回歸算法
  • csvtojson模塊用于將CSV數據轉換為JSON。

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

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了7億+錯誤事件,得到了Google、360、金山軟件、百姓網等眾多知名用戶的認可。歡迎免費試用!

JavaScript機器學習之線性回歸

版權聲明

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平谷区| 丹江口市| 青海省| 武鸣县| 银川市| 杭州市| 东明县| 乐清市| 交城县| 怀宁县| 乐山市| 临朐县| 富源县| 蚌埠市| 洛阳市| 容城县| 资溪县| 平谷区| 襄汾县| 齐河县| 崇信县| 土默特右旗| 乐亭县| 海林市| 安溪县| 集安市| 嵊州市| 崇文区| 昌黎县| 沙河市| 卓尼县| 沁阳市| 兰溪市| 汉沽区| 临汾市| 赤水市| 青阳县| 庆城县| 新余市| 新平| 南平市|