源宝导读:本文将讲解在大数据分析领域的线性回归统计计算方法,以及如何将非线性转化为线性回归的原理,同时介绍了两种的回归统计库的使用和对比,最后介绍线性回归在DMP产品的应用实践。

一、背景

回归统计,是数据分析常用的方式,可以通过对散点图的线性或非线性拟合,得到一条可以解释散点趋势的曲线函数,通过该函数可以对数据进行预测,同时可以采用相关指标刻画该函数的回归的效果,具有一定的现实指导意义。

一般的线性规划得到的是一条直线,而基本的几种非线性回归则是通过转化为线性回归的方式来进行;本篇通过讲解线性回归的计算方法以及如何将非线性转化为线性回归说明其原理,同时介绍了两种的回归统计库的使用和对比,最后通过实例演示了实现效果。本篇在 DMP 平台上实现了包含该功能的散点图组件。

二、接到需求

地点:办公室。
时间:某个清晨。
人物:某产品经理;小明,久经考验的前端攻城狮。
事件:又又接到产品提出的奇怪需求——之前搞了PS,现在 EXCEL 有的功能我们也要上,作为大数据产品,趋势线这种东西,必须有啊,移动平均除外,其他的都得搞定。
看到这个需求,小明表示,还是淡定吧…
如下图所示:

三、需求分解

  1. 图形由散点和趋势线构成,均可按照 echarts 等图形库直接绘制;

  2. 控制面板使用一般的UI 控件均可实现;

  3. 关键在于线性、指数、对数、多项式和乘幂趋势线的算法实现。

搞清楚这几种回归分析算法的原理,即搞定了这个需求。

四、线性回归

4.1、什么是回归

高中的数学课本知识告诉我们:

  1. 从一组样本数据出发,确定变量之间的数学关系式;

  2. 对这些关系式的可信度进行各种统计检验,并从影响某一特定变量的诸多变量中找出哪些变量的影响显著,哪些不显著;

  3. 利用所求的关系式,根据一个或几个变量的取值来预测或控制另一个特定变量的取值,并给出这种预测或控制的精确程度。

以上便是回归的一般用法。

4.2、回归的意义

  1. 客观事物是相互联系的,过去研究的大多数是因果关系,但实际上更多存在的是一种非因果关系;

  2. 相关关系:当一个或几个相互联系的变量取一定的数值时,与之相对应的另一变量的值虽然不确定,但它仍按某种规律在一定的范围内变化。变量间的这种相互关系,称为具有不确定性的相关关系。

  3. 回归分析是寻找相关关系中非确定性关系的某种确定性。

4.3、回归的种类

按形式分类:

  1. 线性相关(直线相关):当相关关系的一个变量变动时,另一个变量也相应地发生均等的变动。

  2. 非线性相关(曲线相关):当相关关系的一个变量变动时,另一个变量也相应地发生不均等的变动。

可以看到,我们要实现的除了直线趋势线外,其他的指数、对数、多项式和乘幂趋势线都是非线性相关。

4.4、如何实现线性回归

4.4.1、线性回归算法

最小二乘是最常用的实现线性回归的方法,可以通过其找到因变量 y 与自变量 x 之间的函数关系y=f(x)。
    对于散点图,可以将点的横坐标看做自变量 x ,将纵坐标看做因变量 y , 然后使用最小二乘法找到自变量和因变量之间的函数关系,由这个函数关系可以确定一条直线,这就是拟合出来的直线趋势线。

4.4.2、几何意义

最小二乘法的直观上的理解是:在二维平面上找到一条直线,使得每个点到直线的竖直距离之和最小。也就是说,一般最小二乘优化的是竖直距离,即纵坐标 y 的误差。

4.4.3、公式求解

  1. 设线性回归方程为:

  2. 先求出变量 x 的平均值,即:

  3. 再求出变量 y 的平均值,即:

  4. 求出变量 x 的系数

即:

=

5. 求出常数:

即:

