1. 统计量
这个summarizer用于计算样本各维特征的均值,方差等常用统计量
class MultivariateOnlineSummarizer extends MultivariateStatisticalSummary with Serializable {
private var n = 0
//均值
private var currMean: Array[Double] = _
//用于方差统计
private var currM2n: Array[Double] = _
//平方和
private var currM2: Array[Double] = _
//L1范数
private var currL1: Array[Double] = _
//样本计数
private var totalCnt: Long = 0
//所有样本weight的和
private var totalWeightSum: Double = 0.0
//weight平方和,用于计算方差
private var weightSquareSum: Double = 0.0
//每维特征非0的权重和
private var weightSum: Array[Double] = _
//非0计数
private var nnz: Array[Long] = _
//最大值
private var currMax: Array[Double] = _
//最小值
private var currMin: Array[Double] = _
2. online统计
这里的统计项,除了均值和方差,其他的直接计算即可,
Wikipedia给出了带权online统计算法,这里的算法支持分布式统计,各部分样本先合并,然后各个统计器再合并。样本统计
EN=EN−1+wN∑Ni=0wi(x−EN−1)⋯⋯(1)SN=SN−1+wN∗(x−EN−1)(x−EN)⋯⋯(2)
EN , SN ,

本文介绍了如何在Spark中进行在线统计,特别是均值和方差的计算。通过分布式统计方法,结合Wikipedia上的带权在线算法,实现样本合并与统计器的合并。在计算过程中,对非0样本部分进行均值和方差的处理,并在最后合并时考虑0样本的影响。此外,还涵盖了L2和L1范数以及其他统计项的计算。
最低0.47元/天 解锁文章
739

被折叠的 条评论
为什么被折叠?



