ourenergy/imputer

用于填充缺失数据的库

0.2.0 2019-02-25 02:02 UTC

This package is auto-updated.

Last update: 2024-09-25 14:20:23 UTC


README

Build Status Latest Stable Version

Imputer

通过应用策略来填充缺失数据的库。灵感来源于 php-ai/php-ml

安装

composer require ourenergy/imputer

用法

Imputer 通过获取一个数组键的列表和一个部分值集,然后填充缺失部分。任何在键列表中存在但没有对应值的键都被视为缺失。

假设我们有一组不完整的数据;

$knownData = [
    0 => 0.5,
 // 1 => ???
    2 => 1.0,
    3 => 1.2,
 // 4 => ???
    5 => 3.0
];

我们可以应用线性插值来猜测中间值可能是什么;

$keys = [
    0,
    1,
    2,
    3,
    4,
    5
];

$knownData = [
    0 => 0.5,
    2 => 1.0,
    3 => 1.2,
    5 => 3.0
];

$imputer = new Imputer($keys, $knownData, new LinearInterpolation());

$result = $imputer->generate();

结果将是一组完整的数据;

Array
(
    [0] => 0.5
    [1] => 0.75
    [2] => 1
    [3] => 1.2
    [4] => 2.1
    [5] => 3
)

策略

Imputer 默认提供了一些基本的策略。您可以通过实现 Imputer\Strategy 接口来编写自己的策略。

线性插值

如上所述,LinearInterpolation 策略将在前一个和下一个已知值之间生成一系列步骤。

例如,在 1.0 和 3.0 之间生成 3 个步骤将创建 [1.5, 2.0, 2.5]

加权插值

LinearInterpolation 策略类似,它将插值缺失值,但增加了对每个结果应用权重的功能。这可以用于将历史趋势应用到计算数据或您不希望在图表上的点之间有直线。

$keys = range(0, 5);

$knownData = [
    0 => 10,
    2 => 30,
    5 => 60
];

$weights = [
    1 => 1,
    3 => 0.7,
    4 => 0.5
];

$strategy = new WeightedInterpolation($weights);
$imputer = new Imputer($keys, $knownData, $strategy);

$result = $imputer->generate();

将产生以下结果;

Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 28
    [4] => 25
    [5] => 60
)

替换

Substitution 策略将使用现有值集来填充任何缺失部分。

$keys = range(0, 5);

$knownData = [
    0 => 10,
    2 => 30,
    5 => 60
];

$substitutes = [
    1 => 'a',
    3 => 'b'
];

$strategy = new Substitution($substitutes, 'x');
$imputer = new Imputer($keys, $knownData, $strategy);

$result = $imputer->generate();

将产生以下结果;

Array
(
    [0] => 10
    [1] => a
    [2] => 30
    [3] => b
    [4] => x
    [5] => 60
)