本文主要内容

本文对了org.apache.Spark.mllib.stat包及子包中的相关统计类进行介绍,stat包中包括下图中的类或对象:

本文将对其中的部分内容进行详细讲解

  1. 获取矩阵列(column-wise)统计信息
  2. Kernel density estimation(核密度估计)
  3. Hypothesis testing(假设检验)

1. 获取矩阵列(column-wise)统计信息

获取列统计信息指的是以矩阵中的列为单位获取其统计信息(如每列的最大值、最小值、均值等其它统计特征)

package cn.ml.statimport org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.mllib.stat.MultivariateStatisticalSummaryobject StatisticsDemo extends App {val sparkConf = new SparkConf().setAppName("StatisticsDemo").setMaster("spark://sparkmaster:7077") val sc = new SparkContext(sparkConf)val rdd1= sc.parallelize(Array(Array(1.0,2.0,3.0,4.0),Array(2.0,3.0,4.0,5.0),Array(3.0,4.0,5.0,6.0))).map(f => Vectors.dense(f))//在第一节中,我们使用过该MultivariateStatisticalSummary该类,通过下列方法// var mss:MultivariateStatisticalSummary=rowMatirx.computeColumnSummaryStatistics()// 这里是通过Statistics方法去获取相关统计信息,它们的内部实现原理是一致的,最终返回其实都是// MultivariateOnlineSummarizer的实例(下一小节将讲解该类)//Statistics.colStats方法它的源码如下://  def colStats(X: RDD[Vector]): MultivariateStatisticalSummary = {//  new RowMatrix(X).computeColumnSummaryStatistics()//}//可以看到 Statistics.colStats方法调用的是RowMatrix中的computeColumnSummaryStatistics方法val mss:MultivariateStatisticalSummary=Statistics.colStats(rdd1)//因此下列方面返回的结果与第一节通过调用computeColumnSummaryStatistics得到的结果//返回值是一致的mss.maxmss.minmss.normL1//其它normL2等统计信息
}

2. Kernel density estimation(核密度估计)

统计学当中,核密度估计(Kernel density estimation,KDE)扮演着十分重要的角色,它是一种非参数化的随机变量概率密度估计方法。设(x1, x2, …, xn)为n个独立同分布的样本,对其概率密度函数作如下定义:

其中K(•)被称为核,h 被称为带宽bandwidth,它是一个大于0的平滑参数,更详细的信息参见https://en.wikipedia.org/wiki/Kernel_density_estimation
核函数的种类比较多,但Spark中只实现了高斯核函数:

  val sample = sc.parallelize(Seq(0.0, 1.0, 4.0, 4.0))val kernelDensity=new KernelDensity().setSample(sample) //设置密度估计样本.setBandwidth(3.0) //设置带宽,对高斯核函数来讲就是标准差//给定相应的点,估计其概率密度//densities: Array[Double] = //Array(0.07464879256673691, 0.1113106036883375, 0.08485447240456075)val densities = kernelDensity.estimate(Array(-1.0, 2.0, 5.0))

3. Hypothesis testing(假设检验)

假设检测在统计学中用于通过假设条件将样本进行总体推断,从而做出接受或拒绝假设判断,假设检验的方法很多,具体可参考http://baike.baidu.com/link?url=f3DhyOL_9OLVupNkCk82fdOhYOvYKzTWSVNyJqDNBD2hqr1nSlxmqpMiStqnWgNrW3ni9U_kZgy2GA5_8kSAHa。目前Spark中只提供了皮尔森chi平方距离检测法(Pearson’s chi-squared ( χ2) ),也称卡方检验,它由统计学家皮尔逊推导。理论证明,实际观察次数(fo)与理论次数(fe)之差的平方再除以理论次数所得的统计量,近似服从卡方分布。卡方检验的两个主要应用:拟合性检验和独立性检验,拟合性检验是用于分析实际次数与理论次数是否相同,适用于单个因素分类的计数数据。独立性检验用于分析各有多项分类的两个或两个以上的因素之间是否有关联或是否独立的问题(参见http://en.wikipedia.org/wiki/Chi-squared_test)。在Spark中,拟合度检验要求输入为Vector, 独立性检验要求输入是Matrix,另外还支持RDD[LabeledPoint]的独立性检验。对应方法如下:

//对带标签的特征向量进行独立性检验LabeledPoint,返回Array[ChiSqTestResult]
//目前只支持PEARSON法即卡方检验
/*** Conduct Pearson's independence test for each feature against the label across the input RDD.* The contingency table is constructed from the raw (feature, label) pairs and used to conduct* the independence test.* Returns an array containing the ChiSquaredTestResult for every feature against the label.*/def chiSquaredFeatures(data: RDD[LabeledPoint],methodName: String = PEARSON.name): Array[ChiSqTestResult] //拟合度检验,针对Vector,目前只支持PEARSON法即卡方检验
/** Pearson's goodness of fit test on the input observed and expected counts/relative frequencies.* Uniform distribution is assumed when `expected` is not passed in.*/def chiSquared(observed: Vector,expected: Vector = Vectors.dense(Array[Double]()),methodName: String = PEARSON.name): ChiSqTestResult//独立性检验,要求输入为Matrix,目前只支持PEARSON法即卡方检验/** Pearson's independence test on the input contingency matrix.* TODO: optimize for SparseMatrix when it becomes supported.*/def chiSquaredMatrix(counts: Matrix, methodName: String = PEARSON.name): ChiSqTestResult 

