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