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
添加回答
舉報