Ejemplo n.º 1
0
 def add_arrow(self, start, end):
     self._pylab.gca().add_patch(
         pylab.Arrow(start[0],
                     start[1],
                     end[0] - start[0],
                     end[1] - start[1],
                     width=0.1))
Ejemplo n.º 2
0
             interpolation='nearest',
             extent=(mx.min(), mx.max(), my.min(), my.max()),
             cmap=pylab.cm.Blues,
             aspect='auto',
             origin='lower')

c2a, c2b, c2c = km.cluster_centers_
pylab.scatter(km.cluster_centers_[:, 0],
              km.cluster_centers_[:, 1],
              marker='x',
              linewidth=2,
              s=100,
              color='black')
# import pdb;pdb.set_trace()
pylab.gca().add_patch(
    pylab.Arrow(c1a[0], c1a[1], c2a[0] - c1a[0], c2a[1] - c1a[1], width=0.1))
pylab.gca().add_patch(
    pylab.Arrow(c1b[0], c1b[1], c2b[0] - c1b[0], c2b[1] - c1b[1], width=0.1))
pylab.gca().add_patch(
    pylab.Arrow(c1c[0], c1c[1], c2c[0] - c1c[0], c2c[1] - c1c[1], width=0.1))

pylab.savefig(os.path.join("..", "1400_03_0%i.png" % i))
pylab.clf()

i += 1

