{-| Module: MachineLearning.LeastSquaresModel Description: Least Squares Model Copyright: (c) Alexander Ignatyev, 2016 License: BSD-3 Stability: experimental Portability: POSIX -} module MachineLearning.LeastSquaresModel ( LeastSquaresModel(..) ) where import qualified Numeric.LinearAlgebra as LA import Numeric.LinearAlgebra((<>), (#>), (<.>)) import qualified Numeric.LinearAlgebra.Data as LAD import qualified Data.Vector.Storable as V import qualified MachineLearning.Regularization as R import MachineLearning.Model data LeastSquaresModel = LeastSquares instance Model LeastSquaresModel where hypothesis LeastSquares x theta = x #> theta cost LeastSquares lambda x y theta = let m = x #> theta - y nExamples = fromIntegral $ LA.rows x regTerm = R.costReg lambda theta in (LA.sumElements (m * m) * 0.5 + regTerm) / nExamples gradient LeastSquares lambda x y theta = ((LA.tr x) #> (x #> theta - y) + regTerm) / nExamples where nExamples = fromIntegral $ LAD.rows x regTerm = R.gradientReg lambda theta