JavaScript机器学习之线性回归
译者按: AI时代,不会机器学习的JavaScript开发者不是好的前端工程师。
原文: Machine Learning with JavaScript : Part 1
译者: Fundebug
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习
使用JavaScript做机器学习?不是应该用Python吗?是不是我疯了才用JavaScript做如此繁重的计算?难道我不用Python和R是为了装逼?scikit-learn(Python机器学习库)不能使用Python吧?
嗯,我并没有开玩笑…
其实呢,类似于Python的scikit-learn,JavaScript开发者也开发了一些机器学习库,我打算用一下它们。
JavaScript不能用于机器学习?
- 太慢(幻觉?)
- 矩阵操作太难(有函数库啊,比如math.js)
- JavaScript只能用于前端开发(Node.js开发者笑了)
- 机器学习库都是Python(JS开发者)
JavaScript机器学习库
- brain.js (神经网络)
- Synaptic (神经网络)
- Natural (自然语言处理)
- ConvNetJS (卷积神经网络)
- mljs (一系列AI库)
- Neataptic (神经网络)
- 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函数将其转化为两个数据向量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);
}
|
4. 训练数据并预测
编写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的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、金山软件、百姓网等众多知名用户的认可。欢迎免费试用!
版权声明:
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/07/03/javascript-machine-learning-regression/
JavaScript机器学习之线性回归的更多相关文章
- 2019年11个javascript机器学习库
Credits: aijs.rocks 虽然python或r编程语言有一个相对容易的学习曲线,但是Web开发人员更喜欢在他们舒适的javascript区域内做事情.目前来看,node.js已经开始向每 ...
- 机器学习之线性回归(纯python实现)][转]
本文转载自:https://juejin.im/post/5a924df16fb9a0634514d6e1 机器学习之线性回归(纯python实现) 线性回归是机器学习中最基本的一个算法,大部分算法都 ...
- 机器学习-review-1 线性回归
发现隔一段时间,忘记了好多知识点,这里认为重要的知识点记录下来,作为笔记,方便以后回顾. From “李航- 统计学习方法” 统计学习方法的三要素: 模型,策略, 算法 对于线性回归 -------- ...
- Andrew Ng机器学习入门——线性回归
本人从2017年起,开始涉猎机器学习.作为入门,首先学习的是斯坦福大学Andrew Ng(吴恩达)教授的Coursera课程 2 单变量线性回归 线性回归属于监督学习(Supervise Learni ...
- 机器学习---最小二乘线性回归模型的5个基本假设(Machine Learning Least Squares Linear Regression Assumptions)
在之前的文章<机器学习---线性回归(Machine Learning Linear Regression)>中说到,使用最小二乘回归模型需要满足一些假设条件.但是这些假设条件却往往是人们 ...
- JavaScript机器学习之KNN算法
译者按: 机器学习原来很简单啊,不妨动手试试! 原文: Machine Learning with JavaScript : Part 2 译者: Fundebug 为了保证可读性,本文采用意译而非直 ...
- 机器学习之线性回归---logistic回归---softmax回归
在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签 可以取两个以上的值. Softmax回归模型对于诸如MNIST手写数字分类等问题 ...
- 【机器学习】线性回归python实现
线性回归原理介绍 线性回归python实现 线性回归sklearn实现 这里使用python实现线性回归,没有使用sklearn等机器学习框架,目的是帮助理解算法的原理. 写了三个例子,分别是单变量的 ...
- 机器学习:线性回归法(Linear Regression)
# 注:使用线性回归算法的前提是,假设数据存在线性关系,如果最后求得的准确度R < 0,则说明很可能数据间不存在任何线性关系(也可能是算法中间出现错误),此时就要检查算法或者考虑使用其它算法: ...
随机推荐
- 「ZJOI2016」解题报告
「ZJOI2016」解题报告 我大浙的省选题真是超级神仙--这套已经算是比较可做的了. 「ZJOI2016」旅行者 神仙分治题. 对于一个矩形,每次我们从最长边切开,最短边不会超过 \(\sqrt{n ...
- Android JNI 学习(十):String Operations Api & Other Apis
一.String Operations(字符串操作) 1. NewString jstring NewString(JNIEnv *env, const jchar *unicodeChars, js ...
- 编译u-boot问题总结
问题一: /usr/local/JreTool/opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-ld: warning: cr ...
- Tools - 电子书
搜索电子书 电子书搜索:https://www.jiumodiary.com/ InfoQ-迷你书 InfoQ-迷你书:http://www.infoq.com/cn/minibooks/ 免费电子书 ...
- CSS3 Gradient 渐变还能这么玩
浏览器支持两种类型的渐变:线性渐变 (linear-gradient),径向渐变 (radial-gradient) 渐变在 CSS 中属于一种 Image 类型,可以结合 background-im ...
- c# 导入导出excel方法封装
在很多项目中,都会使用到文件的上传下载等,为了方便,封装了一个帮助类,每次直接拿过来使用就可以了,下面是封装的类和使用方法. using Common.AttributeHelper; using N ...
- win 10 升级远程连接服务器 要求的函数不受支持
首先展示错误信息: win10更新系统后,之前连接的服务器都连接不上了,应该用一下方法解决: 运行 gpedit.msc,打开本地组策略:计算机配置>管理模板>系统>凭据分配> ...
- strace命令用法
-tt 在每行输出的前面,显示毫秒级别的时间 -T 显示每次系统调用所花费的时间 -v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来. -f 跟踪目标进程,以及目标进程创建的所有子进程 ...
- 网站 HTTP 升级 HTTPS 完全配置手册
网站 HTTP 升级 HTTPS 完全配置手册 今天,所有使用Google Chrome稳定版的用户迎来了v68正式版首个版本的发布,详细版本号为v68.0.3440.75,上一个正式版v67.0.3 ...
- PHP取得json前面有乱码(去除文件头部BOM)
curl请求接口时,返回结果如下: {} 想把json转换成数组或者对象,但是用json_decode返回是空的,然后用var_dump打印了一下返回结果,发现结果如下: ) 发现前面多了两个字符,因 ...