mltool-0.1.0.0: src/MachineLearning/Regularization.hs
{-|
Module: MachineLearning.Regularization
Description: Regularization
Copyright: (c) Alexander Ignatyev, 2017
License: BSD-3
Stability: experimental
Portability: POSIX
Regularization.
-}
module MachineLearning.Regularization
(
Regularization(..)
, costReg
, gradientReg
)
where
import MachineLearning.Types (R, Vector)
import qualified Data.Vector.Storable as V
import qualified Numeric.LinearAlgebra as LA
-- | Regularization
data Regularization = RegNone -- ^ No regularization
| L2 R -- ^ L2 Regularization
-- | Calculates regularization for Model.cost function.
-- It takes regularization parameter and theta.
costReg :: Regularization -> Vector -> R
costReg RegNone _ = 0
costReg (L2 lambda) theta = (thetaReg LA.<.> thetaReg) * lambda * 0.5
where thetaReg = V.tail theta
-- | Calculates regularization for Model.gradient function.
-- It takes regularization parameter and theta.
gradientReg :: Regularization -> Vector -> Vector
gradientReg RegNone _ = 0
gradientReg (L2 lambda) theta = (LA.scalar lambda) * thetaReg
where thetaReg = theta V.// [(0, 0)]