回归统计在DMP中的实战应用

源宝导读:本文将讲解在大数据分析领域的线性回归统计计算方法,以及如何将非线性转化为线性回归的原理,同时介绍了两种的回归统计库的使用和对比,最后介绍线性回归在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页面适配移动端方案研究

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙芯3A5000初样顺利交付流片

此前,龙芯完成3A5000设计初样的流片交付。在3A4000架构的基础上,3A5000采用12纳米工艺,设计频率提高近40%,同频模式下功耗降低近60%,同时保持与3A4000芯片管脚兼容。龙芯3A5000和3A4000在微结构上变化不大,…

redhat java 多个版本_Linux下安装JDK(多个版本) 切换

1、检查系统是否自带了OpenJDK以及相关安装包,如果有的话则应先将其卸载。检查命令:java -versionrpm -qa | grep javarpm -e --nodeps tzdata-java-2013g-1.el6.noarchrpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686rpm -e --nodeps…

十分钟搭建自己的私有NuGet服务器-BaGet

点击上方蓝字"小黑在哪里"关注我吧搭建BaGet上传程序包在vs中使用其他前言NuGet是用于微软.NET(包括 .NET Core)开发平台的软件包管理器。NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。通常使用NuGet都是官方的服务&…

mysql or 创建索引_Mysql索引优化

1、单表索引优化单表索引优化分析创建表建表 SQLCREATE TABLE IF NOT EXISTS article(id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,author_id INT(10) UNSIGNED NOT NULL,category_id INT(10) UNSIGNED NOT NULL,views INT(10) UNSIGNED NOT NULL,comments INT(1…

.Net Core HttpClient处理响应压缩

前言在上篇文章[ASP.NET Core中的响应压缩]中我们谈到了在ASP.NET Core服务端处理关于响应压缩的请求,服务端的主要工作就是根据Content-Encoding头信息判断采用哪种方式压缩并返回。之前在群里有人问道过,现在的网络带宽这么高了还有必要在服务端针对请…

mysql脚本的制作_制作脚本实现mysql自动备份

首先执行vi dbbackup.sh命令,在打开的编辑器输入:#!/bin/bash/usr/local/mysql/bin/mysqldump -uuser -ppasswd databasename > /home/wwwroot/backup/date_$(date%Y%m%d).sql这段命令的意思是:用mysqldump导出名为databasename的数据库到…

在 PostgreSQL 中使用码农很忙 IP 地址数据库

在下载到码农很忙 IP 地址数据库后,我们可以将其存储在 PostgreSQL 数据库中,并在需要查询某个 IP 对应的位置数据时,通过 SQL 语句获取正确的结果。这是一种很便捷的使用方式,并且在增加了恰当的索引后,可以取得不错的…

Java当中用 javabean和其他容器存入表格数据 或 利用 容器进行存储表格

一:javabean 和list容器或map容器 package cn.wyj.two;import java.util.*;/*** javabean :必须有一个无参构造函数;变量属性私有化;* 本篇还是打印一张表* author 86155**/ public class Demo13_Javabean和其他容器 {public static void ma…

7-25 朋友圈 (25 分)(详解+并查集的了解和应用)

一:题目 某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友&#xff0…

使用Azure人脸API对图片进行人脸识别

人脸识别是人工智能机器学习比较成熟的一个领域。人脸识别已经应用到了很多生产场景。比如生物认证,人脸考勤,人流监控等场景。对于很多中小功能由于技术门槛问题很难自己实现人脸识别的算法。Azure人脸API对人脸识别机器学习算法进行封装提供REST API跟…

java while do循环_c语言中,while 和 do while 循环的主要区别是( )

1、循环构造的表达式不同:while循环构造的表达式为:while(表达式){循环体}。do-while循环构造表达式为:do{循环体;}while(条件表达);。2、执行末尾循环体的次…

[NewLife.Net]单机400万长连接压力测试

目标对网络库NewLife.Net进行单机百万级长连接测试,并持续收发数据,检测网络库稳定性。【2020年8月1日晚上22点】先上源码:https://github.com/NewLifeX/NewLife.Net结论,8月1日晚达到200万,8月2日下午达到404万。上一…

ABP快速开发一个.NET Core电商平台

总听.NETer羡慕Java有SSM框架,其实.NET也有ABP,极度优秀的开源应用程序框架,支持.NET Framework和.NET Core。羡慕Java有SpringCloud,其实.NET也有ABP.vNext,由ABP团队全新打造的.NET Core微服务架构开源框架&#xff…

java swing 控件拖动_java swing中实现拖拽功能示例

java实现拖拽示例Swing中实现拖拽功能,代码很简单,都有注释,自己看,运行效果如下图:package com;import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.dnd.DnDConstants;import java.awt.dnd.…

7-26 Windows消息队列 (25 分)(详解+思路+超时解决)

一:题目 消息队列是Windows系统的基础。对于每个进程,系统维护一个消息队列。如果在进程中有特定事件发生,如点击鼠标、文字改变等,系统将把这个消息加到队列当中。同时,如果队列不是空的,这一进程循环地从…

java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发

最近在搞视频监控项目,需要在网页上显示实时视频,于是网上找了很多资料研究如何在网页上播放视频,一种实现方式就是开发activex控件嵌入到网页中。如下我将介绍如何开发一个可以分屏播放视频的activex控件 (部分内容也是从网上抄的&#xff0…

基于.NetCore3.1系列 —— 日志记录之日志核心要素揭秘

前言在上一篇中,我们已经了解了内置系统的默认配置和自定义配置的方式,在学习了配置的基础上,我们进一步的对日志在程序中是如何使用的深入了解学习。所以在这一篇中,主要是对日志记录的核心机制进行学习说明。说明在上一篇中&…

listview在java中的使用_我的Android开发之路——ListView的使用

在Android开发过程中,遇到需要列表显示的时候,这时候就会用到listview。1.首先创建一个ListViewTest项目,选择empty activity类型。修改activity_main.xml的布局文件,添加listview控件,设置宽高和id等属性此时通过预览…

如何利用NLog输出结构化日志,并在Kibana优雅分析日志?

上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志、在Kibana中分析日志。什么是结构化日志?当前互联网、物联网、大数据突飞猛进,软件越复杂,查找任何给定问题…

java打印设备集中管理_Kafka+Log4j实现日志集中管理

记录如何使用KafkaLog4j实现集中日志管理的过程。引言前面写的《SpringLog4jActiveMQ实现远程记录日志——实战分析》得到了许多同学的认可,在认可的同时,也有同学提出可以使用Kafka来集中管理日志,于是今天就来学习一下。特别说明&#xff0…