packages feed

HLearn-distributions-0.0.1: src/examples/Criterion.hs

import Criterion.Main

import Statistics.Distribution.Normal
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Generic as G

import HLearn.Algebra
import HLearn.Models.Distributions
-- import qualified HLearn.Models.Distributions.GaussianOld as GO
-- import qualified HLearn.Models.Distributions.GaussianOld2 as GO2

import qualified Control.ConstraintKinds as CK

size = 10^8
main = defaultMain 
    [ bench "HLearn-Gaussian" $ nf ((train :: VU.Vector Double -> Gaussian Double)) (VU.enumFromN (0::Double) size)
    , bench "HLearn-Gaussian-Parallel" $ whnf (parallel $ (train :: VU.Vector Double -> Gaussian Double)) (VU.enumFromN (0::Double) size)
--     , bench "HLearn-Gaussian-List" $ nf (train :: [Double] -> Gaussian Double) [0..fromIntegral size]
    , bench "statistics-Gaussian" $ whnf (normalFromSample . VU.enumFromN 0) (size)
    ]
    
    {-bench "batch train [] 1e6" $ nf ((batch train) GaussianParams) [0..1e6::Double]
--     , bench "batch train V 1e6"  $ nf ((batch train) GaussianParams) (V.enumFromN (0::Double) (10^6))
--     , bench "batch train VU 1e6" $ nf ((batch train) GaussianParams) (VU.enumFromN (0::Double) [0..1e6::Double])
--     , bench "parallel2 batch train [] 1e6" $ nf ((parallel $ batch train) GaussianParams) (V.enumFromN (0::Double) (10^7))
    ,-} 
--     bench "Parallel GaussianOld2" $ nf (parallel $ batch (train GO2.GaussianParams)) (VU.enumFromN (0::Double) (10^8))
--     , bench "GaussianOld2" $ nf (batch (train GO2.GaussianParams)) (VU.enumFromN (0::Double) (10^8))
--     bench "Parallel GaussianOld" $ nf (parallel $ batch (train GO.GaussianParams)) (VU.enumFromN (0::Double) (10^8))
--     , bench "GaussianOld" $ nf (batch (train GO.GaussianParams)) (VU.enumFromN (0::Double) (10^8))
--      bench "Parallel Gaussian2" $ nf (parallel $ batch (train GaussianParams)) (VU.enumFromN (0::Double) (10^8))
--     , bench "Gaussian2" $ nf (batch (train GaussianParams)) (VU.enumFromN (0::Double) (10^8))
    
    {-bench "Parallel Gaussian" $ nf (parallel $ batch (trainSG)) (VU.enumFromN (0::Double) (10^8))
    , bench "Gaussian" $ nf (batch (trainSG)) (VU.enumFromN (0::Double) (10^8))
    ,-} -- bench "Categorical" $ nf (train :: [String] -> Categorical String Double) (concat $ replicate (10^4) ["a","b"])
--     , bench "normalFromSample - 1e5" $ whnf (normalFromSample . VU.enumFromN 1) (10^8)

    
-- instance NFData NormalDistribution where
--     rnf (NormalDistribution a b c d) = deepseq a $ deepseq b $ deepseq c $ rnf d

-- parallel3 strat train = \modelparams datapoint ->
--     foldl1 (<>) $ map (CK.foldl1 (<>) . CK.fmap (train modelparams . CK.pure)) (CK.partition 2 datapoint)


-- test (ds1,ds2) = m1 <> m2
--     where
--         [m1,m2] = parMap rdeepseq ((batch train) GaussianParams) [ds1,ds2]
-- --        [m1,m2] = parMap rdeepseq ((batch train) GaussianParams) [ds1,ds2]
-- 
-- -- test (ds1,ds2) = runEval $ do
-- --     let [m1,m2] = {-parMap rdeepseq-} map (batch train GaussianParams) [ds1,ds2]
-- -- --     m1 <- rparWith rseq $ batch train GaussianParams ds1
-- -- --     m2 <- rparWith rseq $ batch train GaussianParams ds2
-- -- {-    let m1 = batch train GaussianParams ds1
-- --     let m2 = batch train GaussianParams ds2-}
-- --     return $ m1 <> m2
-- 
-- dsL = replicate 4 ds
-- -- dsL = [ds1,ds2]
-- ds = [0..1000000::Double]
-- ds1 = V.enumFromN (0::Double) (10^7)
-- ds2 = V.enumFromN (0.5::Double) (10^7)