def mean_confidence_interval(vals, confidence): a = 1.0 * np.array(vals) n = len(a) m, se = np.mean(a), scipy.stats.sem(a) h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1) return m - h, m, m + h def compare_hidden_states(hmm_model, cols_features, conf_interval, iters = 1000): plt.figure(figsize=(15, 15)) fig, axs = plt.subplots(len(cols_features), hmm_model.n_components, figsize = (15, 15)) colours = cm.prism(np.linspace(0, 1, hmm_model.n_components)) for i in range(0, model.n_components): mc_df = pd.DataFrame() # Samples generation for j in range(0, iters): row = np.transpose(hmm_model._generate_sample_from_state(i)) mc_df = mc_df.append(pd.DataFrame(row).T) mc_df.columns = cols_features for k in range(0, len(mc_df.columns)): axs[k][i].hist(mc_df[cols_features[k]], color = colours[i]) axs[k][i].set_title(cols_features[k] + " (state " + str(i) + "): " + str(np.round(mean_confidence_interval(mc_df[cols_features[k]], conf_interval), 3))) axs[k][i].grid(True) plt.tight_layout() compare_hidden_states(hmm_model=model, cols_features=cols_features, conf_interval=0.95)