Я пытаюсь оценить нормальную плотность, используя квадратичное c приближение в тензорном потоке (код 4.14 из Статистического переосмысления McElreath).
Код, который у меня есть на данный момент:
import pandas as pd
import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp
from tensorflow_probability import distributions as tfd
_BASE_URL = "https://raw.githubusercontent.com/rmcelreath/rethinking/Experimental/data"
HOWELL_DATASET_PATH = f"{_BASE_URL}/Howell1.csv"
df = pd.read_csv(HOWELL_DATASET_PATH, sep=';')
df = df[df['age'] >= 18]
mu = tf.linspace(start=140.0, stop=160.0, num=200)
sigma= tf.linspace(start=4.0, stop=9.0, num=200)
tf.reduce_sum(tfd.Normal(loc=mu, scale=sigma).log_prob(df.height))
Сбой из-за того, что df
имеет форму (352,), в то время как я создаю (200,) точек для моего нормального распределения в
Однако
tf.reduce_sum(tfd.Normal(loc=mu, scale=sigma).log_prob(2))
и
tf.reduce_sum(tfd.Normal(loc=mu[0], scale=sigma[0]).log_prob(df.height))
оба работают.
Мне нужно создать (200, 352) тензор - один нормальный для каждого mu
, sigma
в моей сетке, а затем оценить его с моими данными выборки - df
. У меня вопрос: как мне это сделать?