crf-chain1-constrained-0.4.0: src/Data/CRF/Chain1/Constrained/DAG/Feature/Present.hs
-- | The module provides feature selection functions which extract
-- features present in the dataset, i.e. features which directly occure
-- the dataset.
module Data.CRF.Chain1.Constrained.DAG.Feature.Present
( presentFeats
, presentOFeats
, presentTFeats
, presentSFeats
) where
import Data.DAG (DAG)
import qualified Data.DAG as DAG
-- import Data.CRF.Chain1.Constrained.DAG.Dataset.Internal (DAG)
-- import qualified Data.CRF.Chain1.Constrained.DAG.Dataset.Internal as DAG
import Data.CRF.Chain1.Constrained.Core (X, Y, Lb, Feature)
import qualified Data.CRF.Chain1.Constrained.Core as C
-- | 'OFeature's which occur in the dataset.
presentOFeats :: [DAG a (X, Y)] -> [Feature]
presentOFeats =
concatMap sentOFeats
where
sentOFeats dag =
[ C.OFeature o x
| edgeID <- DAG.dagEdges dag
, let edgeLabel = DAG.edgeLabel edgeID dag
, o <- C.unX (fst edgeLabel)
, x <- lbs (snd edgeLabel) ]
-- | 'TFeature's which occur in the dataset.
presentTFeats :: [DAG a Y] -> [Feature]
presentTFeats =
concatMap sentTFeats
where
sentTFeats dag =
[ C.TFeature x y
| edgeID <- DAG.dagEdges dag
, x <- lbs (DAG.edgeLabel edgeID dag)
, prevEdgeID <- DAG.prevEdges edgeID dag
, y <- lbs (DAG.edgeLabel prevEdgeID dag) ]
-- | 'SFeature's which occur in the given dataset.
presentSFeats :: [DAG a Y] -> [Feature]
presentSFeats =
concatMap sentSFeats
where
sentSFeats dag =
[ C.SFeature x
| edgeID <- DAG.dagEdges dag
, DAG.isInitialEdge edgeID dag
, x <- lbs (DAG.edgeLabel edgeID dag) ]
-- | 'Feature's of all kinds which occur in the given dataset.
presentFeats :: [DAG a (X, Y)] -> [Feature]
presentFeats ds
= presentOFeats ds
++ presentTFeats (map (fmap snd) ds)
++ presentSFeats (map (fmap snd) ds)
-- | Retrieve the domain of the given probability distribution.
lbs :: Y -> [Lb]
lbs = map fst . C.unY