Safe Haskell | None |
---|---|
Language | Haskell2010 |
An Exponential Family Harmonium
is a product exponential family with a
particular bilinear structure (Welling, et al., 2005).
A Mixture
model is a special case of harmonium.
Synopsis
- newtype AffineHarmonium f y x z w = AffineHarmonium (Affine f y z x, w)
- type Harmonium f z w = AffineHarmonium f z w z w
- splitHarmonium :: (Manifold z, Manifold (f y x), Manifold w) => (c # AffineHarmonium f y x z w) -> (c # z, c # f y x, c # w)
- joinHarmonium :: (Manifold w, Manifold z, Manifold (f y x)) => (c # z) -> (c # f y x) -> (c # w) -> c # AffineHarmonium f y x z w
- transposeHarmonium :: (Bilinear f y x, Manifold z, Manifold w) => (c # AffineHarmonium f y x z w) -> c # AffineHarmonium f x y w z
- expectationStep :: (ExponentialFamily z, Map Natural f x y, Bilinear f y x, Translation z y, Translation w x, LegendreExponentialFamily w) => Sample z -> (Natural # AffineHarmonium f y x z w) -> Mean # AffineHarmonium f y x z w
- initialPass :: forall f x y z w. (ExponentialFamily z, Map Natural f x y, Manifold w, SamplePoint y ~ SamplePoint z, Translation w x, Generative Natural w, ExponentialFamily y, Bilinear f y x, LegendreExponentialFamily w) => (Natural # AffineHarmonium f y x z w) -> Sample z -> Random (Sample (z, w))
- gibbsPass :: (ExponentialFamily z, Map Natural f x y, Translation z y, Translation w x, SamplePoint z ~ SamplePoint y, Generative Natural w, ExponentialFamily y, SamplePoint x ~ SamplePoint w, Bilinear f y x, Map Natural f y x, ExponentialFamily x, Generative Natural z) => (Natural # AffineHarmonium f y x z w) -> Sample (z, w) -> Random (Sample (z, w))
- type Mixture z k = Harmonium Tensor z (Categorical k)
- type AffineMixture y z k = AffineHarmonium Tensor y (Categorical k) z (Categorical k)
- joinNaturalMixture :: forall k z. (KnownNat k, LegendreExponentialFamily z) => Vector (k + 1) (Natural # z) -> (Natural # Categorical k) -> Natural # Mixture z k
- splitNaturalMixture :: forall k z. (KnownNat k, LegendreExponentialFamily z) => (Natural # Mixture z k) -> (Vector (k + 1) (Natural # z), Natural # Categorical k)
- joinMeanMixture :: (KnownNat k, Manifold z) => Vector (k + 1) (Mean # z) -> (Mean # Categorical k) -> Mean # Mixture z k
- splitMeanMixture :: (KnownNat k, DuallyFlatExponentialFamily z) => (Mean # Mixture z k) -> (Vector (k + 1) (Mean # z), Mean # Categorical k)
- joinSourceMixture :: (KnownNat k, Manifold z) => Vector (k + 1) (Source # z) -> (Source # Categorical k) -> Source # Mixture z k
- splitSourceMixture :: (KnownNat k, Manifold z) => (Source # Mixture z k) -> (Vector (k + 1) (Source # z), Source # Categorical k)
- type LinearGaussianHarmonium n k = AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k)
- class (ExponentialFamily z, ExponentialFamily w, Map Natural f y x, Translation z y, Translation w x, SamplePoint y ~ SamplePoint z, SamplePoint x ~ SamplePoint w) => ConjugatedLikelihood f y x z w where
- conjugationParameters :: (Natural # Affine f y z x) -> (Double, Natural # w)
- joinConjugatedHarmonium :: ConjugatedLikelihood f y x z w => (Natural # Affine f y z x) -> (Natural # w) -> Natural # AffineHarmonium f y x z w
- splitConjugatedHarmonium :: ConjugatedLikelihood f y x z w => (Natural # AffineHarmonium f y x z w) -> (Natural # Affine f y z x, Natural # w)
Harmoniums
newtype AffineHarmonium f y x z w Source #
A 2-layer harmonium.
AffineHarmonium (Affine f y z x, w) |
Instances
(KnownNat k, DuallyFlatExponentialFamily z) => Transition Mean Natural (Mixture z k) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Mean # Mixture z k) -> Natural # Mixture z k | |
(KnownNat k, LegendreExponentialFamily z, Transition Natural Source z) => Transition Natural Source (Mixture z k) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Natural # Mixture z k) -> Source # Mixture z k | |
(KnownNat k, LegendreExponentialFamily z, Transition Source Natural z) => Transition Source Natural (Mixture z k) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Source # Mixture z k) -> Natural # Mixture z k | |
(KnownNat k, Manifold y, Manifold z, LegendreExponentialFamily z, Translation z y) => Transition Natural Mean (AffineMixture y z k) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Natural # AffineMixture y z k) -> Mean # AffineMixture y z k | |
(KnownNat n, KnownNat k) => Transition Mean Natural (AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k)) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Mean # AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k)) -> Natural # AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k) | |
Transition Mean Natural (AffineHarmonium Tensor NormalMean NormalMean Normal Normal) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Mean # AffineHarmonium Tensor NormalMean NormalMean Normal Normal) -> Natural # AffineHarmonium Tensor NormalMean NormalMean Normal Normal | |
(KnownNat n, KnownNat k) => Transition Natural Mean (AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k)) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Natural # AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k)) -> Mean # AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k) | |
Transition Natural Mean (AffineHarmonium Tensor NormalMean NormalMean Normal Normal) Source # | |
Defined in Goal.Graphical.Models.Harmonium transition :: (Natural # AffineHarmonium Tensor NormalMean NormalMean Normal Normal) -> Mean # AffineHarmonium Tensor NormalMean NormalMean Normal Normal | |
(KnownNat k, Manifold y, Manifold z, LegendreExponentialFamily z, Generative Natural z, Translation z y) => Generative Natural (AffineMixture y z k) Source # | |
Defined in Goal.Graphical.Models.Harmonium samplePoint :: Point Natural (AffineMixture y z k) -> Random (SamplePoint (AffineMixture y z k)) sample :: Int -> Point Natural (AffineMixture y z k) -> Random (Sample (AffineMixture y z k)) | |
(ConjugatedLikelihood f y x z w, LegendreExponentialFamily z, ExponentialFamily y, LegendreExponentialFamily w, Map Natural f x y, Bilinear f x y) => ObservablyContinuous Natural (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium logObservableDensities :: (Natural # AffineHarmonium f y x z w) -> Observations (AffineHarmonium f y x z w) -> [Double] Source # observableDensities :: (Natural # AffineHarmonium f y x z w) -> Observations (AffineHarmonium f y x z w) -> [Double] Source # | |
(Bilinear f y x, ExponentialFamily y, ExponentialFamily x, LegendreExponentialFamily w, ConjugatedLikelihood f y x z w) => AbsolutelyContinuous Natural (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium logDensities :: Point Natural (AffineHarmonium f y x z w) -> Sample (AffineHarmonium f y x z w) -> [Double] densities :: Point Natural (AffineHarmonium f y x z w) -> Sample (AffineHarmonium f y x z w) -> [Double] | |
(LegendreExponentialFamily z, LegendreExponentialFamily w, ConjugatedLikelihood f y x z w, Map Natural f x y, Bilinear f x y, LegendreExponentialFamily (AffineHarmonium f y x z w), Manifold (f y x), SamplePoint z ~ t, ExponentialFamily y) => LogLikelihood Natural (AffineHarmonium f y x z w) t Source # | |
Defined in Goal.Graphical.Models.Harmonium logLikelihood :: [t] -> (Natural # AffineHarmonium f y x z w) -> Double logLikelihoodDifferential :: [t] -> (Natural # AffineHarmonium f y x z w) -> Natural #* AffineHarmonium f y x z w | |
(Manifold (f y x), LegendreExponentialFamily w, Transition Mean Natural (AffineHarmonium f y x z w), ConjugatedLikelihood f y x z w) => DuallyFlat (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium dualPotential :: (PotentialCoordinates (AffineHarmonium f y x z w) #* AffineHarmonium f y x z w) -> Double | |
(Manifold (f y x), LegendreExponentialFamily w, ConjugatedLikelihood f y x z w) => Legendre (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium potential :: (PotentialCoordinates (AffineHarmonium f y x z w) # AffineHarmonium f y x z w) -> Double | |
(Manifold z, Manifold (f y x), Manifold w) => Manifold (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type Dimension (AffineHarmonium f y x z w) :: Nat | |
(Manifold z, Manifold (f y x), Manifold w) => Product (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type First (AffineHarmonium f y x z w) type Second (AffineHarmonium f y x z w) join :: (c # First (AffineHarmonium f y x z w)) -> (c # Second (AffineHarmonium f y x z w)) -> c # AffineHarmonium f y x z w split :: (c # AffineHarmonium f y x z w) -> (c # First (AffineHarmonium f y x z w), c # Second (AffineHarmonium f y x z w)) | |
(ExponentialFamily z, ExponentialFamily x, Translation z y, Translation w x, ExponentialFamily w, ExponentialFamily y, Bilinear f y x) => ExponentialFamily (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium sufficientStatistic :: SamplePoint (AffineHarmonium f y x z w) -> Mean # AffineHarmonium f y x z w averageSufficientStatistic :: Sample (AffineHarmonium f y x z w) -> Mean # AffineHarmonium f y x z w logBaseMeasure :: Proxy (AffineHarmonium f y x z w) -> SamplePoint (AffineHarmonium f y x z w) -> Double | |
Manifold (AffineHarmonium f y x z w) => Statistical (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type SamplePoint (AffineHarmonium f y x z w) | |
(Translation z y, Manifold w, Manifold (f y x)) => Translation (AffineHarmonium f y x z w) y Source # | |
Defined in Goal.Graphical.Models.Harmonium (>+>) :: (c # AffineHarmonium f y x z w) -> (c # y) -> c # AffineHarmonium f y x z w anchor :: (c # AffineHarmonium f y x z w) -> c # y | |
type PotentialCoordinates (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type PotentialCoordinates (AffineHarmonium f y x z w) = Natural | |
type Dimension (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type Dimension (AffineHarmonium f y x z w) = Dimension (Affine f y z x, w) | |
type First (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type First (AffineHarmonium f y x z w) = First (Affine f y z x, w) | |
type Second (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type Second (AffineHarmonium f y x z w) = Second (Affine f y z x, w) | |
type Observation (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium | |
type SamplePoint (AffineHarmonium f y x z w) Source # | |
Defined in Goal.Graphical.Models.Harmonium type SamplePoint (AffineHarmonium f y x z w) = SamplePoint (z, w) |
type Harmonium f z w = AffineHarmonium f z w z w Source #
Constuction
:: (Manifold z, Manifold (f y x), Manifold w) | |
=> (c # AffineHarmonium f y x z w) | Harmonium |
-> (c # z, c # f y x, c # w) | Biases and interaction parameters |
Splits a Harmonium
into component parameters.
:: (Manifold w, Manifold z, Manifold (f y x)) | |
=> (c # z) | Visible layer biases |
-> (c # f y x) | ^ Interaction parameters |
-> (c # w) | Hidden layer Biases |
-> c # AffineHarmonium f y x z w | Harmonium |
Creates a Harmonium
from component parameters.
Manipulation
transposeHarmonium :: (Bilinear f y x, Manifold z, Manifold w) => (c # AffineHarmonium f y x z w) -> c # AffineHarmonium f x y w z Source #
Swap the biases and transpose
the interaction parameters of the given Harmonium
.
Evaluation
:: (ExponentialFamily z, Map Natural f x y, Bilinear f y x, Translation z y, Translation w x, LegendreExponentialFamily w) | |
=> Sample z | Model Samples |
-> (Natural # AffineHarmonium f y x z w) | Harmonium |
-> Mean # AffineHarmonium f y x z w | Harmonium expected sufficient statistics |
Computes the joint expectations of a harmonium based on a sample from the observable layer.
Sampling
:: forall f x y z w. (ExponentialFamily z, Map Natural f x y, Manifold w, SamplePoint y ~ SamplePoint z, Translation w x, Generative Natural w, ExponentialFamily y, Bilinear f y x, LegendreExponentialFamily w) | |
=> (Natural # AffineHarmonium f y x z w) | Harmonium |
-> Sample z | Model Samples |
-> Random (Sample (z, w)) |
Initialize a Gibbs chain from a set of observations.
:: (ExponentialFamily z, Map Natural f x y, Translation z y, Translation w x, SamplePoint z ~ SamplePoint y, Generative Natural w, ExponentialFamily y, SamplePoint x ~ SamplePoint w, Bilinear f y x, Map Natural f y x, ExponentialFamily x, Generative Natural z) | |
=> (Natural # AffineHarmonium f y x z w) | Harmonium |
-> Sample (z, w) | |
-> Random (Sample (z, w)) |
Update a Sample
with Gibbs sampling.
Mixture Models
type Mixture z k = Harmonium Tensor z (Categorical k) Source #
A Mixture
model is simply a AffineHarmonium
where the latent variable is
Categorical
.
type AffineMixture y z k = AffineHarmonium Tensor y (Categorical k) z (Categorical k) Source #
A Mixture
where only a subset of the component parameters are mixed.
:: forall k z. (KnownNat k, LegendreExponentialFamily z) | |
=> Vector (k + 1) (Natural # z) | Mixture components |
-> (Natural # Categorical k) | Weights |
-> Natural # Mixture z k | Mixture Model |
A convenience function for building a categorical harmonium/mixture model.
:: forall k z. (KnownNat k, LegendreExponentialFamily z) | |
=> (Natural # Mixture z k) | Categorical harmonium |
-> (Vector (k + 1) (Natural # z), Natural # Categorical k) | (components, weights) |
A convenience function for deconstructing a categorical harmonium/mixture model.
:: (KnownNat k, Manifold z) | |
=> Vector (k + 1) (Mean # z) | Mixture components |
-> (Mean # Categorical k) | Weights |
-> Mean # Mixture z k |
Build a mixture model in mean coordinates.
splitMeanMixture :: (KnownNat k, DuallyFlatExponentialFamily z) => (Mean # Mixture z k) -> (Vector (k + 1) (Mean # z), Mean # Categorical k) Source #
Split a mixture model in mean coordinates.
:: (KnownNat k, Manifold z) | |
=> Vector (k + 1) (Source # z) | Mixture components |
-> (Source # Categorical k) | Weights |
-> Source # Mixture z k |
Build a mixture model in source coordinates.
splitSourceMixture :: (KnownNat k, Manifold z) => (Source # Mixture z k) -> (Vector (k + 1) (Source # z), Source # Categorical k) Source #
Build a mixture model in source coordinates.
Linear Gaussian Harmoniums
type LinearGaussianHarmonium n k = AffineHarmonium Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k) Source #
Conjugated Harmoniums
class (ExponentialFamily z, ExponentialFamily w, Map Natural f y x, Translation z y, Translation w x, SamplePoint y ~ SamplePoint z, SamplePoint x ~ SamplePoint w) => ConjugatedLikelihood f y x z w where Source #
The conjugation parameters of a conjugated likelihood.
conjugationParameters Source #
:: (Natural # Affine f y z x) | Categorical likelihood |
-> (Double, Natural # w) | Conjugation parameters |
Instances
ConjugatedLikelihood Tensor NormalMean NormalMean Normal Normal Source # | |
Defined in Goal.Graphical.Models.Harmonium conjugationParameters :: (Natural # Affine Tensor NormalMean Normal NormalMean) -> (Double, Natural # Normal) Source # | |
(KnownNat k, LegendreExponentialFamily z, Translation y z, LegendreExponentialFamily y, SamplePoint z ~ SamplePoint y) => ConjugatedLikelihood Tensor z (Categorical k) y (Categorical k) Source # | |
Defined in Goal.Graphical.Models.Harmonium conjugationParameters :: (Natural # Affine Tensor z y (Categorical k)) -> (Double, Natural # Categorical k) Source # | |
(KnownNat n, KnownNat k) => ConjugatedLikelihood Tensor (MVNMean n) (MVNMean k) (MultivariateNormal n) (MultivariateNormal k) Source # | |
Defined in Goal.Graphical.Models.Harmonium conjugationParameters :: (Natural # Affine Tensor (MVNMean n) (MultivariateNormal n) (MVNMean k)) -> (Double, Natural # MultivariateNormal k) Source # |
joinConjugatedHarmonium Source #
:: ConjugatedLikelihood f y x z w | |
=> (Natural # Affine f y z x) | Conjugation parameters |
-> (Natural # w) | |
-> Natural # AffineHarmonium f y x z w | Categorical likelihood |
The conjugation parameters of a conjugated Harmonium
.
splitConjugatedHarmonium Source #
:: ConjugatedLikelihood f y x z w | |
=> (Natural # AffineHarmonium f y x z w) | |
-> (Natural # Affine f y z x, Natural # w) | Conjugation parameters |
The conjugation parameters of a conjugated Harmonium
.