Пример #1
0
def entrena(conjunto,
            resultados,
            clases,
            n_epochs,
            rate_inicial,
            pesos_iniciales,
            rate_decay,
            summary=None):
    pesos = None
    rate = rate_inicial
    if pesos_iniciales == None:
        pesos = clasificador.genera_pesos(len(conjunto[0]))
    else:
        pesos = pesos_iniciales
    epoch = 0
    n_errors = 1
    while epoch < n_epochs and n_errors != 0:
        n_errors = 0
        for index in range(0, len(conjunto)):
            prediccion = clasificador.calcular_prediccion(conjunto[index],
                                                          pesos,
                                                          clases,
                                                          is_sigma=False)
            if prediccion != resultados[index]:
                n_errors += 1
            pesos = ajusta_pesos(
                conjunto[index], pesos,
                clasificador.busca_resultado(resultados[index], clases), rate)
        if rate_decay:
            rate = clasificador.decaer_ratio(rate_inicial, epoch)
        if summary != None:
            summary.add_epoch(n_errors / len(conjunto))
        epoch += 1
    return pesos
Пример #2
0
def generar_conjunto_aleatorio(rango,
                               dim,
                               tam,
                               separable=True,
                               clases=None,
                               pesos=None):
    hiperplano = None
    if pesos is None:
        hiperplano = Clasificador.genera_pesos(dim)
    else:
        hiperplano = pesos
    conjunto = []
    soluciones = []
    for i in range(0, tam):
        atributos = []
        for j in range(0, dim):
            atributos.append(random.randint(-rango, rango))
        prediccion = Clasificador.calcular_prediccion(atributos,
                                                      hiperplano,
                                                      None,
                                                      is_sigma=False)
        conjunto.append(atributos)
        if clases != None:
            soluciones.append(clases[prediccion])
        else:
            soluciones.append(prediccion)
    if not separable:
        soluciones = altera_soluciones(soluciones, rango)
    return (hiperplano, conjunto, soluciones)
Пример #3
0
 def clasifica(self, ej):
     conjunto = ej
     if self.normaliza:
         conjunto = clasificador.normalizar_elemento(
             ej, self.media, self.desviacion)
     return clasificador.calcular_prediccion(conjunto,
                                             self.pesos,
                                             self.clases,
                                             is_sigma=False)