12 个版本

0.5.0 2022 年 12 月 6 日
0.4.1 2021 年 9 月 3 日
0.3.3 2020 年 11 月 7 日
0.3.2 2020 年 10 月 14 日
0.1.1 2019 年 11 月 2 日

#205科学


用于 krabmaga

Apache-2.0

120KB
2K SLoC

Friedrich: 高斯过程回归

Crates.io docs

这个库实现了高斯过程回归,也称为克里金,在 Rust 中。我们的目标是提供一个坚实且功能丰富的构建块,供其他算法(如贝叶斯优化)使用。

高斯过程既能从其训练数据中提取大量信息,又能对其预测返回预测值和不确定性值。此外,它们可以处理非线性现象,考虑输入的不确定性,并在输出中编码先验信息。

所有这些特性使其成为当数据稀缺或希望输出具有不确定性条时进行回归的算法选择。

然而,算法的 O(n^3) 复杂性使得经典实现不适合大型数据集。

功能

此实现允许您

  • 使用默认参数或使用构建器模式定义高斯过程
  • 在多维数据上训练它
  • 在训练数据上拟合参数(核、先验和噪声)
  • 在出现条件不佳问题时,引入可选的 cholesky_epsilon 以使 Cholesky 分解 不可失败
  • 有效地添加额外样本(O(n^2))并重新拟合过程
  • 对于给定的输入预测均值、方差和协方差矩阵
  • 在给定位置采样分布
  • 使用 serde 保存和加载训练模型

(请参阅 todo.md 文件以获取当前发展的最新信息。)

代码示例

use friedrich::gaussian_process::GaussianProcess;

// trains a gaussian process on a dataset of one-dimensional vectors
let training_inputs = vec![vec![0.8], vec![1.2], vec![3.8], vec![4.2]];
let training_outputs = vec![3.0, 4.0, -2.0, -2.0];
let gp = GaussianProcess::default(training_inputs, training_outputs);

// predicts the mean and variance of a single point
let input = vec![1.];
let mean = gp.predict(&input);
let var = gp.predict_variance(&input);
println!("prediction: {} ± {}", mean, var.sqrt());

// makes several prediction
let inputs = vec![vec![1.0], vec![2.0], vec![3.0]];
let outputs = gp.predict(&inputs);
println!("predictions: {:?}", outputs);

// samples from the distribution
let new_inputs = vec![vec![1.0], vec![2.0]];
let sampler = gp.sample_at(&new_inputs);
let mut rng = rand::thread_rng();
println!("samples: {:?}", sampler.sample(&mut rng));

输入

该库的大多数方法目前可以与以下 输入 输出 对进行处理

  • Vec<f64> f64 单个,多维,样本
  • Vec<Vec<f64>> Vec<f64> 每个内部向量是一个训练样本
  • DMatrix<f64> DVector<f64> 使用每行一个样本的 nalgebra 矩阵
  • ArrayBase<f64, Ix1> f64 单个样本存储在 ndarray 数组中(使用 friedrich_ndarray 功能)
  • ArrayBase<f64, Ix2> Array1<f64> 每行是一个样本(使用 friedrich_ndarray 功能)

通过 Input 特性 提供添加您自己的对的方法。

为什么叫它 Friedrich?

高斯过程以 高斯分布 命名,而高斯分布本身是以 卡尔·弗里德里希·高斯 命名的。

依赖项

约 4MB
约 83K SLoC