Source code for flyqma.annotation.model_selection.visualization

import numpy as np
import matplotlib.pyplot as plt

from ...visualization import default_figure


[docs]class ModelSelectionVisualization: """ Methods for visualizing model selection procedure. """
[docs] def plot_models(self, panelsize=(3, 2), **kwargs): """ Plot model for each number of components. """ ncols = self.max_num_components - 2 fig, axes = plt.subplots(ncols=ncols, figsize=(panelsize[0]*ncols, panelsize[1])) for i, model in enumerate(self.models): model.plot_pdfs(ax=axes[i], **kwargs) if i == np.argmin(self.BIC): axes[i].set_title('SELECTED')
@default_figure def plot_information_criteria(self, bic=True, aic=True, ax=None, **kwargs): """ Plot information criteria versus number of components. Args: bic (bool) - include BIC scores aic (bool) - include AIC scores ax (matplotlib.axes.AxesSubplot) - if None, create axis Returns: fig (matplotlib.figure) """ # plot AIC scores if aic: ind = np.argmin(self.AIC) ax.plot(self.num_components, self.AIC, '.-r', label='AIC', markersize=10) ax.scatter(self.num_components[ind], self.AIC[ind], s=150, facecolor='y', lw=1, marker=(5, 1), zorder=99) # plot BIC scores if bic: ind = np.argmin(self.BIC) ax.plot(self.num_components, self.BIC, '.-b', label='BIC', markersize=10) ax.scatter(self.num_components[ind], self.BIC[ind], s=150, facecolor='y', lw=1, marker=(5, 1), zorder=99) # format axes ax.set_xlabel('Number of components in mixture') ax.set_ylabel('Information Criteria') ax.set_xticks(self.num_components) ax.set_yticks([]) ax.legend(frameon=False, bbox_to_anchor=(0., 1.02, 1., .102), loc='upper center', ncol=2, mode="center", borderaxespad=0.) ax.spines['right'].set_visible(False) ax.spines['top'].set_visible(False)