Normalizacja danych – PHP-ML
|Normalizacja to proces skalowania pojedynczych próbek w celu otrzymania małego, specyficznego przedziału. Przykładowo przekształcamy dane wejściowe w taki sposób, aby mieściły się w przedziale [-1, 1] lub [0, 1].
Normalizacja to po prostu metoda uzyskania wszystkich danych na tej samej skali: jeżeli wartości różnych danych są szalenie różne, może to mieć negatywny efekt na zdolność uczenia się (w zależności od wybranej metody). Zapewnienie znormalizowanych danych pozwoli dobrze wyważyć wartości i zabezpieczy przed nieoczekiwanymi efektami.
W bibliotece PHP-ML zaimplementowałem dwie metody normalizacji:
Norma L1
Matematyczne wyjaśnienie: http://mathworld.wolfram.com/L1-Norm.html
use Phpml\Preprocessing\Normalizer;
$samples = [
[1, -1, 2],
[2, 0, 0],
[0, 1, -1],
];
$normalizer = new Normalizer(Normalizer::NORM_L1);
$normalizer->preprocess($samples);
Dane po przetworzeniu:
$samples = [
[0.25, -0.25, 0.5],
[1.0, 0.0, 0.0],
[0.0, 0.5, -0.5],
];
Norma L2
Matematyczne wyjaśnienie: http://mathworld.wolfram.com/L2-Norm.html
use Phpml\Preprocessing\Normalizer;
$samples = [
[1, -1, 2],
[2, 0, 0],
[0, 1, -1],
];
$normalizer = new Normalizer();
$normalizer->preprocess($samples);
Dane po przetworzeniu:
$samples = [
[0.4, -0.4, 0.81],
[1.0, 0.0, 0.0],
[0.0, 0.7, -0.7],
];
L1 vs L2
Różnice pomiędzy normą L1 i L2, opisane bardziej dokładnie: http://www.chioka.in/differences-between-l1-and-l2-as-loss-function-and-regularization/