packages feed

HLearn-classification-0.0.1: src/HLearn/Models/Classification.hs

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FunctionalDependencies, UndecidableInstances, FlexibleContexts, BangPatterns #-}

module HLearn.Models.Classification
    where

import Data.Number.LogFloat

import HLearn.Algebra
import HLearn.Models.Distributions.Categorical
import HLearn.DataContainers


-------------------------------------------------------------------------------
-- bool <-> int

indicator :: (Num a) => Bool -> a
indicator b = 
    if b
        then 1
        else 0                 

bool2num :: (Num a) => Bool -> a
bool2num b = 
    if b
        then 1
        else -1
                 
num2bool :: (Ord a, Num a) => a -> Bool
num2bool a = 
    if a<0
        then False
        else True 

-------------------------------------------------------------------------------
-- ClassificationParams

data ClassificationParams label params = ClassificationParams
    { cparams :: params
    , datadesc :: DataDesc label
    }

-------------------------------------------------------------------------------
-- Classification

class {-(Label label) =>-} ProbabilityClassifier model datatype label | model -> label where
    probabilityClassify :: model -> datatype -> Categorical label Double
    
--     straightClassify :: model -> datatype -> label
--     straightClassify = mean . probabilityClassify
--     straightClassify model dp = classificationLabel $ probabilityClassify model dp
--     straightClassify model dp = fst . argmaxBy compare snd $ probabilityClassify model dp
    
class {-(Label label) =>-} Classifier model datatype label | model -> label where
    classify :: model -> datatype -> label

-- instance (ProbabilityClassifier model datatype label) => Classifier model datatype label where
--     classify model dp = mean $ probabilityClassify model dp