{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE ExplicitNamespaces #-}
module Text.HaskSeg.Metrics (precision, recall, f1) where
import Data.Set (Set)
import qualified Data.Set as Set
precision :: [Bool] -> [Bool] -> Double
precision guesses golds = numer / denom
where
denom = (fromIntegral . length . filter (== True)) guesses
numer = (fromIntegral . length . filter (== (True, True))) (zip guesses golds)
recall :: [Bool] -> [Bool] -> Double
recall guesses golds = numer / denom
where
denom = (fromIntegral . length . filter (== True)) golds
numer = (fromIntegral . length . filter (== (True, True))) (zip guesses golds)
f1 :: [Bool] -> [Bool] -> Double
f1 guesses golds = 2.0 * numer / denom
where
p = precision guesses golds
r = recall guesses golds
numer = p * r
denom = p + r