Документация Engee

Смешанные модели

Смешанная модель — это вероятностное распределение, которое состоит из набора компонентов, представляющих распределение в целом. В общем случае функция плотности вероятности (массы) задается в виде выпуклой комбинации функций плотности вероятности (массы) отдельных компонентов:

Смешанная модель описывается набором параметров-компонентов и исходным распределением по этим компонентам.

Иерархия типов

В пакет входит тип MixtureModel, представляющий смешанную модель и имеющий следующее определение:

abstract type AbstractMixtureModel{VF<:VariateForm,VS<:ValueSupport} <: Distribution{VF, VS} end

struct MixtureModel{VF<:VariateForm,VS<:ValueSupport,Component<:Distribution} <: AbstractMixtureModel{VF,VS}
    components::Vector{Component}
    prior::Categorical
end

const UnivariateMixture    = AbstractMixtureModel{Univariate}
const MultivariateMixture  = AbstractMixtureModel{Multivariate}

Замечания

  • В качестве базового введен тип AbstractMixtureModel, который позволяет определять смешанные модели с другими внутренними реализациями, но сохранить при этом возможность использования общих методов, определенных для AbstractMixtureModel.

# Distributions.AbstractMixtureModelType

Все подтипы типа AbstractMixtureModel должны реализовывать следующие методы:

  • ncomponents(d): количество составляющих;

  • component(d, k): возвращает k-ю составляющую;

  • probs(d): возвращает вектор исходных вероятностей по составляющим.

  • MixtureModel — это параметрический тип с тремя параметрами типа:

    • VF: размерность; может быть Univariate, Multivariate или Matrixvariate;

    • VS: тип носителя; может быть Continuous или Discrete;

    • Component: тип составляющих распределений, например Normal.

  • Определены два псевдонима: UnivariateMixture и MultivariateMixture.

При такой системе типов тип для комбинации одномерных нормальных распределений можно записать так:

MixtureModel{Univariate,Continuous,Normal}

Конструкторы

# Distributions.MixtureModelType

MixtureModel{VF<:VariateForm,VS<:ValueSupport,C<:Distribution,CT<:Real} Комбинация распределений, параметризуемая по:

  • VF,VS случайной величине и носителю;

  • C семейству распределений комбинации;

  • CT типу вероятностей исходных распределений.

Примеры

# создает комбинацию из трех нормальных распределений
# с исходными вероятностями [0,2, 0,5, 0,3]
MixtureModel(Normal[
   Normal(-2.0, 1.2),
   Normal(0.0, 1.0),
   Normal(3.0, 2.5)], [0.2, 0.5, 0.3])

# если составляющие имеют одинаковую исходную вероятность, вектор исходных вероятностей можно опустить
MixtureModel(Normal[
   Normal(-2.0, 1.2),
   Normal(0.0, 1.0),
   Normal(3.0, 2.5)])

# Так как все составляющие имеют один и тот же тип, можно использовать упрощенный синтаксис
MixtureModel(Normal, [(-2.0, 1.2), (0.0, 1.0), (3.0, 2.5)], [0.2, 0.5, 0.3])

# Опять-таки, если составляющие имеют одинаковую исходную вероятность, вектор исходных вероятностей можно опустить
MixtureModel(Normal, [(-2.0, 1.2), (0.0, 1.0), (3.0, 2.5)])

# В следующем примере показано, как можно создать комбинацию распределений Гаусса,
# все составляющие которой имеют единичную дисперсию
MixtureModel(map(u -> Normal(u, 1.0), [-2.0, 0.0, 3.0]))

Общий интерфейс

Все подтипы типа AbstractMixtureModel (включая, разумеется, MixtureModel) имеют следующие два метода:

# Distributions.componentsMethod

components(d::AbstractMixtureModel)

Возвращает список составляющих смешанной модели d.

# Distributions.probsMethod

probs(d::AbstractMixtureModel)

Возвращает вектор исходных вероятностей всех составляющих d.

# Distributions.component_typeMethod

component_type(d::AbstractMixtureModel)

Тип составляющих d.

Помимо этого, для всех подтипов UnivariateMixture и MultivariateMixture доступны следующие универсальные методы:

# Statistics.meanMethod

mean(d::Union{UnivariateMixture, MultivariateMixture})

Вычисляет общее среднее значение (математическое ожидание).

# Statistics.varMethod

var(d::UnivariateMixture)

Вычисляет общую дисперсию (только для UnivariateMixture).

# Base.lengthMethod

length(d::MultivariateMixture)

Длина каждой выборки (только для Multivariate).

# Distributions.pdfMethod

pdf(d::Union{UnivariateMixture, MultivariateMixture}, x)

Вычисляет (смешанную) функцию плотности вероятности по x. Здесь x может быть отдельной выборкой или массивом из нескольких выборок.

# Distributions.logpdfMethod

logpdf(d::Union{UnivariateMixture, MultivariateMixture}, x)

Вычисляет логарифм (смешанной) функции плотности вероятности по x. Здесь x может быть отдельной выборкой или массивом из нескольких выборок.

# Base.randMethod

rand(d::Union{UnivariateMixture, MultivariateMixture})

Делает выборку из смешанной модели d.

rand(d::Union{UnivariateMixture, MultivariateMixture}, n)

Делает n выборок из d.

# Random.rand!Method

rand!(d::Union{UnivariateMixture, MultivariateMixture}, r::AbstractArray)

Делает несколько выборок из d и записывает их в r.

Оценка

Существует несколько методов оценки смешанных моделей на основе данных, и эта тема остается открытой для исследований. В данном пакете нет средств для оценки смешанных моделей. Для выполнения этой задачи можно прибегнуть к другим пакетам, например GaussianMixtures.jl.