即可得到回归方程:

4.4.4、回归方程评价

主要有两个指标,方差 ∂² 和 相关指数 R²。一般我们可以用相关指数 R² 来刻画回归的效果。R² 越趋向于 1,则说明回归方程拟合的越好;越趋向 0,则说明拟合的越差。

4.5、通过线性方法实现非线性回归

主要的思想是通过适当的变量代换,把幂函数、指数函数、对数函数等采用适当的变量代换,把问题转化为线性回归问题,使其得到解决。
如对指数回归:

的求解方式如下:

1.在

的两边取常用对数得到:

2.令

,则得到

即转化为线性方程,按照线性方程进行求解可得到 a 和 b 的值,带入公式可得到系数 C₁ 和 C₂,从而得到指数回归:

五、regression-js及echarts-stat简介

实现回归统计在各个平台和语言都有不同的实现,对于前端而言,有两个现成的库可以直接使用,就是regression-js 和 echarts-stat。

5.1、regression-js

官方介绍:

regression-js 是一个JavaScript模块,其中包含用于简单数据分析的线性最小二乘拟合方法的集合。

基本可以看作我们上面讲解内容的一个实现版本,包含的内容也恰好覆盖,其API如下:

Result:

其求解的结果集直接提供了 相关指数 R², 并且提供了一个 predict 函数,可以直接通过输入 x 获得预测值。

5.2、echarts-stat

官方介绍:

ecStat是ECharts  的统计和数据挖掘工具。你可以把它当作一个工具库直接用来分析数据;你也可以将其与 ECharts 结合使用,用ECharts 可视化数据分析的结果。
同时支持 Node 和浏览器中使用。

ecStat 提供的 api 较多,包含以下内容:

  1. ·直方图

  2. ·聚类

  3. ·回归

  4. ·基本统计方法

回归是 ecStat 提供的一类 api,同 regression-js 提供的功能基本一致:

与 regression-js 相比,少了幂函数,同时求解集也没有提供相关指数 R² 和 predict 预测函数。
    比较适合仅需要图形渲染的场景,对于预测和评价需要使用其提供的基本统计方法自行定义。

六、实现演示

采用 regression-js 进行实现回归算法,用 echarts 作图形渲染,在 DMP 平台上制作了一个组件,实现了线性、指数、对数、多项式和乘幂趋势线以及其 R² 和趋势预测,如下图所示:

具体可以在 DMP 测试环境使用设计器-更多-趋势线散点图DEMO 查看效果。(动图:趋势线2.gif)

同时,也在 echarts 社区的 gallery 制作了 regression-js 和 ecStat 的对比演示demo,感兴趣的同学可以查看:https://gallery.echartsjs.com/editor.html?c=xV2Muphtnl&v=5。

------ END ------

作者简介

王同学: 研发工程师,目前负责云创DMP数据分析平台的设计与开发工作。

也许您还想看

云客大数据架构实践

云客大数据管理保障体系

TypeScript+vue使用与迁移经验总结

Web页面适配移动端方案研究

前端异步对象的原理与使用方法

