纯 MoonBit 保形预测:有限样本分位数、回归区间、分类集合与分组诊断
moon add LuoYunxin1/moonconformal@0.1.0import {
"LuoYunxin1/moonconformal" @conformal,
}
options(is_main: true)fn main {
try {
let scores = @conformal.absolute_scores(
[1.0, 2.0, 3.0, 4.0],
[0.0, 0.0, 0.0, 0.0],
)
let intervals = @conformal.predict_absolute(scores, [10.0], 0.2)
println(@conformal.intervals_to_json(intervals))
} catch {
_ => abort("calibration failed")
}
}git clone https://github.com/LuoYunxin1/moonconformal.git
cd moonconformal
moon run examples/regression
moon run examples/classification
moon run examples/platform| 场景 | 校准 | 预测/诊断 |
|---|---|---|
| 普通 split conformal | absolute_scores(truth, prediction) | predict_absolute(scores, query, alpha) |
| 异方差尺度 | scaled_scores(truth, prediction, scale) | predict_scaled(scores, query, query_scale, alpha) |
| CQR 分位数回归 | cqr_scores(truth, lower, upper) | predict_cqr(scores, query_lower, query_upper, alpha) |
| 不对称尾 | tail_scores(truth, prediction) | predict_tails(scores, query, alpha, low_fraction) |
| 多分类 | calibrate_classifier(rows, labels, Lac/Aps/Raps(lambda,k)) | model.predict(rows, alpha)、model.p_values(rows) |
| 固定组别 Mondrian | grouped_scores(values, group_names) | predict_grouped_absolute、groups.get(name) |
| CV+ | cvplus_calibrate(truth, out_of_fold, fold_ids, folds) | model.predict(test_by_fold, alpha) |
| 多输出联合矩形 | calibrate_vectors(truth, prediction, scales) | model.predict(query, query_scales, alpha) |
| 自定义非一致性 | Scores::new(values) | threshold、p_value、select_by_p_value |
| 评估 | evaluate_intervals、evaluate_sets | evaluate_grouped_intervals、evaluate_vectors |
| 分辨率 | scores.resolution(alpha) | minimum_calibration_count(alpha)、threshold_path、interval_path |
| 状态/结果交换 | to_snapshot / from_snapshot | intervals_to_json/from_json、sets_to_json/from_json |
let model = @conformal.calibrate_classifier(
[[0.8, 0.2], [0.6, 0.4], [0.7, 0.3], [0.9, 0.1]],
[0, 0, 0, 0],
@conformal.Lac,
)
let sets = model.predict([[0.7, 0.3]], 0.2)
println(@conformal.sets_to_json(sets, 2)) // rows=[[0]]moon info
moon fmt
moon fmt --check
moon check --deny-warn
moon test --deny-warn
moon build --deny-warn
python3 tools/oracle.py --target wasm-gcpub(all) suberror ConformalError {
Invalid(String)
ResourceLimit(String)
UnknownGroup(String)
} derive(Debug)pub(all) struct CalibrationResolution {
count : Int
smallest_p_value : Double
rank : Int
finite_threshold : Bool
threshold : Double
tied_at_threshold : Int
}pub struct ClassCalibrator {
// private fields
}fn ClassCalibrator::p_values(self : ClassCalibrator, rows : Array[Array[Double]]) -> Array[Array[Double]] raise ConformalErrorfn ClassCalibrator::predict(self : ClassCalibrator, rows : Array[Array[Double]], alpha : Double) -> Array[Array[Int]] raise ConformalErrorpub struct CvPlus {
// private fields
}pub struct DataSplit {
// private fields
}fn DataSplit::calibration_values(self : DataSplit, values : Array[Double]) -> Array[Double] raise ConformalErrorfn DataSplit::evaluation_values(self : DataSplit, values : Array[Double]) -> Array[Double] raise ConformalErrorpub struct GroupScores {
// private fields
}fn GroupScores::thresholds(self : GroupScores, alpha : Double) -> Array[(String, Double)] raise ConformalErrorpub(all) struct Interval {
lower : Double
upper : Double
}pub(all) struct IntervalMetrics {
count : Int
covered : Int
empty : Int
unbounded : Int
mean_width : Double
coverage : Double
}pub struct Scores {
// private fields
}pub(all) struct SetMetrics {
count : Int
covered : Int
empty : Int
singletons : Int
mean_size : Double
coverage : Double
singleton_accuracy : Double?
}pub struct TailScores {
// private fields
}pub struct VectorCalibrator {
// private fields
}fn VectorCalibrator::predict(self : VectorCalibrator, prediction : Array[Array[Double]], scale : Array[Array[Double]], alpha : Double) -> Array[Array[Interval]] raise ConformalErrorpub(all) struct VectorMetrics {
count : Int
dimensions : Int
covered : Int
coverage : Double
per_dimension : Array[IntervalMetrics]
}fn absolute_scores(truth : Array[Double], prediction : Array[Double]) -> Scores raise ConformalErrorfn calibrate_classifier(rows : Array[Array[Double]], labels : Array[Int], rule : SetRule) -> ClassCalibrator raise ConformalErrorfn calibrate_vectors(truth : Array[Array[Double]], prediction : Array[Array[Double]], scale : Array[Array[Double]]) -> VectorCalibrator raise ConformalErrorfn cqr_scores(truth : Array[Double], lower : Array[Double], upper : Array[Double]) -> Scores raise ConformalErrorfn cvplus_calibrate(truth : Array[Double], out_of_fold : Array[Double], fold : Array[Int], folds : Int) -> CvPlus raise ConformalErrorfn data_split(size : Int, train : Array[Int], calibration : Array[Int], evaluation : Array[Int]) -> DataSplit raise ConformalErrorfn evaluate_grouped_intervals(truth : Array[Double], intervals : Array[Interval], groups : Array[String]) -> Array[GroupIntervalMetrics] raise ConformalErrorfn evaluate_intervals(truth : Array[Double], intervals : Array[Interval]) -> IntervalMetrics raise ConformalErrorfn evaluate_sets(truth : Array[Int], sets : Array[Array[Int]], classes : Int) -> SetMetrics raise ConformalErrorfn evaluate_vectors(truth : Array[Array[Double]], rectangles : Array[Array[Interval]]) -> VectorMetrics raise ConformalErrorfn grouped_scores(values : Array[Double], groups : Array[String]) -> GroupScores raise ConformalErrorfn interval_path(scores : Scores, prediction : Double, levels : Array[Double]) -> Array[Interval] raise ConformalErrorfn interval_score(interval : Interval, truth : Double, alpha : Double) -> Double raise ConformalErrorfn predict_absolute(scores : Scores, prediction : Array[Double], alpha : Double) -> Array[Interval] raise ConformalErrorfn predict_grouped_absolute(scores : GroupScores, prediction : Array[Double], groups : Array[String], alpha : Double) -> Array[Interval] raise ConformalErrorfn predict_tails(scores : TailScores, prediction : Array[Double], alpha : Double, low_fraction : Double) -> Array[Interval] raise ConformalErrorfn scaled_scores(truth : Array[Double], prediction : Array[Double], scale : Array[Double]) -> Scores raise ConformalErrorfn select_by_p_value(calibration : Scores, candidates : Array[Double], alpha : Double) -> Array[Int] raise ConformalErrorfn tail_scores(truth : Array[Double], prediction : Array[Double]) -> TailScores raise ConformalError