Safe Haskell | None |
---|---|
Language | Haskell2010 |
- type Model f a = f a
- compute :: (Applicative v, Foldable v, Num a) => Model v a -> v a -> a
- regress :: (Traversable v, Applicative v, Foldable v, Applicative f, Foldable f, Ord a, Floating a) => f a -> f (v a) -> Model v a -> [Model v a]
Documentation
A model using the given f
to store parameters of type a
.
Can be thought of as some kind of vector throughough this
package.
:: (Applicative v, Foldable v, Num a) | |
=> Model v a | theta vector, the model's parameters |
-> v a |
|
-> a | predicted |
Compute the predicted value for the given model on the given observation
:: (Traversable v, Applicative v, Foldable v, Applicative f, Foldable f, Ord a, Floating a) | |
=> f a | expected |
-> f (v a) | input data for each observation |
-> Model v a | initial parameters for the model, from which we'll improve |
-> [Model v a] | a stream of increasingly accurate values for the model's parameter to better fit the observations. |
Given some observed "predictions" ys
, the corresponding
input values xs
and initial values for the model's parameters theta0
,
regress ys xs theta0
returns a stream of values for the parameters that'll fit the data better and better.
Example:
-- the theta we're approximating
realtheta :: Model V.Vector Double
realtheta = V.fromList [1.0, 2.0, 3.0]
-- let's start there and make regress
-- get values that better fit the input data
theta0 :: Model V.Vector Double
theta0 = V.fromList [0.2, 3.0, 2.23]
-- input data. (output value, vector of values for each input)
ys_ex :: V.Vector Double
xs_ex :: V.Vector (V.Vector Double)
(ys_ex, xs_ex) = V.unzip . V.fromList $
[ (3, V.fromList [0, 0, 1])
, (1, V.fromList [1, 0, 0])
, (2, V.fromList [0, 1, 0])
, (6, V.fromList [1, 1, 1])
]
-- stream of increasingly accurate parameters
thetaApproxs :: [Model V.Vector Double]
thetaApproxs = learnAll ys_ex xs_ex theta0