Utilizando python-perceptron para posicionar vertebras ( o lo que gustes …)

Usando la biblioteca http://code.google.com/p/python-perceptron/ con unos minimos cambios que se pueden encontrar en mi repositorio de gitorious .. quizas solo eran necesarios para mi puntualmente … y como esta la biblioteca les sirve perfectamente …

En esta ocasión levantamos los datos de un entrenamiento en particular  dado por un experto en el tema en una planilla de calculos …

los cargamos en nuestra red .. la entrenamos y la colocamos a clasificar …  y para darnos una mejor idea implementamos con matplotlib un bonito gráfico


#! /usr/bin/python2
# -*- coding: utf-8 -*-

import perceptron
import xlrd
import numpy as np
from pylab import *

#---##---## ---##---##---##---##---##---##---##---##---##---##---##---
def cargarPatronEntrenamiento(path):

      book = xlrd.open_workbook(path)
      sheet = book.sheet_by_index(0)

      patron = {}
      entrada = []

      for i in range(1,sheet.nrows):
             entrada = []
             for j in range(1,sheet.ncols):
                  entrada.append([sheet.cell_value(i,j)])
             patron[i-1]= (np.array(entrada))

return patron
#---##---## ---##---##---##---##---##---##---##---##---##---##---##---
def entrenar(network, patron):

"""Con la matriz de entrenamiento proporcionada entrenar para modificar la
matriz de pesos"""

      for j in range(50): #TODO ...
           for i in patron.iterkeys():
               network.learn(patron[i], i)

#---##---## ---##---##---##---##---##---##---##---##---##---##---##---
if __name__ == "__main__":

      per = perceptron.Perceptron(35,23)
      patron = cargarPatronEntrenamiento("../data/entrenamiento.xls")
      entrenar(per, patron)
      forPlot = []

      for i in patron.iterkeys():
              output = per.classify(patron[i])
              forPlot.append(float(output[1]))

      ylim(0.20,1.0)
      xticks( arange(0,23), ('C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8',
                             'C9', 'C10', 'C11', 'C12', 'C13', 'D1', 
                             'D2', 'D3', 'D4', 'D5','D6', 'D7', 'D8', 
                             'D9', 'D10', 'D11') )
#Estos son valores fijos dados por el experto en tema

      plot(arange(0,23),[0.80,0.80,0.60,0.60,0.80,0.80,0.80,0.80,
                        0.60,0.60,0.6,0.60,0.80,0.80,0.80,0.80,0.80,
                        0.70,0.70,0.50,0.50,0.50,0.50,],'x-',
                        label='Confianza proporcionada por humano')

      plot(arange(0,23),forPlot,'o-',label='Estimados por la red' )

      y = []
      for i in range(23):
          y.append(0.40)

#este es el limite de confianza que suponemos ... (un poco bajo para que queden bien las estadisticas :P)

      plot(arange(0,23),y,'-',label=u'Límite de confianza')

      xlabel(u'Vértebras')
      ylabel('Porcentaje de confianza')
      title(u'Predicciones de posicionamiento de vértebras')
      legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.)

      show()

Y la salida quedaría algo asi …

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s