def _compute_log_likelihood(self, obs, pstates_idx):
q = np.zeros(shape=(len(obs), self.n_hidden_states, self.n_features))
for col, (feature_name, feature_distr) in enumerate(zip(self.emission_name, self.emission_distr)):
if feature_distr == 'normal':
mu = self.emission[feature_name]['mu'][pstates_idx]
sigma = self.emission[feature_name]['sigma'][pstates_idx]
for j in range(self.n_hidden_states):
q[:, j, col] = np.log(
np.maximum(MIN_PROBA, stats.norm.pdf(obs[:, col], loc=mu[:, j], scale=sigma[:, j])))
if feature_distr == 'lognormal':
logmu = self.emission[feature_name]['logmu'][pstates_idx]
logsigma = self.emission[feature_name]['logsigma'][pstates_idx]
for j in range(self.n_hidden_states):
q[:, j, col] = np.log(np.maximum(MIN_PROBA,
stats.lognorm.pdf(obs[:, col], logsigma[:, j], loc=0,
scale=np.exp(logmu[:, j]))))
q = q.sum(axis=2)
return q
评论列表
文章目录