Смешанные модели
Смешанная модель — это вероятностное распределение, которое состоит из набора компонентов, представляющих распределение в целом. В общем случае функция плотности вероятности (массы) задается в виде выпуклой комбинации функций плотности вероятности (массы) отдельных компонентов:
Смешанная модель описывается набором параметров-компонентов и исходным распределением по этим компонентам.
Иерархия типов
В пакет входит тип 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.AbstractMixtureModel — Type
Все подтипы типа 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.MixtureModel — Type
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.components — Method
components(d::AbstractMixtureModel)
Возвращает список составляющих смешанной модели d.
#
Distributions.probs — Method
probs(d::AbstractMixtureModel)
Возвращает вектор исходных вероятностей всех составляющих d.
#
Distributions.component_type — Method
component_type(d::AbstractMixtureModel)
Тип составляющих d.
Помимо этого, для всех подтипов UnivariateMixture и MultivariateMixture доступны следующие универсальные методы:
#
Statistics.mean — Method
mean(d::Union{UnivariateMixture, MultivariateMixture})
Вычисляет общее среднее значение (математическое ожидание).
#
Statistics.var — Method
var(d::UnivariateMixture)
Вычисляет общую дисперсию (только для UnivariateMixture).
#
Base.length — Method
length(d::MultivariateMixture)
Длина каждой выборки (только для Multivariate).
#
Distributions.pdf — Method
pdf(d::Union{UnivariateMixture, MultivariateMixture}, x)
Вычисляет (смешанную) функцию плотности вероятности по x. Здесь x может быть отдельной выборкой или массивом из нескольких выборок.
#
Distributions.logpdf — Method
logpdf(d::Union{UnivariateMixture, MultivariateMixture}, x)
Вычисляет логарифм (смешанной) функции плотности вероятности по x. Здесь x может быть отдельной выборкой или массивом из нескольких выборок.
#
Base.rand — Method
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.