module MachineLearning.Classification.OneVsAll
(
Opt.MinimizeMethod(..)
, module Log
, module Model
, predict
, learn
, MLC.calcAccuracy
, Regularization(..)
)
where
import MachineLearning.Types (R, Vector, Matrix)
import MachineLearning.Regularization (Regularization(..))
import qualified MachineLearning.Optimization as Opt
import qualified MachineLearning.LogisticModel as Log
import qualified MachineLearning.Model as Model
import qualified MachineLearning.Classification.Internal as MLC
import qualified Data.Vector.Storable as V
import qualified Numeric.LinearAlgebra as LA
predict :: Matrix -> [Vector] -> Vector
predict x thetas = predictions'
where predict = Model.hypothesis Log.Logistic x
predictions = LA.toRows . LA.fromColumns $ map predict thetas
predictions' = LA.vector $ map (fromIntegral . LA.maxIndex) predictions
learn :: Opt.MinimizeMethod
-> R
-> Int
-> Regularization
-> Int
-> Matrix
-> Vector
-> [Vector]
-> ([Vector], [Matrix])
learn mm eps numIters lambda nLabels x y initialThetaList =
let ys = MLC.processOutputOneVsAll nLabels y
minimize = Opt.minimize mm Log.Logistic eps numIters lambda x
in unzip $ zipWith minimize ys initialThetaList