#机器学习 #回归 #关系 #增加 #配对 #单调 #数据

pav_regression

等距回归的相邻违规对算法

25 个版本

0.5.1 2024 年 7 月 8 日
0.4.0 2023 年 4 月 12 日
0.3.4 2023 年 3 月 29 日
0.2.9 2022 年 1 月 16 日
0.2.0 2021 年 3 月 3 日

#123机器学习

Download history 60/week @ 2024-04-19 67/week @ 2024-04-26 105/week @ 2024-05-03 221/week @ 2024-05-10 259/week @ 2024-05-17 336/week @ 2024-05-24 269/week @ 2024-05-31 278/week @ 2024-06-07 58/week @ 2024-06-14 59/week @ 2024-06-21 7/week @ 2024-06-28 261/week @ 2024-07-05 65/week @ 2024-07-12 3/week @ 2024-07-19 9/week @ 2024-07-26 6/week @ 2024-08-02

92 每月下载量
2 个crate中使用(通过 freenet

LGPL-3.0-or-later

34KB
379

Rust 的相邻违规对

Rust crates.io

概述

这是用于等距回归的相邻违规对算法的实现。注意这个算法也被称为“池相邻违规对”。

什么是“等距回归”?为什么我应该关心它?

想象一下,你有两个变量 xy,你不知道它们之间的关系,但你知道如果 x 增加,那么 y 也会增加,如果 x 减少,那么 y 也会减少。或者可能是相反的,如果 x 增加,那么 y 减少,如果 x 减少,那么 y 增加。

这样的等距或单调关系的例子包括

  • x 是汽车油门施加的压力,y 是汽车的加速度(加速度随着压力的增加而增加)
  • x 是 Web 服务器接收 HTTP 请求的速度,y 是 Web 服务器的 CPU 使用率(随着请求速率的增加,服务器的 CPU 使用率会增加)
  • x 是商品的价格,y 是有人购买该商品的概率(这是一个递减关系,因为 x 增加 y 减少)

这些都是两个变量之间等距关系的例子,这种关系很可能比线性关系更复杂。

因此,我们知道 xy 之间的关系是等距的,而且我们还说我们已经能够收集关于实际 xy 值的数据。

我们真正想做到的是,对于任何给定的 x,估计 y 将是多少,或者对于任何给定的 y,需要多少 x

当然,现实世界的数据是嘈杂的,不太可能是严格同质的,所以我们希望有一种方法,允许我们输入这些原始嘈杂数据,找出xy之间的实际关系,然后利用这个关系来预测给定xy值,或者预测哪个x值会得到特定的y值。这就是成对相邻违规算法的目的。

...那我为什么要关心呢?

使用我上面提供的例子

  • 自动驾驶汽车可以使用它来学习施加多少油门压力才能获得期望的加速度
  • 自动扩展系统可以使用它来帮助预测处理特定量的网络流量所需的网络服务器数量
  • 零售商可以使用它来选择能够最大化利润的商品价格(即“收益优化”)

在线广告中的同质回归

如果你有额外的一小时,并且对了解在线广告的工作原理感兴趣——你应该查看我2015年给出的这个讲座(链接),我在其中解释了我们如何使用成对相邻违规来解决一些有趣的问题。

一图胜千言

以下是PAV从一些非常嘈杂的输入数据中提取的关系,其中xy之间存在增加的关系

PAV in action

功能

  • 点之间的智能线性插值以及在训练数据域之外的扩展
  • 在不牺牲代码可读性的前提下相当高效地实现
  • 会智能地扩展以计算x值大于或小于用于构建PAV模型值时的y

使用示例

    use pav_regression::pav::{IsotonicRegression, Point};

    // ..

    let points = &[
        Point::new(0.0, 1.0),
        Point::new(1.0, 2.0),
        Point::new(2.0, 1.5),
    ];

    let regression = IsotonicRegression::new_ascending(points);
    assert_eq!(
        regression.interpolate(1.5), 1.75
    );

更多示例请参阅单元测试

许可证

Ian ClarkeLGPL版本3下发布。

另请参阅

  • 同一位作者为Kotlin/JVM提供的PAV的早期实现:(链接)

依赖项

~0.6–1.2MB
~27K SLoC