mltool-0.1.0.0: src/MachineLearning/Regression.hs
{-|
Module: MachineLearning.Regression
Description: Regression
Copyright: (c) Alexander Ignatyev, 2016-2017
License: BSD-3
Stability: experimental
Portability: POSIX
-}
module MachineLearning.Regression
(
Model.Model(..)
, LeastSquares.LeastSquaresModel(..)
, Optimization.MinimizeMethod(..)
, Optimization.minimize
, normalEquation
, normalEquation_p
, Regularization(..)
)
where
import MachineLearning.Types (Vector, Matrix)
import MachineLearning.Optimization as Optimization
import MachineLearning.Model as Model
import MachineLearning.LeastSquaresModel as LeastSquares
import MachineLearning.Regularization (Regularization(..))
import qualified Numeric.LinearAlgebra as LA
import Numeric.LinearAlgebra ((<>), (#>))
-- | Normal equation using inverse, does not require feature normalization
-- It takes X and y, returns theta.
normalEquation :: Matrix -> Vector -> Vector
normalEquation x y =
let trX = LA.tr x
in (LA.inv (trX <> x) <> trX) #> y
-- | Normal equation using pseudo inverse, requires feature normalization
-- It takes X and y, returns theta.
normalEquation_p :: Matrix -> Vector -> Vector
normalEquation_p x y =
let trX = LA.tr x
in (LA.pinv (trX <> x) <> trX) #> y