Когда вы запускаете covariance_type="tied"
, модель предполагает общую ковариационную матрицу для всех компонентов, поэтому приведенный выше код не выполняется. Если covariance_type="tied"
, то это будет 1 ковариационная матрица под clf.covariances_. См. страницу справки:
«полный» каждый компонент имеет свою общую ковариационную матрицу
«связанные» все компоненты имеют одну и ту же общую ковариационную матрицу
С pomegranate
он оценивает ковариационную матрицу для каждого компонента, поэтому хорошее сравнение с запуском GaussianMixture
из sklearn с covariance_type="full"
from sklearn import datasets
from sklearn.mixture import GaussianMixture
iris = datasets.load_iris()
clf = GaussianMixture(n_components=3, covariance_type="full", init_params='kmeans')
clf.fit(iris.data)
cov = []
means = []
for i in range(clf.n_components):
cov.append(clf.covariances_[i])
means.append(clf.means_[i])
Итак, для компонента или кластера 0:
means[0]
array([5.006, 3.428, 1.462, 0.246])
cov[0]
array([[0.121765, 0.097232, 0.016028, 0.010124],
[0.097232, 0.140817, 0.011464, 0.009112],
[0.016028, 0.011464, 0.029557, 0.005948],
[0.010124, 0.009112, 0.005948, 0.010885]])
Теперь с гранатом:
from pomegranate import GeneralMixtureModel, MultivariateGaussianDistribution
mdl = GeneralMixtureModel.from_samples(MultivariateGaussianDistribution,
n_components=3, X=iris.data)
mdl = mdl.fit(iris.data)
Доступ к параметрам можно получить в разделе distributions
, и у вас есть список, равный вашим компонентам. Для первого вы делаете distributions[0]
, для второго distributions[1]
и так далее:
mdl.distributions[0].parameters[0]
[5.005999999999999, 3.4280000000000004, 1.462, 0.24599999999999986]
np.round(mdl.distributions[0].parameters[1],6)
array([[0.121764, 0.097232, 0.016028, 0.010124],
[0.097232, 0.140816, 0.011464, 0.009112],
[0.016028, 0.011464, 0.029556, 0.005948],
[0.010124, 0.009112, 0.005948, 0.010884]])
person
StupidWolf
schedule
15.11.2020