From 88ee78b1a163eaddee7e880ac73943456040fce0 Mon Sep 17 00:00:00 2001 From: alex-sh <alex-sh@yandex-team.ru> Date: Thu, 10 Feb 2022 16:50:03 +0300 Subject: Restoring authorship annotation for <alex-sh@yandex-team.ru>. Commit 2 of 2. --- library/cpp/linear_regression/welford.cpp | 186 +++++++++++++++--------------- 1 file changed, 93 insertions(+), 93 deletions(-) (limited to 'library/cpp/linear_regression/welford.cpp') diff --git a/library/cpp/linear_regression/welford.cpp b/library/cpp/linear_regression/welford.cpp index e1539fd506..e27b1994f6 100644 --- a/library/cpp/linear_regression/welford.cpp +++ b/library/cpp/linear_regression/welford.cpp @@ -1,106 +1,106 @@ -#include "welford.h" +#include "welford.h" #include <util/generic/ymath.h> - -void TMeanCalculator::Multiply(const double value) { - SumWeights *= value; -} - -void TMeanCalculator::Add(const double value, const double weight /*= 1.*/) { - SumWeights += weight; - if (SumWeights.Get()) { - Mean += weight * (value - Mean) / SumWeights.Get(); - } -} - -void TMeanCalculator::Remove(const double value, const double weight /*= 1.*/) { - SumWeights -= weight; - if (SumWeights.Get()) { - Mean -= weight * (value - Mean) / SumWeights.Get(); - } -} - -double TMeanCalculator::GetMean() const { - return Mean; -} - -double TMeanCalculator::GetSumWeights() const { - return SumWeights.Get(); -} - + +void TMeanCalculator::Multiply(const double value) { + SumWeights *= value; +} + +void TMeanCalculator::Add(const double value, const double weight /*= 1.*/) { + SumWeights += weight; + if (SumWeights.Get()) { + Mean += weight * (value - Mean) / SumWeights.Get(); + } +} + +void TMeanCalculator::Remove(const double value, const double weight /*= 1.*/) { + SumWeights -= weight; + if (SumWeights.Get()) { + Mean -= weight * (value - Mean) / SumWeights.Get(); + } +} + +double TMeanCalculator::GetMean() const { + return Mean; +} + +double TMeanCalculator::GetSumWeights() const { + return SumWeights.Get(); +} + void TMeanCalculator::Reset() { *this = TMeanCalculator(); } -void TCovariationCalculator::Add(const double firstValue, const double secondValue, const double weight /*= 1.*/) { - SumWeights += weight; - if (SumWeights.Get()) { - FirstValueMean += weight * (firstValue - FirstValueMean) / SumWeights.Get(); - Covariation += weight * (firstValue - FirstValueMean) * (secondValue - SecondValueMean); - SecondValueMean += weight * (secondValue - SecondValueMean) / SumWeights.Get(); - } -} - -void TCovariationCalculator::Remove(const double firstValue, const double secondValue, const double weight /*= 1.*/) { - SumWeights -= weight; - if (SumWeights.Get()) { - FirstValueMean -= weight * (firstValue - FirstValueMean) / SumWeights.Get(); - Covariation -= weight * (firstValue - FirstValueMean) * (secondValue - SecondValueMean); - SecondValueMean -= weight * (secondValue - SecondValueMean) / SumWeights.Get(); - } -} - -double TCovariationCalculator::GetFirstValueMean() const { - return FirstValueMean; -} - -double TCovariationCalculator::GetSecondValueMean() const { - return SecondValueMean; -} - -double TCovariationCalculator::GetCovariation() const { - return Covariation; -} - -double TCovariationCalculator::GetSumWeights() const { - return SumWeights.Get(); -} - +void TCovariationCalculator::Add(const double firstValue, const double secondValue, const double weight /*= 1.*/) { + SumWeights += weight; + if (SumWeights.Get()) { + FirstValueMean += weight * (firstValue - FirstValueMean) / SumWeights.Get(); + Covariation += weight * (firstValue - FirstValueMean) * (secondValue - SecondValueMean); + SecondValueMean += weight * (secondValue - SecondValueMean) / SumWeights.Get(); + } +} + +void TCovariationCalculator::Remove(const double firstValue, const double secondValue, const double weight /*= 1.*/) { + SumWeights -= weight; + if (SumWeights.Get()) { + FirstValueMean -= weight * (firstValue - FirstValueMean) / SumWeights.Get(); + Covariation -= weight * (firstValue - FirstValueMean) * (secondValue - SecondValueMean); + SecondValueMean -= weight * (secondValue - SecondValueMean) / SumWeights.Get(); + } +} + +double TCovariationCalculator::GetFirstValueMean() const { + return FirstValueMean; +} + +double TCovariationCalculator::GetSecondValueMean() const { + return SecondValueMean; +} + +double TCovariationCalculator::GetCovariation() const { + return Covariation; +} + +double TCovariationCalculator::GetSumWeights() const { + return SumWeights.Get(); +} + void TCovariationCalculator::Reset() { *this = TCovariationCalculator(); } -void TDeviationCalculator::Add(const double value, const double weight /*= 1.*/) { - const double lastMean = MeanCalculator.GetMean(); - MeanCalculator.Add(value, weight); - Deviation += weight * (value - lastMean) * (value - MeanCalculator.GetMean()); -} - -void TDeviationCalculator::Remove(const double value, const double weight /*= 1.*/) { - const double lastMean = MeanCalculator.GetMean(); - MeanCalculator.Remove(value, weight); - Deviation -= weight * (value - lastMean) * (value - MeanCalculator.GetMean()); -} - -double TDeviationCalculator::GetMean() const { - return MeanCalculator.GetMean(); -} - -double TDeviationCalculator::GetDeviation() const { - return Deviation; -} - -double TDeviationCalculator::GetStdDev() const { - const double sumWeights = GetSumWeights(); - if (!sumWeights) { - return 0.; - } - return sqrt(GetDeviation() / sumWeights); -} - -double TDeviationCalculator::GetSumWeights() const { - return MeanCalculator.GetSumWeights(); -} +void TDeviationCalculator::Add(const double value, const double weight /*= 1.*/) { + const double lastMean = MeanCalculator.GetMean(); + MeanCalculator.Add(value, weight); + Deviation += weight * (value - lastMean) * (value - MeanCalculator.GetMean()); +} + +void TDeviationCalculator::Remove(const double value, const double weight /*= 1.*/) { + const double lastMean = MeanCalculator.GetMean(); + MeanCalculator.Remove(value, weight); + Deviation -= weight * (value - lastMean) * (value - MeanCalculator.GetMean()); +} + +double TDeviationCalculator::GetMean() const { + return MeanCalculator.GetMean(); +} + +double TDeviationCalculator::GetDeviation() const { + return Deviation; +} + +double TDeviationCalculator::GetStdDev() const { + const double sumWeights = GetSumWeights(); + if (!sumWeights) { + return 0.; + } + return sqrt(GetDeviation() / sumWeights); +} + +double TDeviationCalculator::GetSumWeights() const { + return MeanCalculator.GetSumWeights(); +} void TDeviationCalculator::Reset() { *this = TDeviationCalculator(); -- cgit v1.2.3