2 Spark机器学习 spark MLlib Statistics统计入门

2024-04-06 12:38

本文主要是介绍2 Spark机器学习 spark MLlib Statistics统计入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

spark中比较核心的是RDD操作,主要用于对数据的处理、转换。

在机器学习中,数据的处理也非常重要,矩阵、统计什么的都很常见。这一篇看一下Statistics统计相关的操作。

本系列文章是边看书学边写,书是看的黄美灵的spark mllib机器学习。我会抽取比较靠谱的有用的知识写成文章。

MLlib Statistics是基础统计模块,能对RDD数据进行统计,包括汇总统计、相关系数、分层抽样、假设检验、随机数据生成等。

1 列统计

假如我们有个文件,有很多行和列,现在需要对各列做个统计分析,看看每列的最大最小值平均值什么的。

文件内容如下:

12 3 4 5
57 1 5 9
35 6 3 1
31 1 5 6

代码如下:

package statisticsimport org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.{SparkConf, SparkContext}object ColStats {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("simple").setMaster("local")val sc = new SparkContext(conf)val data_path = "/users/wuwf/spark1"val data = sc.textFile(data_path).map(_.split(" ")).map(f => f.map(f => f.toDouble))//转成RDD[Vector]val data1 = data.map(f => Vectors.dense(f))val stat1 = Statistics.colStats(data1)println(stat1.max)println(stat1.min)//平均值println(stat1.mean)//方差值println(stat1.variance)//L1范数println(stat1.normL1)//L2范数println(stat1.normL2)}}

直接运行后结果如下:

对比注释,可以看看代码的功能。

上面我们将原始RDD转为了RDD[Vector]形式的变量data1,我们对data1进行collect操作,就变成了Array[Vector]的形式。可以来打印看看里面的值:

for(i <- data1.collect()) {println(i)}

2 相关系数

相关系数表达的是两个数值变量的线性相关性,一般适用于正态分布。取值范围是[-1, 1],取值为0代表不相关,取值为(0,-1]代表负相关,取值为(0,1]代表正相关。

譬如房屋面积很多时候就和房价成正相关的关系。

用来描述相关系数的主要有皮尔森(pearson)相关系数和斯皮尔曼(spearman)相关系数。

拿代码来看一下:

        val corr1 = Statistics.corr(data1, "pearson")val corr2 = Statistics.corr(data1, "spearman")println(corr1)println(corr2)val x1 = sc.parallelize(Array(1.0, 2.0, 3.0, 4.0))val y1 = sc.parallelize(Array(5.0, 6.0, 6.0, 6.0))val corr3 = Statistics.corr(x1, y1, "pearson")println(corr3)

看结果:

corr1是:

corr2是:

corr3是:

相关系数根据输入类型的不同,输出的结果也产生相应的变化。如果输入的是两个RDD[Double],则输出的是一个double类型的结果;如果输入的是一个RDD[Vector],则对应的输出的是一个相关系数矩阵。

corr3的输出就是一个double型,0.77属于正相关,我们可以比较明显的看到y1的值随着x1的值增大而增大,或持平。我把y1的数据改成5.0, 10.0, 15.0, 20.0时,结果就会变成0.9999.也就是完全正相关了。

再看corr1和corr2,都是矩阵型的,那么里面的相关系数是怎么算的呢,里面的每一项都代表谁跟谁的相关系数?

答案是:相关矩阵第i行第j列的元素是原矩阵第i列和第j列的相关系数

看起来有点抽象是吗,我们来看看corr1的矩阵,发现矩阵的对角线数据都是一样的,右斜线都是1。这该怎么解释呢?

我们来取第一列和第二列的值,来做一下相关性计算。发现结果是:

可以看到刚好就是结果矩阵里的1行2列和2行一列。再对照上面红字的话就能明白了,-0.28就是第一列和第二列的相关系数,当然了第二列和第一列的相关系数自然相同。而为1的那些数据,自然就是本列和本列的相关系数了。

那么这玩意的作用是什么呢?

在机器学习里,我们经常会有一个label列,譬如房价,又有很多个属性列,譬如面积、位置、装修什么的。那么我们就能通过上面的相关系数,比较直白的看到,都有哪些列与房价的关系成正相关、负相关。

 

这篇关于2 Spark机器学习 spark MLlib Statistics统计入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879910

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1: