Возможно, вы уже поняли это, но я подумал, что могу опубликовать возможное решение этой проблемы.
Следующий код создает случайные данные с измерениями (2100) и пытается обучить gmm из 128 смесей, используя алгоритм EM_uniform:
import sidekit
import numpy as np
import random as rn
gmm = sidekit.Mixture()
data = np.array([[rn.random() for i in range(100)],[rn.random() for i in range(100)]])
gmm.EM_uniform(data,
distrib_nb=128,
iteration_min=3,
iteration_max=10,
llk_gain=0.01,
do_init=True)
Однако это приводит к той же ошибке, о которой вы сообщили: ValueError: операнды не могут быть переданы вместе с формами (128 100) (128,0)
Я подозреваю, что есть некоторая ошибка в том, как вычисляется gmm.invcov в Sidekit.Mixture._init_uniform(), поэтому я придумал ручную инициализацию смеси с помощью кода из Sidekit.Mixture._init() (функция инициализации для EM_split ()-алгоритм).
Следующий код работал без ошибок на моем компьютере:
import sidekit
import numpy as np
import random as rn
import copy
gmm = sidekit.Mixture()
data = np.array([[rn.random() for i in range(100)],[rn.random() for i in range(100)]])
# Initialize the Mixture with code from Sidekit.Mixture._init()
mu = data.mean(0)
cov = (data**2).mean(0)
gmm.mu = mu[None]
gmm.invcov = 1./cov[None]
gmm.w = np.asarray([1.0])
gmm.cst = np.zeros(gmm.w.shape)
gmm.det = np.zeros(gmm.w.shape)
gmm.cov_var_ctl = 1.0 / copy.deepcopy(gmm.invcov)
gmm._compute_all()
# Now run EM without initialization
gmm.EM_uniform(data,
distrib_nb=128,
iteration_min=3,
iteration_max=10,
llk_gain=0.01,
do_init=False)
Это дало следующий результат: [-31.419146414931213, 54.759037708692404, 54.759037708692404, 54.759037708692404], что является логарифмическими значениями правдоподобия после каждой итерации (сходимость после 4 итераций. Обратите внимание, что данные в этом примере слишком малы для обучения gmm)
Я не могу гарантировать, что это приведет к каким-либо ошибкам позже, оставьте комментарий, если это так!
Что касается файлов HDF5, ознакомьтесь с документацией h5py для получения учебных пособий. Кроме того, hdfview позволяет просматривать содержимое h5-файлов, что очень удобно для отладки позже, когда вы доберетесь до скоринга.
person
Jørgen A
schedule
31.05.2017