回归统计在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,一经查实,立即删除!

相关文章

java 变成题_Java 习题8 参考答案及解析

1.问答题“\hello”是正确的字符串常量吗?“你好KU”.length()和”\n\t\t”.length()的值分别是多少?“Hello”.equals(“hello”)和”java”.equals(“java”)的值分别是多少?“Bird”.compareTo(“Bird fly”)的值是正数还是负数&#xff1…

Java当中Map的认识和基本用法

一:Map Map用于保存具有映射关系的数据,Map集合里保存着两组值,一组用于保存Map的ley,另一组保存着Map的value,也就是Map的 键值 和关键值 。具体举例 ,和查字典类似,通过key找到对应的value,通…

java 解析 manifest_解析AndroidManifest.xml之AXMLParser.java | 学步园

解析AndroidManifest.xml源码地址:http://code.google.com/p/android4me/source/browse/src/android4me/res/AXMLParser.java/* * Copyright 2008 Android4ME * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file exc…

Java手写Hashmap(HashMap的基本用法)

一&#xff1a;引言 HashMap是Map的实现类&#xff0c;其方法都可以继承Map,不用手写&#xff0c;本篇只是为了了解底层代码和复习java基础敲得码 二&#xff1a;上码 package cn.wyj.two;public class Demo5_手写HashMap<K,V> {Node2 table[];//位桶数组int size;pub…

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

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

java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

Java中堆、栈和常量池的区别栈 堆 常量池的概念首先我们先了解一下概念&#xff0c;Java把内存分成两种&#xff0c;一种叫做栈内存&#xff0c;一种叫做堆内存。栈内存存放基本类型的变量数据和对象类型的引用(请注意存放的是引用)&#xff0c;对象本身不存放在栈中&#xff0…

Java当中TreeMap用法

一&#xff1a;引言 当用到了TreeMap时候&#xff0c;是因为要根据键值进行排序&#xff0c;使输出的结果是按递增顺序的 二&#xff1a;上码 package cn.wyj.two;import java.util.Map; import java.util.TreeMap;/*** 一般当 键值需要排序时&#xff0c;我们会选择用 Tree…

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

1、检查系统是否自带了OpenJDK以及相关安装包&#xff0c;如果有的话则应先将其卸载。检查命令&#xff1a;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…

efcore 新特性 SaveChanges Events

efcore 新特性 SaveChanges EventsIntro昨天早上看到之前关注的一个 efcore 的 issue 被 closed &#xff0c;于是看了一眼&#xff0c; ef core 新合并了一个 PR&#xff0c;在 DbContext 中增加了 SaveChanges 相关的几个事件&#xff0c;具体的变更可以参数 PR https://gith…

Java手写HashSet

一&#xff1a;引言 HashSet类继承于 Set接口 其方法均可被直接调用&#xff0c;不用手写&#xff0c;本篇敲的码是为了熟悉底层原理&#xff0c;HashMap的特点&#xff1a;无序&#xff0c;无重复。其底层用的也是map<key,value>容器&#xff0c;但其value值固定,所以在…

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

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

java swing 面试题_下面有关JAVA swing的描述,说法错误的是?

Swing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称&…

Java当中迭代器的使用(遍历容器ArrayList, HashSet,HashMap)

一&#xff1a;引言 关于entry 的解释代码有注释&#xff0c;觉得挺重要。 二&#xff1a;上码 package cn.wyj.two;import java.util.*; import java.util.Map.Entry;public class Demo10_迭代器的使用 {public static void main(String[] args) {textList();System.out.pr…

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服务端处理关于响应压缩的请求&#xff0c;服务端的主要工作就是根据Content-Encoding头信息判断采用哪种方式压缩并返回。之前在群里有人问道过&#xff0c;现在的网络带宽这么高了还有必要在服务端针对请…

Java容器的遍历之增强for循环

一&#xff1a;为什么要用增强版的 for 循环呢 在普通的数组遍历当中&#xff0c;我们采用普通的for循环即可&#xff0c;但在遍历2.遍历集合、容器&#xff0c;当中我们一般采用增强版的for循环 &#xff0c;简单方便。 二&#xff1a;构造模式 for(数据类型 变量&#xff…

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

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

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

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

Java当中Collections的用法

一&#xff1a;上码 package cn.wyj.two;/*** Collections辅助类的使用* * author 王永杰**/ import java.util.*;public class Demo11_Collections辅助类 {public static void main(String[] args) {List<String> list new ArrayList<String>();for( int i 0; …

.NET开发者提高编程技能的5种方法

.NET开发者提高编程技能的5种方法https://insights.dice.com/2017/08/29/5-ways-improve-programming-skills/即使拥有40年的编程经验&#xff0c;我唯一能确定的就是肯定有比我更好的程序员。但是我并没有放弃&#xff0c;我会继续尝试并提高自己的编程技能。我认为有五件事可…