def _expected_segmentation_states(init_potential, expected_states, trans_potential, expected_joints,
feature_weights, window_data):
#log_q(s_t) for s_t = 1
data_length = window_data.shape[0]
mega_mat = np.hstack((window_data[:data_length - 1,:], expected_states[:data_length - 1,:]))
temp_1 = np.sum(feature_weights * mega_mat, axis=1)
with np.errstate(invalid='ignore'):
temp_2 = np.sum(np.sum(expected_joints[:data_length - 1,:] * np.log(trans_potential), axis = 1), axis = 1)
log_s_t_1 = temp_1 + temp_2
log_s_t_1 = np.append(log_s_t_1, -float("inf")) #the last state is always zero so the probability of s_t = 1 is zero
#log q(s_t) for s_t = 0
log_s_t_0 = np.sum(expected_states[1:, :] * np.log(init_potential), axis = 1)
log_s_t_0 = np.append(log_s_t_0, 0)
temp_stack = np.hstack((log_s_t_1[:, na], log_s_t_0[:, na])) #number of rows is the length of the sequence
expected_states = np.exp(temp_stack - np.logaddexp.reduce(temp_stack[:,:,na], axis = 1))
return expected_states
评论列表
文章目录