#################### 3 iterations ####################
km = KMeans(init='random',
            n_clusters=num_clusters,
            verbose=1,
            n_init=1,
Ejemplo n.º 3
0
def kmeans_simple(F, P):
    # N : Numero total de objetos
    # M : Numero de caracteristicas
    N, M = F.shape
    # Critério de parada
    m = np.Inf
    m_min = 0.01
    # Contador
    i = 0
    while m > m_min:
        print '----------'
        print 'Iteracao ', i,

        # Calcula a matriz de distancias inicial (D):
        D = distance.cdist(F, P, metric='euclidean')

        print '\nMatriz de distancias(D):'
        print D

        # Objetos mais proximos do vetor 1
        L1 = F[D[:, 0] <= D[:, 1]]
        # Objetos mais proximos do vetor 2
        L2 = F[D[:, 0] > D[:, 1]]

        # --- Print ---
        print '\nPontos em #1:'
        print L1
        print '\nPontos em #1:'
        print L2

        # Armazena valores dos vetores na ultima iteracao
        P_old = P.copy()

        # Move os vetores de prototipo
        P = np.zeros([2, M])
        P[0, :] = L1.mean()
        P[1, :] = L2.mean()

        # --- PRINT ---
        print '\nP_old:'
        print P_old
        print '\nP: '
        print P

        # Distancia entre a posicao dos vetores atual e anterior.
        m = np.max(np.sqrt(((P_old - P)**2).sum(0)))
        print 'm: '
        print m

        # Pepara para plotar
        class_C1 = L1
        class_C2 = L2

        title = 'K-means. Iteracao ' + str(i)

        plt.figure()
        plt.subplot(111)
        plt.axis('equal')
        plt.scatter(class_C1[:, 0], class_C1[:, 1], c='red')
        plt.scatter(class_C2[:, 0], class_C2[:, 1], c='blue')

        plt.scatter(P_old[0, 0], P_old[0, 1], marker='x', c='red')
        plt.scatter(P_old[1, 0], P_old[1, 1], marker='x', c='blue')

        ax = plt.gca()
        ax.add_patch(
            plt.Arrow(P_old[0, 0], P_old[0, 1], P[0, 0] - P_old[0, 0],
                      P[0, 1] - P_old[0, 1]))
        ax.add_patch(
            plt.Arrow(P_old[1, 0], P_old[1, 1], P[1, 0] - P_old[1, 0],
                      P[1, 1] - P_old[1, 1]))

        plt.scatter(P[0, 0], P[0, 1], marker='x', c='red')
        plt.scatter(P[1, 0], P[1, 1], marker='x', c='blue')
        plt.title(title)
        plt.xlabel('Caracteristica 0')
        plt.ylabel('Caracteristica 1')
        # Mostra as figuras na tela.
        plt.show()

        i = i + 1
        # ---------------------------------------------------------------------

    # Calcula a matriz de distancias inicial (D):
    D = distance.cdist(F, P, metric='euclidean')

    # Gera valores para o retorno
    CLASS = np.zeros(N)
    # Objetos mais proximos do vetor 1
    CLASS[D[:, 0] <= D[:, 1]] = 0
    # Objetos mais proximos do vetor 2
    CLASS[D[:, 0] > D[:, 1]] = 1

    # Pepara para plotar
    class_C1 = F[CLASS == 0, :]
    class_C2 = F[CLASS == 1, :]

    plt.figure()
    plt.subplot(111)
    plt.axis('equal')
    plt.scatter(class_C1[:, 0], class_C1[:, 1], c='red')
    plt.scatter(class_C2[:, 0], class_C2[:, 1], c='blue')
    plt.scatter(P[0, 0], P[0, 1], marker='x', c='red')
    plt.scatter(P[1, 0], P[1, 1], marker='x', c='blue')
    plt.title('K-means. Final.')
    plt.xlabel('Caracteristica 0')
    plt.ylabel('Caracteristica 1')
    # Mostra as figuras na tela.
    plt.show()

    return [CLASS, P]
Ejemplo n.º 4
0
def visualization(robot, pr, factor=7):

    plt.figure("Robot in the world", figsize=(field.w_width, field.w_length))
    plt.title('Particle filter')

    # draw coordinate grid for plotting
    grid = [
        -field.w_width / 2.0, field.w_width / 2.0, -field.w_length / 2.0,
        field.w_length / 2.0
    ]
    ax = plt.axis(grid)

    landmarks = {
        "blue_posts": [[-1.0, -4.5], [1.0, -4.5]],
        "yellow_posts": [[-1.0, 4.5], [1.0, 4.5]]
    }

    for el in field.field:
        if el == 'circles':
            for circle in field.field['circles']:
                plot_circle = plt.Circle((circle[0], circle[1]),
                                         circle[2],
                                         linewidth=2,
                                         fill=False,
                                         edgecolor='#330000')
                plt.gca().add_patch(plot_circle)
        if el == 'lines':
            for line in field.field['lines']:
                plot_line = plt.Line2D(line[0],
                                       line[1],
                                       linewidth=2,
                                       linestyle="-",
                                       color='#330000')
                plt.gca().add_line(plot_line)
        if el == 'rectangles':
            for rectangle in field.field['rectangles']:
                rect = plt.Rectangle(rectangle[0],
                                     rectangle[1],
                                     rectangle[2],
                                     linewidth=2,
                                     linestyle="-",
                                     fill=False,
                                     edgecolor='#330000')
                plt.gca().add_patch(rect)
    '''
    # draw particles
    for ind in range(len(p)):
 
        # particle
        circle = plt.Circle((p[ind][0].x, p[ind][0].y), 1./factor/2, facecolor='#ffb266', edgecolor='#994c00', alpha=0.5)
        plt.gca().add_patch(circle)
 
        # particle's orientation
        arrow = plt.Arrow(p[ind][0].x, p[ind][0].y, 2*math.cos(p[ind][0].yaw)/factor, 2*math.sin(p[ind][0].yaw)/factor, width=1/factor, alpha=1., facecolor='#994c00', edgecolor='#994c00')
        plt.gca().add_patch(arrow)
    '''
    # draw resampled particles
    for ind in range(len(pr)):

        # particle
        circle = plt.Circle((pr[ind][0].y, pr[ind][0].x),
                            1. / factor / 2,
                            facecolor='#ffb266',
                            edgecolor='#cc0000',
                            alpha=0.5)
        plt.gca().add_patch(circle)

        # particle's orientation
        arrow = plt.Arrow(pr[ind][0].y,
                          pr[ind][0].x,
                          2 * math.sin(pr[ind][0].yaw) / factor,
                          math.cos(pr[ind][0].yaw) / factor,
                          width=1 / factor,
                          alpha=1.,
                          facecolor='#006600',
                          edgecolor='#006600')
        plt.gca().add_patch(arrow)

    # robot's location
    circle = plt.Circle((robot.y, robot.x),
                        1. / factor,
                        facecolor='#FF66E9',
                        edgecolor='#FF66E9')
    plt.gca().add_patch(circle)

    # robot's orientation
    arrow = plt.Arrow(robot.y,
                      robot.x,
                      3 * math.sin(robot.yaw) / factor,
                      3 * math.cos(robot.yaw) / factor,
                      width=1.0 / factor,
                      alpha=0.5,
                      facecolor='#000000',
                      edgecolor='#000000')
    plt.gca().add_patch(arrow)

    #fixed landmarks of known locations2

    for lm in landmarks:
        for lms in landmarks[lm]:
            if lm == "yellow_posts":
                circle = plt.Circle(((lms[0], lms[1])),
                                    1. / factor,
                                    facecolor='#ffff00',
                                    edgecolor='#330000')
                plt.gca().add_patch(circle)
            else:
                circle = plt.Circle(((lms[0], lms[1])),
                                    1. / factor,
                                    facecolor='#060C73',
                                    edgecolor='#330000')
                plt.gca().add_patch(circle)