Beispiel #1
0
def plot_gram_matrix(x_train, gamma, n_reduce=None):
    kmatrix = gram_matrix(x_train, gamma)
    if n_reduce is not None:
        kmatrix = kmatrix[:n_reduce, :n_reduce]
    plt.pcolor(kmatrix, cmap=plt.cm.PuRd)
    plt.colorbar()
    plt.xlim([0, kmatrix.shape[0]])
    plt.ylim([0, kmatrix.shape[0]])
    plt.gca().invert_yaxis()
    plt.gca().xaxis.tick_top()
    plt.show()
Beispiel #2
0
def plot_lift_curve(y_test,
                    y_predicted,
                    curve_color='blue',
                    font_size=14,
                    x_lim=(0, 1),
                    y_lim=(0, 1)):
    fpr, tpr, thr = roc_curve(y_test, y_predicted)
    percentage_sample = [(n + 1) / len(tpr) for n in range(len(tpr))]
    plt.plot(fpr, percentage_sample, color=curve_color, lw=2)
    plt.xlim(x_lim)
    plt.ylim(y_lim)
    plt.xlabel('Percentage of sample', fontsize=font_size)
    plt.ylabel('Recall (TPR)', fontsize=font_size)
    plt.title('LIFT curve')
Beispiel #3
0
def plot_roc_curve(y_test,
                   y_predicted,
                   curve_color='coral',
                   font_size=14,
                   x_lim=(0, 1),
                   y_lim=(0, 1)):
    """
    cf :
    - https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html
    """
    fpr, tpr, thr = roc_curve(y_test, y_predicted)
    auroc = auc(fpr, tpr)
    plt.plot(fpr, tpr, label=f'AUROC : {auroc:.2f}', color=curve_color, lw=2)
    # Random classifier line plot
    plt.plot([0, 1], [0, 1], linestyle='--')
    plt.xlim(x_lim)
    plt.ylim(y_lim)
    plt.xlabel('1 - specificity (FPR)', fontsize=font_size)
    plt.ylabel('Recall (TPR)', fontsize=font_size)
    plt.title('Receiver operating characteristic')
    plt.legend(loc="lower right")
Beispiel #4
0
def plot_training_curve(history,
                        value_type='accuracy',
                        fine_tuning=False,
                        initial_epochs=None):
    """
  https://machinelearningmastery.com/diagnose-overfitting-underfitting-lstm-models/
  """
    plt.plot(history.history[value_type])
    plt.plot(history.history[f'val_{value_type}'])
    if fine_tuning:
        plt.plot([initial_epochs - 1, initial_epochs - 1],
                 plt.ylim(),
                 label='Start Fine Tuning')
    plt.title('Training curve')
    plt.ylabel(value_type.capitalize())
    plt.xlabel('Epoch')
    plt.legend(['train', 'test'], loc='upper left')
    plt.show()
Beispiel #5
0
    def plot_correlation_circle(self,
                                n_plan=None,
                                labels=None,
                                label_rotation=0,
                                lims=None,
                                save_as_img=False,
                                plot_size=(10, 8)):
        """

        """
        factorial_plan_nb = self.default_factorial_plan_nb if n_plan is None else n_plan
        # Build a list of tuples (example : [(0, 1), (2, 3), ... ])
        axis_ranks = [(x, x + 1) for x in range(0, factorial_plan_nb, 2)]
        pcs = self.pca.components_
        for d1, d2 in axis_ranks:
            if d2 < self.n_comp:
                fig, ax = plt.subplots(figsize=plot_size)
                # Fix factorial plan limits
                if lims is not None:
                    xmin, xmax, ymin, ymax = lims
                elif pcs.shape[1] < 30:
                    xmin, xmax, ymin, ymax = -1, 1, -1, 1
                else:
                    xmin, xmax, ymin, ymax = min(pcs[d1, :]), max(
                        pcs[d1, :]), min(pcs[d2, :]), max(pcs[d2, :])
                # affichage des flèches
                # s'il y a plus de 30 flèches, on n'affiche pas le triangle à leur extrémité
                if pcs.shape[1] < 30:
                    plt.quiver(np.zeros(pcs.shape[1]),
                               np.zeros(pcs.shape[1]),
                               pcs[d1, :],
                               pcs[d2, :],
                               angles='xy',
                               scale_units='xy',
                               scale=1,
                               color="grey")
                    # (doc : https://matplotlib.org/api/_as_gen/matplotlib.pyplot.quiver.html)
                else:
                    lines = [[[0, 0], [x, y]] for x, y in pcs[[d1, d2]].T]
                    ax.add_collection(
                        LineCollection(lines, axes=ax, alpha=.1,
                                       color='black'))
                # Display variables labels
                if labels is not None:
                    for i, (x, y) in enumerate(pcs[[d1, d2]].T):
                        if xmin <= x <= xmax and ymin <= y <= ymax:
                            plt.text(x,
                                     y,
                                     labels[i],
                                     fontsize='14',
                                     ha='center',
                                     va='center',
                                     rotation=label_rotation,
                                     color="blue",
                                     alpha=0.5)  # fontsize : 14
                # Plot circle
                circle = plt.Circle((0, 0), 1, facecolor='none', edgecolor='b')
                plt.gca().add_artist(circle)
                # définition des limites du graphique
                plt.xlim(xmin, xmax)
                plt.ylim(ymin, ymax)
                # affichage des lignes horizontales et verticales
                plt.plot([-1, 1], [0, 0], color='grey', ls='--')
                plt.plot([0, 0], [-1, 1], color='grey', ls='--')
                # Axes labels with % explained variance
                plt.xlabel('F{} ({}%)'.format(d1 + 1,
                                              round(100 * self.evr[d1], 1)),
                           labelpad=20)
                plt.ylabel('F{} ({}%)'.format(d2 + 1,
                                              round(100 * self.evr[d2], 1)),
                           labelpad=20)
                plt.title("Cercle des corrélations (F{} et F{})".format(
                    d1 + 1, d2 + 1),
                          pad=20)
                if save_as_img:
                    plt.tight_layout()
                    plt.savefig(
                        'corr_circle_{}.jpg'.format(1 if d1 == 0 else d1))
                plt.show(block=False)
Beispiel #6
0
 def plot_factorial_planes(self,
                           n_plan=None,
                           X_projected=None,
                           labels=None,
                           alpha=1,
                           illustrative_var=None,
                           illustrative_var_title=None,
                           save_as_img=False,
                           plot_size=(10, 8)):
     """
     :param: axis_nb: the total number of axes to display (default is kaiser criterion divided by 2)
     """
     X_projected = self.X_projected if X_projected is None else X_projected
     factorial_plan_nb = self.default_factorial_plan_nb if n_plan is None else n_plan
     axis_ranks = [(x, x + 1) for x in range(0, factorial_plan_nb, 2)]
     for d1, d2 in axis_ranks:
         if d2 < self.n_comp:
             fig = plt.figure(figsize=plot_size)
             # Display data points
             if illustrative_var is None:
                 plt.scatter(X_projected[:, d1],
                             X_projected[:, d2],
                             alpha=alpha)
             else:
                 illustrative_var = np.array(illustrative_var)
                 for value in np.unique(illustrative_var):
                     selected = np.where(illustrative_var == value)
                     plt.scatter(X_projected[selected, d1],
                                 X_projected[selected, d2],
                                 alpha=alpha,
                                 label=value)
                 plt.legend(title=illustrative_var_title
                            if illustrative_var_title is not None else None)
             # Display data points labels
             if labels is not None:
                 for i, (x, y) in enumerate(X_projected[:, [d1, d2]]):
                     plt.text(x,
                              y,
                              labels[i],
                              fontsize='12',
                              ha='center',
                              va='bottom')
                     # Fix factorial plan limits
             boundary = np.max(np.abs(X_projected[:, [d1, d2]])) * 1.1
             plt.xlim([-boundary, boundary])
             plt.ylim([-boundary, boundary])
             # Display horizontal & vertical lines
             plt.plot([-100, 100], [0, 0], color='grey', ls='--')
             plt.plot([0, 0], [-100, 100], color='grey', ls='--')
             # Axes labels with % explained variance
             plt.xlabel('F{} ({}%)'.format(d1 + 1,
                                           round(100 * self.evr[d1], 1)),
                        labelpad=20)
             plt.ylabel('F{} ({}%)'.format(d2 + 1,
                                           round(100 * self.evr[d2], 1)),
                        labelpad=20)
             plt.title("Projection des individus (sur F{} et F{})".format(
                 d1 + 1, d2 + 1),
                       pad=20)
             if save_as_img:
                 plt.tight_layout()
                 plt.savefig(
                     'factorial_plan_{}.jpg'.format(1 if d1 == 0 else d1))
             plt.show(block=False)