猿问

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

我正在尝试解决一本统计书中的练习,并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已经需要这种简单的期望值和方差计算?


HUX布斯
浏览 121回答 2
2回答

阿波罗的战车

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

波斯汪

它有效。但有点长。@Test@DisplayName("E8.2 : Déterminer la distribution de probabilité d'une v.a. X")public void distributionVariableAleatoireX() {&nbsp; &nbsp;StructType schema = new StructType()&nbsp; &nbsp; &nbsp;.add("x", IntegerType, false)&nbsp; &nbsp; &nbsp;.add("Px", DoubleType, false);&nbsp; &nbsp;List<Row> rows = new ArrayList<>();&nbsp; &nbsp;rows.add(RowFactory.create(1, 0.1));&nbsp; &nbsp;rows.add(RowFactory.create(2, 0.4));&nbsp; &nbsp;rows.add(RowFactory.create(3, 0.2));&nbsp; &nbsp;rows.add(RowFactory.create(4, 0.1));&nbsp; &nbsp;rows.add(RowFactory.create(5, 0.1));&nbsp; &nbsp;rows.add(RowFactory.create(6, 0.1));&nbsp; &nbsp;Dataset<Row> ds = this.session.createDataFrame(rows, schema);&nbsp; &nbsp;double esperance = ds.agg(sum(col("x").multiply(col("Px")))).first().getDouble(0);&nbsp; &nbsp;Column variation = col("x").minus(esperance);&nbsp; &nbsp;Column variationCarre = variation.multiply(variation);&nbsp; &nbsp;Column termeCalculVariance = col("Px").multiply(variationCarre);&nbsp; &nbsp;double variance = ds.agg(sum(termeCalculVariance)).first().getDouble(0);&nbsp; &nbsp;LOGGER.info("E(X) = {}, V(X) = {}", esperance, variance);}E(X) = 3.0V(X) = 2.2
随时随地看视频慕课网APP

相关分类

Java
我要回答