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,则说明很可能数据间不存在任何线性关系(也可能是算法中间出现错误),此时就要检查算法或者考虑使用其它算法: ...
随机推荐
- 【高速接口-RapidIO】4、Xilinx RapidIO核详解
一.RapidIO核概述 RapidIO核的设计标准来源于RapidIO Interconnect Specification rev2.2,它支持1x,2x和4x三种模式,每通道的速度支持1.25G ...
- 利用python完成大学刷课(从0到完成的思路)
i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学 ...
- Android WebView 实现网页缩放
需要对WebView设置的内容如下: //缩放开关,设置此属性,仅支持双击缩放,不支持触摸缩放 mWebView.getSettings().setSupportZoom(true); //设置是否可 ...
- 吴恩达机器学习笔记31-梯度检验(Gradient Checking)
当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在一些不容易察觉的错误,意味着,虽然代价看上去在不断减小,但最终的结果可能并不是最优解.为了避免这样的问题,我们采取一种叫做梯度的 ...
- ruby-操作mysql
ruby操作mysql数据库 以centos7.2为实验环境 Table of Contents 使用DBI访问Mysql 使用Mysql2访问Mysql DBI 安装DBI驱动 很多同学在公司是没有 ...
- java中的全局变量如何实现?ThreadLocal~
全局变量就是不管你在哪里,都能够直接引用的变量,还不用担心各种问题.每个语言都有自己的全局变量,我想! 一般地,面向过程的语言当中,可能就是一个声明在最前面的变量,后面的代码直接引用,就成了全局变量! ...
- deepin安装docker
deepin在debian的基础上进行了一些修改,因此导致按照debian的安装指引是很难安装上docker的. 最近想学习docker,故尝试了安装docker(个人使用:deepin15.7桌面版 ...
- ssh免密码快速登录配置
使用ssh登录服务器的时候,需要输入ip地址.端口.用户名.密码等信息,比较麻烦,容易输错.还好,通过客户端和服务器的配置参数,可实现免密码快速登录.服务器可通过保存客户端的公钥,用于验证客户端的身份 ...
- [原创]K8 Cscan 3.6大型内网渗透自定义扫描器
前言:无论内网还是外网渗透信息收集都是非常关键,信息收集越多越准确渗透的成功率就越高但成功率还受到漏洞影响,漏洞受时效性影响,对于大型内网扫描速度直接影响着成功率漏洞时效性1-2天,扫描内网或外网需1 ...
- java设计模式之——工厂模式
对于java的设计模式,我还是第一次认认真真的总结,以前用的时候都不曾留意细节,现在回头再看只知道该怎么设计,却忘记当时为嘛要用它了, 所以这次就做一个demo来再次复习总结一下,希望从中能学到新体悟 ...