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

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可