def use_hmm(img_times, change_vals, fps=10, min_secs_for_train_to_pass=8):
    
    from sklearn.hmm import GaussianHMM    
    X = np.column_stack(change_vals)    
    n_components = 2
    model = GaussianHMM(n_components, covariance_type="diag", n_iter=1000)
    model.fit([X.T])
    
    #thresh = 10**-15
    #model.transmat_ = np.array([[1-thresh,thresh],[1-thresh,thresh]])
    hidden_states = model.predict(X.T)
    
    # print trained parameters and plot
    print("Transition matrix")
    print(model.transmat_)
    print()
    
    print("means and vars of each hidden state")
    for i in range(n_components):
        print("%dth hidden state" % i)
        print("mean = ", model.means_[i])
        print("var = ", np.diag(model.covars_[i]))
        print()    
    
    if model.means_[0][0] > model.means_[1][0]: # assume most most frames have no train, switch labels if necessary
        hidden_states = 1 - hidden_states
        
    train_spotted = filter_out_short_motions(hidden_states, min_secs_for_train_to_pass, fps)
    
    plot_timeline(img_times, change_vals, hidden_states, train_spotted)
    
    utils.copy_image_subset(config.experiment_data_frames, config.experiment_output_frames_hmm, np.nonzero(train_spotted)[0])
    
    return train_spotted
def save_positive_negative_examples(img_times, train_spotted, n=20):
    train_inds, = np.nonzero(train_spotted)
    non_train_inds, = np.nonzero(1-train_spotted)
    
    positive_inds = train_inds[::len(train_inds)/(2*n)]
    negative_inds = non_train_inds[::len(non_train_inds)/(2*n)]
    
    utils.copy_image_subset(config.experiment_data_frames, os.path.join(config.experiment_output, 'positive_examples'), positive_inds[2::+1])
    utils.copy_image_subset(config.experiment_data_frames, os.path.join(config.experiment_output, 'positive_examples'), positive_inds[2::])
    utils.copy_image_subset(config.experiment_data_frames, os.path.join(config.experiment_output, 'negative_examples'), negative_inds)