#机器学习 #预测 #随机 #cp #世界 #方法

bin+lib random-world

在《随机世界中的算法学习》(ALRW)一书中介绍的机器学习方法(例如,一致性预测器)及其相关方法的实现,用于自信预测(例如,一致性预测器)

4 个版本 (2 个破坏性版本)

使用旧的 Rust 2015

0.3.0 2019 年 8 月 23 日
0.2.1 2018 年 2 月 21 日
0.2.0 2018 年 2 月 21 日
0.1.0 2017 年 11 月 9 日

机器学习 中排名 #283

MIT 许可证

77KB
871

random-world 构建状态 版本

这是《随机世界中的算法学习》(ALRW)一书中介绍的机器学习(ML)方法(例如,一致性预测器)及其相关方法的 Rust 实现,同时提供独立的二进制程序。

目标

以下是该库的主要目标。

  • 快速实现 ALRW 书中描述的方法
  • 有良好的文档记录
  • 提供独立的二进制程序
  • CP 方法应该能够使用现有 ML 库(例如,rusty-machinerustlearn)中的评分分类器
  • 易于与其他语言(例如 Python)接口

二进制程序

独立的二进制程序旨在涵盖库的大多数功能。它们在 .csv 文件上运行,并允许进行 CP 预测、测试可交换性等。

安装

要安装二进制程序,请安装 Rust 的包管理器 cargo。然后运行

$ cargo install random-world

这将安装系统上的二进制程序: cp-predicticp-predictmartingales

cp-predict

cp-predict 允许进行 批处理在线 CP 预测。它在一个训练集上运行 CP,并使用它来预测一个测试集;每个数据集应包含一个 CSV 文件,其中包含行

label, x1, x2, ...

其中 label 是标签 ID,x1、x2、... 是构成特征向量的值。标签 ID 需要是 0, 1, ..., n_labels-1(即没有缺失值);如果初始训练数据中(例如在线模式中)不是所有标签都可用,则可以指定 --n-labels

结果以 CSV 文件的形式返回,其中包含行

p1, p2, ...

其中每个值要么是预测(真/假)或 p 值([0,1] 区间的浮点数),具体取决于传递给 cp-predict 的标志;每一行包含每个标签的值。

示例

$ cp-predict knn -k 1 predictions.csv train_data.csv test_data.csv

train_data.csv 上运行 CP,使用非一致性度量 k-NN(k=1),预测 test_data.csv,并将输出存储到 predictions.csv。默认输出是 p 值;要输出实际预测,请使用 --epsilon 指定显著性水平。

要在数据集上以在线模式运行 CP(即每次预测一个对象并将其附加到训练示例中),只需指定训练文件

$ cp-predict knn -k 1 predictions.csv train_data.csv

更多选项在帮助文档中有说明

$ cp-predict -h

Predict data using Conformal Prediction.

If no <testing-file> is specified, on-line mode is assumed.

Usage: cp knn [--knn=<k>] [options] [--] <output-file> <training-file> [<testing-file>]
       cp kde [--kernel<kernel>] [--bandwidth=<bw>] [options] [--] <output-file> <training-file> [<testing-file>]
       cp (--help | --version)

Options:
    -e, --epsilon=<epsilon>     Significance level. If specified, the output are
                                label predictions rather than p-values.
    -s, --smooth                Smooth CP.
    --seed=<s>                   PRNG seed. Only used if --smooth set.
    -k, --knn=<kn>              Number of neighbors for k-NN [default: 5].
    --n-labels=<n>              Number of labels. If specified in advance it
                                slightly improves performances.
    -h, --help                  Show help.
    --version                   Show the version.

icp-predict

icp-predict 的语法目前与 cp-predict 相同:校准集的大小选择为训练集大小的一半。这将会改变(希望很快)。

martingales

从包含 p 值的文件中计算可交换的鞅。p 值应在单个标签问题的在线环境中使用 cp-predict 计算。

$ martingales -h

Test exchangeability using martingales.

Usage: martingales plugin [--bandwidth=<bw>] [options] <output-file> <pvalues-file>
       martingales power [--epsilon=<e>] [options] <output-file> <pvalues-file>
       martingales (--help | --version)

Options:
    --seed                      PRNG seed.
    -h, --help                  Show help.
    --version                   Show the version.

示例

查看 examples/non-iid.csv

0,1.77750,-0.84078
0,-1.68787,3.86305
0,-0.56455,0.17416
0,-0.86380,0.39916
...

这些代表异常时间序列数据,人工生成以作为此代码的示例;不要使用 它作为异常检测基准:它将几乎没有用处。每行包含一个标签(始终设置为 0,这是在下一步计算鞅所必需的),和一个向量。这些数据包含 200 个示例:前 100 个是根据以 [0, 0] 为中心的多元正态分布生成的,并且协方差矩阵为 [5, 5]。因此,“异常”部分的数据是在 100 个示例之后开始的。

要产生马丁格尔

# Use CP in on-line mode
cp-predict knn -k 1 pvalues.csv examples/non-iid.csv
# Martingales
martingales plugin --bandwidth=0.2 martingales.csv pvalues.csv

看看 martingales/martingales.csv:它现在应包含马丁格尔值,每行一个。你可以调用任何超过阈值的马丁格尔值(例如,20 或 100)。这里是这个特定示例的马丁格尔值。

以 20 为阈值,异常大约在 50 个示例之后发生。

图书馆

为了充分利用所有功能或将其集成到您的项目中,您可能需要使用实际库。

Cargo.toml 中包含以下内容

[dependencies]
random-world = "0.2.1"

快速入门

使用具有 k-NN 非一致性度量(k=2)和显著性水平 epsilon=0.3 的确定性(即非光滑)一致预测器。预测区域将包含正确标签的概率为 1-epsilon

#[macro_use(array)]
extern crate ndarray;
extern crate random_world;

use random_world::cp::*;
use random_world::ncm::*;

// Create a k-NN nonconformity measure (k=2)
let ncm = KNN::new(2);
// Create a Conformal Predictor with the chosen nonconformity
// measure and significance level 0.3.
let mut cp = CP::new(ncm, Some(0.3));

// Create a dataset
let train_inputs = array![[0., 0.],
                          [1., 0.],
                          [0., 1.],
                          [1., 1.],
                          [2., 2.],
                          [1., 2.]];
let train_targets = array![0, 0, 0, 1, 1, 1];
let test_inputs = array![[2., 1.],
                         [2., 2.]];

// Train and predict
cp.train(&train_inputs.view(), &train_targets.view())
  .expect("Failed prediction");
let preds = cp.predict(&test_inputs.view())
              .expect("Failed to predict");
assert!(preds == array![[false, true],
                        [false, true]]);

请参阅文档以获取更多示例。

功能

方法

  • 确定性和平滑一致预测器(又称,归纳一致预测器CP)
  • 确定性归纳一致预测器(ICP)
  • 用于交换性测试的插件和功率鞅
  • 文氏图预测器

非一致性度量

  • k-NN
  • KDE
  • 现有库(例如 rusty-machine)的机器学习评分器通用的包装器

二进制程序

  • CP(批量预测和在线)
  • 归纳CP(仅批量预测)

绑定

  • Python绑定

作者

类似项目

依赖关系

~10MB
~189K SLoC