Esempio n. 1
0
def plotLocallyWeightedLines(inputs,lines,lines_weighted,ax,n_samples_per_dim,activations_normalized=[],activations=[]):
    """Plots locally weighted lines, whilst being smart about the dimensionality of input data."""
    
    n_dims = len(numpy.atleast_1d(inputs[0]))
    if (n_dims==1):
        
        #line_handles = ax.plot(inputs,lines, '-', color='#cccccc')
        line_handles = ax.plot(inputs,lines_weighted, '-', color='red')

        y_lim_min = min(lines_weighted) - 0.2*(max(lines_weighted)-min(lines_weighted))
        y_lim_max = max(lines_weighted) + 0.2*(max(lines_weighted)-min(lines_weighted))
        ax.set_ylim(y_lim_min,y_lim_max)

        if (len(activations_normalized)>0):
              ax_two = ax.twinx()
              line_handles_bfs =               plotBasisFunctions(inputs,activations,ax_two,n_samples_per_dim)
              plt.setp(line_handles_bfs,color='#aaffaa')
              line_handles_bfs = plotBasisFunctions(inputs,activations_normalized,ax_two,n_samples_per_dim)
              plt.setp(line_handles_bfs,color='green')
              for tl in ax_two.get_yticklabels():
                    tl.set_color('green')
                    
              ax_two.set_ylim(-2.0,3.0)
   
              for ii in xrange(len(activations_normalized[0])):
                    active = activations_normalized[:,ii]>(max(activations_normalized[:,ii])*0.75)
                    ax.plot(inputs[active],lines[active,ii], '-',color='#aaaaaa',linewidth='3')
    
    elif (n_dims==2):
        n_lines = len(lines[0])
        # Have a look at the colormaps here and decide which one you'd like:
        # http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html
        colormap = plt.cm.Set3
        colors = [colormap(i) for i in numpy.linspace(0, 0.9, n_lines)]

        inputs_0_on_grid = numpy.reshape(inputs[:,0],n_samples_per_dim)
        inputs_1_on_grid = numpy.reshape(inputs[:,1],n_samples_per_dim)
        if (len(activations)>0):
            for i_line in range(n_lines):
                cur_color = colors[i_line]
                cur_line       = lines[:,i_line];
                cur_activations = activations[:,i_line];
                cur_line[cur_activations<0.4] = numpy.nan # Make plotting easier by leaving out small numbers
                line_on_grid = numpy.reshape(cur_line,n_samples_per_dim)
                line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=2,rstride=1, cstride=1, color=cur_color)
            
        line_on_grid = numpy.reshape(lines_weighted,n_samples_per_dim)
        line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=1,rstride=1, cstride=1, color="#333333")
          
    else:
        print 'Cannot plot input data with a dimensionality of '+str(n_dims)+'.'
        line_handles = []
        
    return line_handles
Esempio n. 2
0
def plotLocallyWeightedLines(inputs,
                             lines,
                             ax,
                             n_samples_per_dim,
                             activations=None,
                             activations_unnormalized=None):
    """Plots locally weighted lines, whilst being smart about the dimensionality of input data."""

    line_handles = []
    n_dims = len(numpy.atleast_1d(inputs[0]))
    if (n_dims == 1):

        if not activations is None:
            ax_two = ax.twinx()

            # Plot basis functions
            if not activations_unnormalized is None:
                line_handles_bfs = plotBasisFunctions(
                    inputs, activations_unnormalized, ax_two,
                    n_samples_per_dim)
                plt.setp(line_handles_bfs, color='#aaffaa')
            line_handles_bfs = plotBasisFunctions(inputs, activations, ax_two,
                                                  n_samples_per_dim)
            plt.setp(line_handles_bfs, color='green')
            for tl in ax_two.get_yticklabels():
                tl.set_color('green')

            ax_two.set_ylim(-2.0, 3.0)

            # Plot line segements
            n_basis_functions = len(numpy.atleast_1d(activations[0]))
            if n_basis_functions == 1:
                active = activations > (max(activations) * 0.001)
                line_handles = ax.plot(inputs[active],
                                       lines[active],
                                       '--',
                                       color='#aaaaaa',
                                       linewidth=0.5)
            else:
                for ii in range(n_basis_functions):
                    active = activations[:, ii] > (max(activations[:, ii]) *
                                                   0.0001)
                    line_handles = ax.plot(inputs[active],
                                           lines[active, ii],
                                           '--',
                                           color='#aaaaaa',
                                           linewidth=1)

    elif (n_dims == 2):
        inputs_0_on_grid = numpy.reshape(inputs[:, 0], n_samples_per_dim)
        inputs_1_on_grid = numpy.reshape(inputs[:, 1], n_samples_per_dim)

        n_lines = len(lines[0])
        # Have a look at the colormaps here and decide which one you'd like:
        # http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html
        colormap = plt.cm.Set1
        shuffler = numpy.linspace(0, 0.9, n_lines)
        random.shuffle(shuffler)
        colors = [colormap(i) for i in shuffler]

        if (len(activations) > 0):
            min_val = numpy.amax(lines)
            for i_line in range(n_lines):
                cur_color = colors[i_line]
                cur_line = lines[:, i_line]
                cur_activations = activations[:, i_line]
                cur_line[
                    cur_activations <
                    0.25] = numpy.nan  # Make plotting easier by leaving out small numbers
                line_on_grid = numpy.reshape(cur_line, n_samples_per_dim)
                line_handles = ax.plot_wireframe(inputs_0_on_grid,
                                                 inputs_1_on_grid,
                                                 line_on_grid,
                                                 linewidth=0.5,
                                                 rstride=1,
                                                 cstride=1,
                                                 color=cur_color)

                if numpy.nanmin(cur_line) < min_val:
                    min_val = numpy.nanmin(cur_line)

            level = numpy.mean(
                [numpy.amin(activations),
                 numpy.amax(activations)])
            for i_line in range(n_lines):
                cur_color = colors[i_line]
                cur_activations = activations[:, i_line]
                acts_on_grid = numpy.reshape(cur_activations,
                                             n_samples_per_dim)
                cset = ax.contour(inputs_0_on_grid,
                                  inputs_1_on_grid,
                                  acts_on_grid, [level],
                                  zdir='z',
                                  offset=min_val,
                                  colors=[cur_color])

        #line_on_grid = numpy.reshape(lines_weighted,n_samples_per_dim)
        #line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=1,rstride=1, cstride=1, color="#333333")

    else:
        print('Cannot plot input data with a dimensionality of ' +
              str(n_dims) + '.')
        line_handles = []

    return line_handles
