首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用星火定义一个随机变量,包括一个数字列表及其相关概率

用星火定义一个随机变量,包括一个数字列表及其相关概率
EN

Stack Overflow用户
提问于 2019-09-15 10:21:36
回答 2查看 36关注 0票数 0

我正试着用Spark从一本统计手册中解决练习问题,逐步向MLib介绍我自己。但是,它只是基本的统计工具。

一个简单的问题是用这种概率分布定义的随机变量:

代码语言:javascript
运行
复制
x   | 1    2    3    4    5    6
---------------------------------
Px  |0.1  0.4  0.2  0.1  0.1  0.1

我可以用笔和纸计算期望值和方差。但是我想用Spark代替。

然而,我看不出有可能出现的概率列表所附的数字列表。

我怎样才能用Spark做到这一点呢?

对于这种简单的期望值和方差计算,是否已经需要MLib

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-15 11:15:26

您可以创建一个包含两个列xPx的数据格式,例如,对于期望值do df.agg(sum(col("x") * col("Px")).alias("expected_value")).first()

对于方差,您需要使用方差公式。

这不需要MLib

票数 1
EN

Stack Overflow用户

发布于 2019-09-15 13:39:11

@Paul (下面,这个帖子已经插入在你的前面了吗?)奇怪)

它起作用了。但有点长。

代码语言:javascript
运行
复制
@Test
@DisplayName("E8.2 : Déterminer la distribution de probabilité d'une v.a. X")
public void distributionVariableAleatoireX() {
   StructType schema = new StructType()
     .add("x", IntegerType, false)
     .add("Px", DoubleType, false);

   List<Row> rows = new ArrayList<>();
   rows.add(RowFactory.create(1, 0.1));
   rows.add(RowFactory.create(2, 0.4));
   rows.add(RowFactory.create(3, 0.2));
   rows.add(RowFactory.create(4, 0.1));
   rows.add(RowFactory.create(5, 0.1));
   rows.add(RowFactory.create(6, 0.1));
   Dataset<Row> ds = this.session.createDataFrame(rows, schema);

   double esperance = ds.agg(sum(col("x").multiply(col("Px")))).first().getDouble(0);

   Column variation = col("x").minus(esperance);
   Column variationCarre = variation.multiply(variation);
   Column termeCalculVariance = col("Px").multiply(variationCarre);

   double variance = ds.agg(sum(termeCalculVariance)).first().getDouble(0);

   LOGGER.info("E(X) = {}, V(X) = {}", esperance, variance);
}

E(X) = 3.0

V(X) = 2.2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57943188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档