本文共 3816 字,大约阅读时间需要 12 分钟。
译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师。
原文:
译者:
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习
使用JavaScript做机器学习?不是应该用Python吗?是不是我疯了才用JavaScript做如此繁重的计算?难道我不用Python和R是为了装逼?(Python机器学习库)不能使用Python吧?
嗯,我并没有开玩笑...
其实呢,类似于Python的,JavaScript开发者也开发了一些机器学习库,我打算用一下它们。
我们将使用来实现线性回归,源代码在GitHub仓库: 。下面是详细步骤:
$ yarn add ml-regression csvtojson
或者使用 npm
$ npm install ml-regression csvtojson
下载。
假设你已经初始化了一个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(); });
导入的数据为json对象数组,我们需要使用****dressData****函数将其转化为两个数据向量****x****和****y****:
// 将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);}
编写****performRegression****函数:
// 使用线性回归算法训练数据function performRegression() { regressionModel = new SLR(X, y); console.log(regressionModel.toString(3)); predictOutput();}
****regressionModel****的****toString****方法可以指定参数的精确度。
****predictOutput****函数可以根据输入值输出预测值。
// 接收输入数据,然后输出预测值function predictOutput() { rl.question("请输入X用于预测(输入CTRL+C退出) : ", (answer) => { console.log(`当X = ${answer}时, 预测值y = ${regressionModel.predict(parseFloat(answer))}`); predictOutput(); });}
****predictOutput****函数使用了Node.js的模块:
const readline = require("readline");const rl = readline.createInterface({ input: process.stdin, output: process.stdout});
完整的程序****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
感兴趣的话,请持续关注 ,我将使用JavaScript实现各种机器学习算法。
欢迎加入的********全栈****BUG****监控交流群****: 622902485****。
版权声明:
转载时请注明作者以及本文地址:****