回归统计在DMP中的实战应用相关推荐

  1. 回归统计在 echarts 中的实现---在散点图中加趋势线

    回归统计在 echarts 中的实现  贵在随心 关注 0.5 2019.03.13 13:55 字数 432 阅读 483评论 0喜欢 3 在做数据的统计的时候,难免会涉及到线性拟合问题,也就是回归 ...

  2. R语言进行数据聚合统计(Aggregating transforms)实战:使用R原生方法、data.table、dplyr等方案、计算分组均值并添加到可视化结果中

    R语言进行数据聚合统计(Aggregating transforms)实战:使用R原生方法.data.table.dplyr等方案.计算分组均值并添加到可视化结果中 目录

  3. 机器学习-回归之一元回归与多元回归算法原理及实战

    一元回归分析和多元线性回归 前言 在统计学中,回归分析(Regression Analysis)指的是确定两种或两种以上变量间的相互依赖的定量关系的一种分析方法.该方法常使用数据统计的基本原理,对大量 ...

  4. Spring Cloud在云计算SaaS中的实战经验分享

    摘要 云帐房CTO张英磊基于自己的个人经验,分享Spring Cloud在云计算SaaS中的实战经验,希望能为大家带来一些思路上的帮助. 内容来源:2017年5月6日,云帐房CTO张英磊在" ...

  5. 均值回归,逆市中的投资机会

    用IT技术玩金融系列文章,将介绍如何使用IT技术,处理金融大数据.在互联网混迹多年,已经熟练掌握一些IT技术.单纯地在互联网做开发,总觉得使劲的方式不对.要想靠技术养活自己,就要把技术变现.通过&qu ...

  6. MapReduce初体验——统计指定文本文件中每一个单词出现的总次数

    相信小伙伴们看了小菌上一篇博客<什么是MapReduce(入门篇)>后,对MapReduce的概念有了更深的认知!本篇博客,小菌为大家带来的则是MapReduce的实战--统计指定文本文件 ...

  7. python读取日志统计ip_使用python脚本实现统计日志文件中的ip访问次数

    使用python脚本实现统计日志文件中的ip访问次数,注意此脚本只适用ip在每行开头的日志文件,需要的朋友可以参考下 适用的日志格式: 106.45.185.214 - - [06/Aug/2014: ...

  8. 岭回归算法的原理和代码实战

    岭回归算法的原理和代码实战 前言 学过吴恩达老师的机器学习入门课程都应该知道,在逻辑回归那一讲,吴老师提到了使用正则化来防止逻辑回归模型过拟合.而岭回归在这里的作用是一样的,同样也是防止模型过拟合.这 ...

  9. 统计java文件中的代码行数

    统计Java代码行数工具类  --  CodeCounterUtil.java 统计指定目录下的java文件中代码行数  --  public static int  getCodeNumFromFo ...

最新文章

  1. 033_字符集和编码
  2. Python桌面图形程序美化的方法论
  3. Android 如何快速定位当前页面是哪个Activity or Fragment
  4. Windows 8 系统快捷键热键列表收集
  5. 64 位 win7(2008 r2) 使用PLSQL Developer x86 32bit的解决方法
  6. python spark hadoop_使用Scala或Python列出存储在Hadoop HDFS上的Spark群集中可用的所有文件?...
  7. 效率低下的原因--开发者说
  8. python基础教程-Python基础
  9. 学习设计模式 - 中介者模式
  10. springboot下maven分环境打包
  11. 【车道线】车道线检测代码复现---lanenet(小白篇)
  12. C:\Users\用户名\AppData\Roaming里面的文件可以删除吗?
  13. HDU-6396-Swordsman(文件输入+优先队列)
  14. 什么叫智能服务器sn,一篇文章告诉你何为服务器端车牌智能识别
  15. 解决ubuntu无法解析域名、无网络连接问题
  16. 微软AI 绘图工具+ChatGPT免费用,10秒轻松出图,超详细教程,纯干货分享
  17. 力扣(566.303)补8.25
  18. 印象笔记Evernote 教程
  19. echarts 路径图
  20. 【程序人生 | 价值扳机】你的寒假自律第一步(建议收藏)

热门文章

  1. 扒开系统调用的三层皮(下)
  2. 2012暑假最后两次组队赛总结
  3. 创业95%失败不是因项目本身
  4. 音频剪切_音频编辑入门指南:剪切,修剪和排列
  5. libreoffice_如何更改您在LibreOffice中可以撤消的操作数
  6. 数据底座_体验当今计算机的未来:通过智能底座将您的Galaxy S4变成PC
  7. Object关于属性property的静态方法
  8. weui-react项目实战新心得
  9. Ubuntu 16.04安装SQLite Browser操作SQLite数据库
  10. SecureCRT 中 python 命令行使用退格键(backspace)出现 ^H 解决办法