15 using namespace shogun;
33 m_num_aux = free_states*D*(num_obs-1);
42 SG_ERROR(
"The EStateModelType given is not valid\n");
62 return S*(S + D*m_num_obs);
82 m_transmission_weights.
zero();
84 for ( int32_t i = 0 ; i < state_seq.
vlen-1 ; ++i )
85 m_transmission_weights(state_seq[i],state_seq[i+1]) += 1;
89 m_emission_weights.
zero();
92 for ( int32_t f = 0 ; f < D ; ++f )
94 aux_idx = f*m_num_obs;
96 for ( int32_t j = 0 ; j < state_seq.
vlen ; ++j )
98 weight_idx = aux_idx + state_seq[j]*D*m_num_obs + obs(f,j);
99 m_emission_weights[weight_idx] += 1;
103 m_state_model->
weights_to_vector(psi, m_transmission_weights, m_emission_weights,
139 for ( int32_t i = 0 ; i < T ; ++i )
141 for ( int32_t j = 0 ; j < D ; ++j )
146 for ( int32_t s = 0 ; s < S ; ++s )
147 E(s,i) += m_emission_weights[s*D*m_num_obs + em_idx];
158 "x^i (%d) and the length of its corresponding label y^i "
159 "(%d) must be the same.\n", T, ytrue->
get_data().
size());
164 loss_matrix.num_cols == E.
num_cols);
178 for ( int32_t s = 0 ; s < S ; ++s )
195 for ( int32_t i = 1 ; i < T ; ++i )
197 for ( int32_t cur = 0 ; cur < S ; ++cur )
207 for ( int32_t prev = 0 ; prev < S ; ++prev )
210 a = m_transmission_weights[cur*S + prev];
215 tmp_score = e + a + dp[prev*T + i-1];
217 if ( tmp_score > dp[idx] )
234 for ( int32_t s = 0 ; s < S ; ++s )
240 ret->
score = dp[idx];
245 for ( int32_t i = T-1 ; i > 0 ; --i )
246 opt_path[i-1] = trb[opt_path[i]*T + i];
271 return m_state_model->
loss(seq1, seq2);
298 for ( int32_t i = 0 ; i <
get_dim() ; ++i )
313 for ( int32_t idx = S*S, k = 0 ; k < S*D ; idx += m_num_obs, ++k )
314 score_starts[k] = idx;
318 for ( int32_t idx =
get_dim(), k = 0 ; k < S*D ; idx += m_num_obs-1, ++k )
319 aux_starts_smooth[k] = idx;
325 int32_t con_idx = 0, scr_idx, aux_idx;
327 for ( int32_t i = 0 ; i < score_starts.
vlen ; ++i )
329 scr_idx = score_starts[i];
330 aux_idx = aux_starts_smooth[i];
332 for ( int32_t j = 0 ; j < m_num_obs-1 ; ++j )
334 A(con_idx, scr_idx) = 1;
335 A(con_idx, scr_idx+1) = -1;
337 if ( monotonicity[i] != 1 )
338 A(con_idx, aux_idx) = -1;
341 A(con_idx, scr_idx) = -1;
342 A(con_idx, scr_idx+1) = 1;
344 if ( monotonicity[i] != -1 )
345 A(con_idx, aux_idx) = -1;
348 ++scr_idx, ++aux_idx;
372 for ( int32_t j = 0 ; j < seq_data.size() ; ++j )
378 SG_ERROR(
"Found state out of {0, 1, ..., "
394 if ( state_freq[i] <= 0 )
396 SG_ERROR(
"What? State %d has never appeared\n", i);
404 void CHMSVMModel::init()
408 SG_ADD(&m_transmission_weights,
"m_transmission_weights",
410 SG_ADD(&m_emission_weights,
"m_emission_weights",
416 m_state_model = NULL;