源宝导读:本文将讲解在大数据分析领域的线性回归统计计算方法,以及如何将非线性转化为线性回归的原理,同时介绍了两种的回归统计库的使用和对比,最后介绍线性回归在DMP产品的应用实践。
一、背景
回归统计,是数据分析常用的方式,可以通过对散点图的线性或非线性拟合,得到一条可以解释散点趋势的曲线函数,通过该函数可以对数据进行预测,同时可以采用相关指标刻画该函数的回归的效果,具有一定的现实指导意义。
一般的线性规划得到的是一条直线,而基本的几种非线性回归则是通过转化为线性回归的方式来进行;本篇通过讲解线性回归的计算方法以及如何将非线性转化为线性回归说明其原理,同时介绍了两种的回归统计库的使用和对比,最后通过实例演示了实现效果。本篇在 DMP 平台上实现了包含该功能的散点图组件。
二、接到需求
地点:办公室。
时间:某个清晨。
人物:某产品经理;小明,久经考验的前端攻城狮。
事件:又又接到产品提出的奇怪需求——之前搞了PS,现在 EXCEL 有的功能我们也要上,作为大数据产品,趋势线这种东西,必须有啊,移动平均除外,其他的都得搞定。
看到这个需求,小明表示,还是淡定吧…
如下图所示:
![1b45d9522326feef0ac3c5eca2e9a156.png](https://img-blog.csdnimg.cn/img_convert/1b45d9522326feef0ac3c5eca2e9a156.png)
三、需求分解
- 图形由散点和趋势线构成,均可按照 echarts 等图形库直接绘制;
- 控制面板使用一般的UI 控件均可实现;
- 关键在于线性、指数、对数、多项式和乘幂趋势线的算法实现。
搞清楚这几种回归分析算法的原理,即搞定了这个需求。
四、线性回归
4.1、什么是回归
高中的数学课本知识告诉我们:
- 从一组样本数据出发,确定变量之间的数学关系式;
- 对这些关系式的可信度进行各种统计检验,并从影响某一特定变量的诸多变量中找出哪些变量的影响显著,哪些不显著;
- 利用所求的关系式,根据一个或几个变量的取值来预测或控制另一个特定变量的取值,并给出这种预测或控制的精确程度。
以上便是回归的一般用法。
4.2、回归的意义
- 客观事物是相互联系的,过去研究的大多数是因果关系,但实际上更多存在的是一种非因果关系;
- 相关关系:当一个或几个相互联系的变量取一定的数值时,与之相对应的另一变量的值虽然不确定,但它仍按某种规律在一定的范围内变化。变量间的这种相互关系,称为具有不确定性的相关关系。
- 回归分析是寻找相关关系中非确定性关系的某种确定性。
4.3、回归的种类
按形式分类:
- 线性相关(直线相关):当相关关系的一个变量变动时,另一个变量也相应地发生均等的变动。
- 非线性相关(曲线相关):当相关关系的一个变量变动时,另一个变量也相应地发生不均等的变动。
可以看到,我们要实现的除了直线趋势线外,其他的指数、对数、多项式和乘幂趋势线都是非线性相关。
4.4、如何实现线性回归
4.4.1、线性回归算法
最小二乘是最常用的实现线性回归的方法,可以通过其找到因变量 y 与自变量 x 之间的函数关系y=f(x)。
对于散点图,可以将点的横坐标看做自变量 x ,将纵坐标看做因变量 y , 然后使用最小二乘法找到自变量和因变量之间的函数关系,由这个函数关系可以确定一条直线,这就是拟合出来的直线趋势线。
4.4.2、几何意义
最小二乘法的直观上的理解是:在二维平面上找到一条直线,使得每个点到直线的竖直距离之和最小。也就是说,一般最小二乘优化的是竖直距离,即纵坐标 y 的误差。
![9bc83d324902f5c360c8598501917212.png](https://img-blog.csdnimg.cn/img_convert/9bc83d324902f5c360c8598501917212.png)
4.4.3、公式求解
- 设线性回归方程为:
- 先求出变量 x 的平均值,即:
- 再求出变量 y 的平均值,即:
- 求出变量 x 的系数
即:
![f26d79d87cc60fe59e38a3c342a52326.png](https://img-blog.csdnimg.cn/img_convert/f26d79d87cc60fe59e38a3c342a52326.png)
=
![1bddb5e203244211c2472e68b648d805.png](https://img-blog.csdnimg.cn/img_convert/1bddb5e203244211c2472e68b648d805.png)
5. 求出常数:
![d5f01b446f8630dae12ef2b0ae27e0d4.png](https://img-blog.csdnimg.cn/img_convert/d5f01b446f8630dae12ef2b0ae27e0d4.png)
即:
![3e518b7f6fffefd4f9d47c36457eef12.png](https://img-blog.csdnimg.cn/img_convert/3e518b7f6fffefd4f9d47c36457eef12.png)
即可得到回归方程:
![0bd0252ca30e78b83cf5bc38452658e5.png](https://img-blog.csdnimg.cn/img_convert/0bd0252ca30e78b83cf5bc38452658e5.png)
4.4.4、回归方程评价
主要有两个指标,方差 ∂² 和 相关指数 R²。一般我们可以用相关指数 R² 来刻画回归的效果。R² 越趋向于 1,则说明回归方程拟合的越好;越趋向 0,则说明拟合的越差。
![9fe310ef60cb0e2a9e45bf4e25a00c74.png](https://img-blog.csdnimg.cn/img_convert/9fe310ef60cb0e2a9e45bf4e25a00c74.png)
4.5、通过线性方法实现非线性回归
主要的思想是通过适当的变量代换,把幂函数、指数函数、对数函数等采用适当的变量代换,把问题转化为线性回归问题,使其得到解决。
如对指数回归:
![0bd0252ca30e78b83cf5bc38452658e5.png](https://img-blog.csdnimg.cn/img_convert/0bd0252ca30e78b83cf5bc38452658e5.png)
的求解方式如下:
1.在
![0bd0252ca30e78b83cf5bc38452658e5.png](https://img-blog.csdnimg.cn/img_convert/0bd0252ca30e78b83cf5bc38452658e5.png)
的两边取常用对数得到:
![f141f6731c677718e98f7ce375a69d84.png](https://img-blog.csdnimg.cn/img_convert/f141f6731c677718e98f7ce375a69d84.png)
2.令
![1d0b1a9b82df52a390086f54c7279c0e.png](https://img-blog.csdnimg.cn/img_convert/1d0b1a9b82df52a390086f54c7279c0e.png)
,则得到
![63ad2423ead76855761e2fc279dfc6c6.png](https://img-blog.csdnimg.cn/img_convert/63ad2423ead76855761e2fc279dfc6c6.png)
即转化为线性方程,按照线性方程进行求解可得到 a 和 b 的值,带入公式可得到系数 C₁ 和 C₂,从而得到指数回归:
![0bd0252ca30e78b83cf5bc38452658e5.png](https://img-blog.csdnimg.cn/img_convert/0bd0252ca30e78b83cf5bc38452658e5.png)
五、regression-js及echarts-stat简介
实现回归统计在各个平台和语言都有不同的实现,对于前端而言,有两个现成的库可以直接使用,就是regression-js 和 echarts-stat。
5.1、regression-js
官方介绍:
regression-js 是一个JavaScript模块,其中包含用于简单数据分析的线性最小二乘拟合方法的集合。
基本可以看作我们上面讲解内容的一个实现版本,包含的内容也恰好覆盖,其API如下:
![80bac8a02ebcbb2f9c1391e73ff530a7.png](https://img-blog.csdnimg.cn/img_convert/80bac8a02ebcbb2f9c1391e73ff530a7.png)
![731a49844b954bf817c08694eadc6d9e.png](https://img-blog.csdnimg.cn/img_convert/731a49844b954bf817c08694eadc6d9e.png)
Result:
![832200dda11c712e6153e2df56da1229.png](https://img-blog.csdnimg.cn/img_convert/832200dda11c712e6153e2df56da1229.png)
其求解的结果集直接提供了 相关指数 R², 并且提供了一个 predict 函数,可以直接通过输入 x 获得预测值。
5.2、echarts-stat
官方介绍:
ecStat是ECharts 的统计和数据挖掘工具。你可以把它当作一个工具库直接用来分析数据;你也可以将其与 ECharts 结合使用,用ECharts 可视化数据分析的结果。
同时支持 Node 和浏览器中使用。
ecStat 提供的 api 较多,包含以下内容:
- ·直方图
- ·聚类
- ·回归
- ·基本统计方法
回归是 ecStat 提供的一类 api,同 regression-js 提供的功能基本一致:
![e722256a11eec448558fd68ceb599ab3.png](https://img-blog.csdnimg.cn/img_convert/e722256a11eec448558fd68ceb599ab3.png)
![2d972b869d826355c9c32f9d1e48ac8e.png](https://img-blog.csdnimg.cn/img_convert/2d972b869d826355c9c32f9d1e48ac8e.png)
与 regression-js 相比,少了幂函数,同时求解集也没有提供相关指数 R² 和 predict 预测函数。
比较适合仅需要图形渲染的场景,对于预测和评价需要使用其提供的基本统计方法自行定义。
六、实现演示
采用 regression-js 进行实现回归算法,用 echarts 作图形渲染,在 DMP 平台上制作了一个组件,实现了线性、指数、对数、多项式和乘幂趋势线以及其 R² 和趋势预测,如下图所示:
![3f321aaadb48e89b1f6ee559660982eb.gif](https://img-blog.csdnimg.cn/img_convert/3f321aaadb48e89b1f6ee559660982eb.gif)
具体可以在 DMP 测试环境使用设计器-更多-趋势线散点图DEMO 查看效果。(动图:趋势线2.gif)
![bfaa5e5f44d091de2ecb001871774d8b.png](https://img-blog.csdnimg.cn/img_convert/bfaa5e5f44d091de2ecb001871774d8b.png)
同时,也在 echarts 社区的 gallery 制作了 regression-js 和 ecStat 的对比演示demo,感兴趣的同学可以查看:https://gallery.echartsjs.com/editor.html?c=xV2Muphtnl&v=5。
------ END ------
作者简介
王同学: 研发工程师,目前负责云创DMP数据分析平台的设计与开发工作。
文章来源微信公众号:明源技术团队