我正试着用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
?
发布于 2019-09-15 11:15:26
您可以创建一个包含两个列x
和Px
的数据格式,例如,对于期望值do df.agg(sum(col("x") * col("Px")).alias("expected_value")).first()
对于方差,您需要使用方差公式。
这不需要MLib
发布于 2019-09-15 13:39:11
@Paul (下面,这个帖子已经插入在你的前面了吗?)奇怪)
它起作用了。但有点长。
@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
https://stackoverflow.com/questions/57943188
复制相似问题