mahout 计算方差标准差

2024-05-03 14:32
文章标签 计算 方差 标准差 mahout

本文主要是介绍mahout 计算方差标准差,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

标准差Standard Deviation),在 概率统计中最常使用作为 统计分布程度(statistical dispersion)上的测量。标准差定义是总体各单位标准值与其平均数离差平方的算术平均数的 平方根。它反映组内个体间的离散程度。测量到分布程度的结果,原则上具有两种 性质:
为非负数值, 与测量 资料具有相同单位。一个总量的标准差或一个 随机变量的标准差,及一个子集合样品数的标准差之间,有所差别。
标准计算公式:
假设有一组数值X₁,X₂,X₃,......Xn(皆为 实数),其 平均值( 算术平均值)为μ,公式如图1。
标准差也被称为 标准偏差,或者实验标准差,公式为
 
简单来说,标准差是一组数据 平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值。
例如,两组数的集合 {0,5,9,14} 和 {5,6,8,9} 其平均值都是 7 ,但第二个集合具有较小的标准差。
标准差可以当作不确定性的一种测量。例如在物理科学中,做重复性测量时,测量数值集合的标准差代表这些测量的精确度。当要决定测量值是否符合预测值,测量值的标准差占有决定性重要角色:如果测量平均值与预测值相差太远(同时与标准差数值做比较),则认为测量值与预测值互相矛盾。这很容易理解,因为如果测量值都落在一定数值范围之外,可以合理推论预测值是否正确。
标准差应用于投资上,可作为量度回报稳定性的指标。标准差数值越大,代表回报远离过去 平均数值,回报较不稳定故风险越高。相反,标准差数值越小,代表回报较为稳定,风险亦较小。
例如,A、B两组各有6位学生参加同一次语文测验,A组的分数为95、85、75、65、55、45,B组的分数为73、72、71、69、68、67。这两组的平均数都是70,但A组的标准差约为17.08分,B组的标准差约为2.16分,说明A组学生之间的差距要比B组学生之间的差距大得多。
如是总体(即估算总体方差),根号内除以n(对应excel函数:STDEVP);
如是抽样(即估算样本方差),根号内除以(n-1)(对应excel函数:STDEV);
因为我们大量接触的是样本,所以普遍使用根号内除以(n-1)。
方差 variance
当数据分布比较分散(即数据在平均数附近波动较大)时,各个数据与平均数的差的平方和较大,方差就较大;当数据分布比较集中时,各个数据与平均数的差的平方和较小。因此方差越大,数据的波动越大;方差越小,数据的波动就越小。 [5]
样本中各数据与 样本平均数的差的平方和的平均数叫做样本方差;样本方差的 算术平方根叫做样本 标准差。样本方差和样本标准差都是衡量一个样本波动大小的量,样本方差或样本标准差越大,样本数据的波动就越大。
方差和标准差是测算离散趋势最重要、最常用的指标。方差是各变量值与其 均值 离差平方的平均数,它是测算 数值型数据 离散程度的最重要的方法。标准差为方差的算术平方根,用S表示。方差相应的计算公式为
标准差与方差不同的是,标准差和变量的计算单位相同,比方差清楚,因此很多时候我们分析的时候更多的使用的是标准差。
接下来看看mahout 代码:
mahout-mr-0.11.0.jar 包中 org.apache.mahout.math.hadoop.stats  是关于统计的包
BasicStats  基本的统计计算方法(均值、方差、标准差、等)
/*** Licensed to the Apache Software Foundation (ASF) under one or more* contributor license agreements.  See the NOTICE file distributed with* this work for additional information regarding copyright ownership.* The ASF licenses this file to You under the Apache License, Version 2.0* (the "License"); you may not use this file except in compliance with* the License.  You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package org.apache.mahout.math.hadoop.stats;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
import org.apache.mahout.common.HadoopUtil;
import org.apache.mahout.common.Pair;
import org.apache.mahout.common.iterator.sequencefile.PathType;
import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;import java.io.IOException;/*** Methods for calculating basic stats (mean, variance, stdDev, etc.) in map/reduce*/
public final class BasicStats {private BasicStats() {}/*** Calculate the variance of values stored as** @param input    The input file containing the key and the count* @param output   The output to store the intermediate values* @param baseConf* @return The variance (based on sample estimation)*/public static double variance(Path input, Path output,Configuration baseConf)throws IOException, InterruptedException, ClassNotFoundException {VarianceTotals varianceTotals = computeVarianceTotals(input, output, baseConf);return varianceTotals.computeVariance();}/*** Calculate the variance by a predefined mean of values stored as** @param input    The input file containing the key and the count* @param output   The output to store the intermediate values* @param mean The mean based on which to compute the variance* @param baseConf* @return The variance (based on sample estimation)*/public static double varianceForGivenMean(Path input, Path output, double mean,Configuration baseConf)throws IOException, InterruptedException, ClassNotFoundException {VarianceTotals varianceTotals = computeVarianceTotals(input, output, baseConf);return varianceTotals.computeVarianceForGivenMean(mean);}private static VarianceTotals computeVarianceTotals(Path input, Path output,Configuration baseConf) throws IOException, InterruptedException,ClassNotFoundException {Configuration conf = new Configuration(baseConf);conf.set("io.serializations","org.apache.hadoop.io.serializer.JavaSerialization,"+ "org.apache.hadoop.io.serializer.WritableSerialization");Job job = HadoopUtil.prepareJob(input, output, SequenceFileInputFormat.class,StandardDeviationCalculatorMapper.class, IntWritable.class, DoubleWritable.class,StandardDeviationCalculatorReducer.class, IntWritable.class, DoubleWritable.class,SequenceFileOutputFormat.class, conf);HadoopUtil.delete(conf, output);job.setCombinerClass(StandardDeviationCalculatorReducer.class);boolean succeeded = job.waitForCompletion(true);if (!succeeded) {throw new IllegalStateException("Job failed!");}// Now extract the computed sumPath filesPattern = new Path(output, "part-*");double sumOfSquares = 0;double sum = 0;double totalCount = 0;for (Pair<Writable, Writable> record : new SequenceFileDirIterable<>(filesPattern, PathType.GLOB, null, null, true, conf)) {int key = ((IntWritable) record.getFirst()).get();if (key == StandardDeviationCalculatorMapper.SUM_OF_SQUARES.get()) {sumOfSquares += ((DoubleWritable) record.getSecond()).get();} else if (key == StandardDeviationCalculatorMapper.TOTAL_COUNT.get()) {totalCount += ((DoubleWritable) record.getSecond()).get();} else if (key == StandardDeviationCalculatorMapper.SUM.get()) {sum += ((DoubleWritable) record.getSecond()).get();}}VarianceTotals varianceTotals = new VarianceTotals();varianceTotals.setSum(sum);varianceTotals.setSumOfSquares(sumOfSquares);varianceTotals.setTotalCount(totalCount);return varianceTotals;}/*** Calculate the standard deviation** @param input    The input file containing the key and the count* @param output   The output file to write the counting results to* @param baseConf The base configuration* @return The standard deviation*/public static double stdDev(Path input, Path output,Configuration baseConf) throws IOException, InterruptedException,ClassNotFoundException {return Math.sqrt(variance(input, output, baseConf));}/*** Calculate the standard deviation given a predefined mean** @param input    The input file containing the key and the count* @param output   The output file to write the counting results to* @param mean The mean based on which to compute the standard deviation* @param baseConf The base configuration* @return The standard deviation*/public static double stdDevForGivenMean(Path input, Path output, double mean,Configuration baseConf) throws IOException, InterruptedException,ClassNotFoundException {return Math.sqrt(varianceForGivenMean(input, output, mean, baseConf));}
}

方法:BasicStats.variance ()方差  BasicStats.stdDev()标准差

这篇关于mahout 计算方差标准差的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

Java - BigDecimal 计算分位(百分位)

日常开发中,如果使用数据库来直接查询一组数据的分位数,就比较简单,直接使用对应的函数就可以了,例如:         PERCENT_RANK() OVER(PARTITION BY 分组列名 ORDER BY 目标列名) AS 目标列名_分位数         如果是需要在代码逻辑部分进行分位数的计算,就需要我们自己写一个工具类来支持计算了 import static ja

OpenStack离线Train版安装系列—2计算节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

新一代车载(E/E)架构下的中央计算载体---HPC软件架构简介

老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、焦虑、毁掉你本就不多的热情和定力。 时间不知不觉中,快要来到夏末秋初。一年又过去了一大半,成