packages feed

online 0.4.0.0 → 0.5.0

raw patch · 3 files changed

+71/−3 lines, 3 filesdep +backprop

Dependencies added: backprop

Files

online.cabal view
@@ -1,6 +1,6 @@-cabal-version: 2.0+cabal-version: 3.0 name:           online-version:        0.4.0.0+version:        0.5.0 synopsis:       online statistics description:    transformation of statistics to online algorithms category:       statistics@@ -9,7 +9,7 @@ author:         Tony Day maintainer:     tonyday567@gmail.com copyright:      Tony Day-license:        BSD3+license:        BSD-3-Clause license-file:   LICENSE build-type:     Simple @@ -21,6 +21,7 @@   exposed-modules:       Online       Online.Averages+      Online.AveragesB       Online.Medians       Online.Quantiles   hs-source-dirs:@@ -32,6 +33,7 @@     , tdigest     , vector     , vector-algorithms+    , backprop   default-language: Haskell2010  test-suite test
src/Online.hs view
@@ -1,10 +1,12 @@ -- | online library module Online   ( module Online.Averages+  , module Online.AveragesB   , module Online.Medians   , module Online.Quantiles   ) where  import Online.Quantiles import Online.Averages+import Online.AveragesB import Online.Medians
+ src/Online/AveragesB.hs view
@@ -0,0 +1,64 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE CPP #-}+{-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}++-- | online statistics based on a moving average+module Online.AveragesB+  ( foldB,+    foldB',+    maB,+    absmaB,+    sqmaB,+    stdB,+    std'+  ) where++import Prelude+import Numeric.Backprop as B+import qualified Prelude.Backprop as PB+import Control.Foldl (Fold(..))++foldB' :: (Backprop a, Backprop b, Reifies s W, Fractional b) => (BVar s a -> BVar s b) -> BVar s b -> BVar s [a] -> BVar s b+foldB' f r xs = divide (PB.foldl' (step' f r) (T2 0 0) xs) where+  step' f' r' (T2 s c) a = uncurry T2 ((r'*) $ s + f' a, (r'*) $ c + 1)  +  divide (T2 s c) = s / c+++online :: (Reifies s W, Fractional b) => (BVar s a -> BVar s b) -> (BVar s b -> BVar s b) -> Fold (BVar s a) (BVar s b)+online f g = Fold step begin extract+  where+    begin = (0, 0)+    step (s, c) a = (g $ s + f a, g $ c + 1)+    extract (s, c) = s / c++ma' :: (Reifies s W, Fractional b) => BVar s b -> Fold (BVar s b) (BVar s b)+ma' r = online id (*r)++sqma' :: (Reifies s W, Fractional b) => BVar s b -> Fold (BVar s b) (BVar s b)+sqma' r = online (\x -> x * x) (*r)++std' :: (Reifies s W, Floating b) => BVar s b -> Fold (BVar s b) (BVar s b)+std' r = (\s ss -> sqrt (ss - s ** 2)) <$> ma' r <*> sqma' r++-- coerceVar++foldB :: (Reifies s W) => (BVar s Double -> BVar s Double) -> BVar s Double -> BVar s [Double] -> BVar s Double+foldB f r xs = divide (PB.foldl' (step' f r) (T2 0 0) xs) where+  step' f' r' (T2 s c) a = uncurry T2 ((r*) $ s + f' a, (r'*) $ c + 1)  +  divide (T2 s c) = s / c++stdB :: Reifies s W => BVar s Double -> BVar s [Double] -> BVar s Double+stdB r xs = (\ss s -> sqrt (ss - s ** 2)) (foldB id r xs) (foldB (\x -> x * x) r xs)++-- stdB' :: Reifies s W => BVar s Double -> BVar s [Double] -> BVar s Double+-- stdB' r xs = (\(T2 ss s) -> sqrt (ss - s ** 2)) (foldB' (\x -> (T2 x (x*x))) (T2 r r) xs)++maB :: Reifies s W => BVar s Double -> BVar s [Double] -> BVar s Double+maB r = foldB id r++absmaB :: Reifies s W => BVar s Double -> BVar s [Double] -> BVar s Double+absmaB r = foldB abs r++sqmaB :: Reifies s W => BVar s Double -> BVar s [Double] -> BVar s Double+sqmaB r = foldB (\x -> x * x) r+