{-|
Module: MachineLearning.Model
Description: Regression Model
Copyright: (c) Alexander Ignatyev, 2016
License: BSD-3
Stability: experimental
Portability: POSIX

Regression Model type class.

-}

module MachineLearning.Model
(
  Model(..)
)

where

import MachineLearning.Types (R, Vector, Matrix)
import MachineLearning.Regularization (Regularization)

class Model a where
  -- | Hypothesis function, a.k.a. score function (for lassifition problem)
  -- Takes X (m x n) and theta (n x 1), returns y (m x 1).
  hypothesis :: a -> Matrix -> Vector -> Vector
  
  -- | Cost function J(Theta), a.k.a. loss function.
  -- It takes regularizarion parameter, matrix X (m x n), vector y (m x 1) and vector theta (n x 1).
  cost :: a -> Regularization -> Matrix -> Vector -> Vector -> R

  -- | Gradient function.
  -- It takes regularizarion parameter, X (m x n), y (m x 1) and theta (n x 1).
  -- Returns vector of gradients (n x 1).
  gradient :: a -> Regularization -> Matrix -> Vector -> Vector -> Vector