Я новичок в pymc3, но я слышал, что его можно использовать для построения байесовской модели обновления. Поэтому я попытался, но безуспешно. Моя цель состояла в том, чтобы предсказать, в какой день недели человек покупает определенный товар, на основе предварительной информации от ряда клиентов, а также истории покупок этого человека.
Итак, давайте предположим, что я знаю, что клиенты в целом покупать этот продукт только по понедельникам, вторникам, средам и четвергам; и что число клиентов, которые купили продукт в прошлом в те дни, составляет 3,2, 1 и 1 соответственно. Я думал, что настрою свою модель так:
import pymc3 as pm
dow = ['m', 'tu', 'w','th']
c = np.array([3, 2, 1, 1])
# hyperparameters (initially all equal)
alphas = np.array([1, 1, 1, 1])
with pm.Model() as model:
# Parameters of the Multinomial are from a Dirichlet
parameters = pm.Dirichlet('parameters', a=alphas, shape=4)
# Observed data is from a Multinomial distribution
observed_data = pm.Multinomial(
'observed_data', n=7, p=parameters, shape=4, observed=c)
Так что это настроило мою модель без проблем. Затем у меня есть данные об отдельных клиентах за 4 недели: 1 означает, что они купили продукт, 0 означает, что они этого не сделали, для данного дня недели. Я думал, что обновить модель будет так просто:
c = np.array([[1, 0,0,0],[0,1,0,0],[1,0,0,0],[1,0,0,0],[1,0,0,1])
with pm.Model() as model:
# Parameters are a dirichlet distribution
parameters = pm.Dirichlet('parameters', a=alphas, shape=4)
# Observed data is a multinomial distribution
observed_data = pm.Multinomial(
'observed_data',n=1,p=parameters, shape=4, observed=c)
trace = pm.sample(draws=100, chains=2, tune=50, discard_tuned_samples=True)
Это не сработало.
Мои вопросы:
- Принимает ли это Учет учетных записей, которые я установил ранее, или это создает совершенно новую модель?
- Как написано выше, код не работал, поскольку он выдал мне ошибку «плохая начальная энергия». Методом проб и ошибок я обнаружил, что параметр «n» должен быть суммой элементов в наблюдениях (поэтому у меня не может быть наблюдений, складывающихся в разные n). Это почему? Конечно, ситуация, которую я описал выше (где одни недели делают покупки только по понедельникам, а другие по понедельникам и четвергам), не является невозможной?
Есть ли лучший способ использования pymc3 или другого пакета для решения проблемы такого типа? Спасибо!