Esempio n. 3
0
def plotLocallyWeightedLines(inputs,lines,ax,n_samples_per_dim,activations=None,activations_unnormalized=None):
    """Plots locally weighted lines, whilst being smart about the dimensionality of input data."""
    
    line_handles = []
    n_dims = len(numpy.atleast_1d(inputs[0]))
    if (n_dims==1):
        
        if not activations is None:
            ax_two = ax.twinx()
            
            # Plot basis functions
            if not activations_unnormalized is None:
                line_handles_bfs = plotBasisFunctions(inputs,activations_unnormalized,ax_two,n_samples_per_dim)
                plt.setp(line_handles_bfs,color='#aaffaa')
            line_handles_bfs = plotBasisFunctions(inputs,activations,ax_two,n_samples_per_dim)
            plt.setp(line_handles_bfs,color='green')
            for tl in ax_two.get_yticklabels():
                tl.set_color('green')
            
            ax_two.set_ylim(-2.0,3.0)
            
            # Plot line segements
            n_basis_functions =  len(numpy.atleast_1d(activations[0]));
            if n_basis_functions==1:
              active = activations>(max(activations)*0.001)
              line_handles = ax.plot(inputs[active],lines[active], '--',color='#aaaaaa',linewidth=0.5)
            else:
              for ii in xrange(n_basis_functions):
                  active = activations[:,ii]>(max(activations[:,ii])*0.0001)
                  line_handles = ax.plot(inputs[active],lines[active,ii], '--',color='#aaaaaa',linewidth=1)
    
    elif (n_dims==2):
        inputs_0_on_grid = numpy.reshape(inputs[:,0],n_samples_per_dim)
        inputs_1_on_grid = numpy.reshape(inputs[:,1],n_samples_per_dim)
        
        
        n_lines = len(lines[0])
        # Have a look at the colormaps here and decide which one you'd like:
        # http://matplotlib.org/1.2.1/examples/pylab_examples/show_colormaps.html
        colormap = plt.cm.Set1
        shuffler = numpy.linspace(0, 0.9, n_lines)
        random.shuffle(shuffler)
        colors = [colormap(i) for i in shuffler]


        if (len(activations)>0):
            min_val = numpy.amax(lines)
            for i_line in range(n_lines):
                cur_color = colors[i_line]
                cur_line       = lines[:,i_line];
                cur_activations = activations[:,i_line];
                cur_line[cur_activations<0.25] = numpy.nan # Make plotting easier by leaving out small numbers
                line_on_grid = numpy.reshape(cur_line,n_samples_per_dim)
                line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=0.5,rstride=1, cstride=1, color=cur_color)
                
                if numpy.nanmin(cur_line)<min_val:
                    min_val = numpy.nanmin(cur_line)
            
            level = numpy.mean([numpy.amin(activations), numpy.amax(activations)])
            for i_line in range(n_lines):
                cur_color = colors[i_line]
                cur_activations = activations[:,i_line];
                acts_on_grid = numpy.reshape(cur_activations,n_samples_per_dim)
                cset = ax.contour(inputs_0_on_grid, inputs_1_on_grid, acts_on_grid, [level], zdir='z', offset=min_val, colors=[cur_color])
                
                
        #line_on_grid = numpy.reshape(lines_weighted,n_samples_per_dim)
        #line_handles = ax.plot_wireframe(inputs_0_on_grid,inputs_1_on_grid,line_on_grid,linewidth=1,rstride=1, cstride=1, color="#333333")
          
    else:
        print 'Cannot plot input data with a dimensionality of '+str(n_dims)+'.'
        line_handles = []
        
    return line_handles