假设有两块土地,通过下列数据来检验其开红花的比率是否相同:
土地一, 开红花:1000,开兰花:1856
土地二, 开红花:400.,开兰花:560

具体使用代码如下:

val land1 = Vectors.dense(1000.0, 1856.0)
val land2 = Vectors.dense(400, 560)
val c1 = Statistics.chiSqTest(land1, land2)
  • 1

执行结果:

c1: org.apache.spark.mllib.stat.test.ChiSqTestResult =
Chi squared test summary:
method: pearson
degrees of freedom = 1
statistic = 52.0048019207683
pValue = 5.536682223805656E-13
Very strong presumption against null hypothesis: observed follows the same distribution as expected..

单从结果来看,两组数据满足相同的分布

Machine Learning on Spark—— 统计基础(一)相关推荐

  1. Machine Learning on Spark——统计基础(二)

    本节主要内容 Correlation 相关性分析 分层采样(Stratified sampling) 随机数据生成(Random data generation) 1. Correlation 相关性 ...

  2. Machine Learning on Spark——第四节 统计基础(二)

    作者:周志湖 微信号:zhouzhihubeyond 本节主要内容 Correlation 相关性分析 分层采样(Stratified sampling) 随机数据生成(Random data gen ...

  3. Spark Machine Learning 03 Spark上数据的获取、处理与准备

    Chap 03 Spark上数据的获取处理 Spark上数据的获取.处理与准备 MovieStream,数据包括网站提供的电影数据.用户的服务信息数据以及行为数据. 这些数据涉及电影和相关内容(比如标 ...

  4. Machine Learning On Spark——基础数据结构(二)

    本节主要内容 IndexedRowMatrix BlockMatrix 1. IndexedRowMatrix的使用 IndexedRowMatrix,顾名思义就是带索引的RowMatrix,它采用c ...

  5. Machine Learning On Spark——基础数据结构(一)

    本节主要内容 本地向量和矩阵 带类标签的特征向量(Labeled point) 分布式矩阵 1. 本地向量和矩阵 本地向量(Local Vector)存储在单台机器上,索引采用0开始的整型表示,值采用 ...

  6. 【github】机器学习(Machine Learning)深度学习(Deep Learning)资料

    转自:https://github.com/ty4z2008/Qix/blob/master/dl.md# <Brief History of Machine Learning> 介绍:这 ...

  7. 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总

    本文来源:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...

  8. 机器学习----(Machine Learning)深度学习(Deep Learning)资料(Chapter 1)

    文章转至:作者:yf210yf  感谢您提供的资源 资料汇总的很多,转载一下也方便自己以后慢慢学习 注:机器学习资料篇目一共500条,篇目二开始更新 希望转载的朋友,你可以不用联系我.但是一定要保留原 ...

  9. 机器学习(Machine Learning)深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

最新文章

  1. 5G+AI重新定义生老病死?
  2. Jenkins设置svn授权
  3. [转贴]无刷新的2个DropDownList联动
  4. 教你编写Node.js中间件,实现服务端缓存
  5. python-list:列表-元组-字符串
  6. 系统架构设计师 - 构件
  7. 多台电脑集群运算_答疑 | 三维建模的【电脑】配置问题
  8. 神经元与网络结构概论
  9. Echarts关系图(使用重力图)
  10. sscom串口调试助手
  11. 软考中级-软件设计师-第1章 软件设计师考试介绍
  12. dsp2812软件周期耗时测试,基于DSP2812设计的简易数字频率计
  13. defer和async的区别
  14. Dev,SIT,UAT, Staging, Prod,DR环境分别是意思?
  15. 极简OpenFoam编程
  16. 解决java导出excel因数据量大占内存的问题
  17. 华为手机信息不弹屏了为什么_华为微信不弹出新消息提醒 怎么办
  18. 机械手编程用c语言,51单片机机械手控制C程序.doc
  19. ventory做U盘启动,使用vmware进行测试U盘系统盘是否制作成功
  20. A091_hrm07_用户中心_注册

热门文章

  1. 有一个OEM制造商代理做HP笔记本电脑(Laptop),后来该制造商得到了更多的品牌笔记本电脑的订单Acer,Lenovo,Dell,该OEM商发现,如果一次同时做很多个牌子的本本,有些不利于管理。利
  2. php ajax搜索,PHP 与AJAX
  3. linux shell删除归档_linux打怪技能方向规划,送给迷茫学习的你
  4. firewalld/iptables防火墙维护和状态查询命令(防火墙重载,区域操作命令,开启服务或端口,堵塞端口,iptables规则添加和删除)
  5. RT-Thread uart串口设备驱动代码结构剖析
  6. MappedByteBuffer的使用
  7. java静态多态_Java静态方法不具有多态性详解
  8. android 模块自动加载,Android 之ko模块的自动加载
  9. c语言判断一个点在长方体内部_21个入门练手项目,让你轻松玩转C语言
  10. pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理