2 回答

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

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
添加回答
举报