def plot_biclusters(): co_grid = ParameterGrid( {'n_clusters': np.arange(2, 10, 1), 'n_init': [20]} ) _y = pd.read_csv('./../../data_source/to_analysis/original_images/dfs_original_images.csv', index_col=0) y_orig = np.squeeze(_y.values) X_orig = pd.read_csv('./../../data_source/to_analysis/original_images/all_features_original_images.csv', index_col=0) scaler = StandardScaler() X_orig_std = scaler.fit_transform(X_orig.values) #_run_experiment(co_grid, X_orig_std) df_avg_co_scores = pd.read_csv('bic_scores.csv', index_col=0) best_co_config = co_grid[ np.argmin(df_avg_co_scores.loc[:, 'tvr'].values) - 1 ] print(best_co_config, min(df_avg_co_scores.loc[:, 'tvr'].values)) orig_co_model = SpectralCoclustering(random_state=0, svd_method='arpack') orig_co_model.set_params(**best_co_config) orig_co_model.fit(X_orig_std) #plt.figure() #_plot_tve(df_avg_co_scores, co_grid) plt.figure() _plot_bicmaps(X_orig_std, best_co_config)
def _plot_bicmaps(X_orig_std, best_co_config): # Train model with best config. orig_co_model = SpectralCoclustering(random_state=0, svd_method='arpack') orig_co_model.set_params(**best_co_config) orig_co_model.fit(X_orig_std) orig_co_row_sorted = X_orig_std[np.argsort(orig_co_model.row_labels_), :] orig_co_fit_data = orig_co_row_sorted[:, np.argsort(orig_co_model.column_labels_)] hmap = sns.heatmap( orig_co_fit_data, robust=True, cmap=plt.cm.viridis, fmt='f', vmin=np.min(orig_co_fit_data), vmax=np.max(orig_co_fit_data), cbar=False ) coords = bic_coords(orig_co_model, best_co_config['n_clusters']) for num in coords.index: plt.plot( (coords.loc[num, ['x1', 'x2', 'x2', 'x1', 'x1']]), (coords.loc[num, ['y1', 'y1', 'y2', 'y2', 'y1']]), c='darkred' ) plt.ylabel('Patients') plt.xlabel('Features') plt.yticks([], []) plt.xticks([], []) ax_divider = make_axes_locatable(hmap) cax = ax_divider.append_axes('right', size='3%', pad='2%') colorbar.colorbar( hmap.get_children()[0], cax=cax, orientation='vertical' ) #cax.xaxis.set_label_text('AUC', fontname='Sans') #cax.xaxis.set_label_position('top') cbar_ticks = np.linspace( np.nanmin(orig_co_fit_data), np.nanmax(orig_co_fit_data), 6 ) cax.yaxis.set_ticks(cbar_ticks) cax.yaxis.set_ticklabels([f'{num:.01f}' for num in cbar_ticks]) plt.savefig( '../biclustering/bic_map_original_images.pdf', bbox_inches='tight', transparent=True, dpi=CONFIG.DPI, )