clustering-0.2.0: benchmarks/Bench/Hierarchical.hs
module Bench.Hierarchical
( benchHierarchical ) where
import Criterion.Main
import qualified Data.Clustering.Hierarchical as C
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
import System.IO.Unsafe (unsafePerformIO)
import AI.Clustering.Hierarchical
import AI.Clustering.Hierarchical.Types
import Bench.Utils
benchHierarchical :: Benchmark
benchHierarchical =
let dists = computeDists euclidean xs
fn i j = dists ! (i,j)
xs = V.fromList $ unsafePerformIO $ randVectors 1000 5
in bgroup "Hierarchical clustering"
[ bgroup "AI.Clustering.Hierarchical"
[ bench "Average Linkage (n = 10)" $
whnf (\x -> hclust Average x fn) $! U.enumFromN 0 10
, bench "Average Linkage (n = 100)" $
whnf (\x -> hclust Average x fn) $! U.enumFromN 0 100
, bench "Average Linkage (n = 500)" $
whnf (\x -> hclust Average x fn) $! U.enumFromN 0 500
]
, bgroup "Data.Clustering.Hierarchical"
[ bench "Average Linkage (n = 10)" $
whnf (\x -> C.dendrogram C.UPGMA x fn) $! [0..9]
, bench "Average Linkage (n = 100)" $
whnf (\x -> C.dendrogram C.UPGMA x fn) $! [0..99]
, bench "Average Linkage (n = 500)" $
whnf (\x -> C.dendrogram C.UPGMA x fn) $! [0..499]
]
, bgroup "Distance matrix"
[ bench "computeDists" $
whnf (\x -> computeDists euclidean x) xs
, bench "computeDists'" $
whnf (\x -> computeDists' euclidean x) xs
]
]