为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Spark 定义带有数字列表及其相关概率的随机变量

使用 Spark 定义带有数字列表及其相关概率的随机变量

HUX布斯 2023-07-28 16:31:56
我正在尝试解决一本统计书中的练习,并Spark逐步介绍自己MLib。但它只是基本的统计工具。出现的一个简单问题是用这种概率分布定义的随机变量:x   | 1    2    3    4    5    6 --------------------------------- Px  |0.1  0.4  0.2  0.1  0.1  0.1我可以用笔和纸计算期望值和方差。但我想用Spark它来代替。然而,我认为没有办法声明一个数字列表以及一个发生概率列表。我怎样才能做到这一点Spark?是否MLib已经需要这种简单的期望值和方差计算?
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

您可以创建一个包含两列的数据框xPx然后例如对于期望值做df.agg(sum(col("x") * col("Px")).alias("expected_value")).first()
对于方差,您需要使用方差公式。
为此不需要 MLib

查看完整回答
反对 回复 2023-07-28
?
波斯汪

TA贡献1811条经验 获得超4个赞

它有效。但有点长。


@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

查看完整回答
反对 回复 2023-07-28
  • 2 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信