def pruebaAlmacenamientoModelo():
    '''
    Probaremos a guardar un modelo entrenado en la base de datos.
    
    >>> pruebaAlmacenamientoModelo()
    Llega sin errores
    
    '''
    p = Predictor(modelo='RandomForest', MultiManual=False)
    p.entrenar(repositorios=[19766159],
               stopW=True,
               idioma='english',
               comentarios=True,
               sinEtiqueta=True)
    Almacen.guardarModelo(p)
    p = Almacen.sacarModelo([19766159])
    Almacen.sacarRepositorios(19766159)
    print('Llega sin errores')
Exemplo n.º 2
0
 def add_predictors(self, nb):
     old_length = len(self.predictors)
     for index in range(old_length, old_length + nb):
         self.predictors.append(
             Predictor(id_=index,
                       prediction_queue=self.prediction_queue,
                       agents=self.agents,
                       batch_size=self.prediction_batch_size,
                       model=self.impala,
                       statistics_queue=self.statistics_queue,
                       device=self.device))
def pruebaModeloInvalido():
    '''
    Probaremos que nos salte el error si el modelo es incorrecto
    
    >>> pruebaModeloInvalido()
    Error detectado
    
        '''
    try:
        Predictor(modelo='Inválido', MultiManual=False)
    except Exception as e:
        if str(e) == 'Modelo desconocido':
            print('Error detectado')
        else:
            raise
def pruebaOneVsRest():
    '''
    Probaremos que funcione la predicción con este modelo
    
    >>> pruebaOneVsRest()
    Ha llegado sin fallos
    
    '''
    p = Predictor(modelo='OneVsRest', MultiManual=False)
    p.entrenar(repositorios=[19766159],
               stopW=True,
               idioma='english',
               comentarios=True,
               sinEtiqueta=True)
    rep = Almacen.sacarRepositorios(19766159)
    issue = [rep.issues[5].title]
    p.predecir(issue)
    print('Ha llegado sin fallos')
Exemplo n.º 5
0
def pruebaEficiencia():
    id_repositorios = [19766159, 183616, 8860457, 6094330, 3472737, 36189]
    log = open('.' + os.path.sep + 'Prueba Desempeño.txt', "a")
    try:
        log.write("---------Prueba de eficiencia hecha el " +
                  str(datetime.now()) + "---------\n")
        from src.ModeloSingleClass import ModeloSingleClass
        from src.ModeloMultiClass import ModeloMultiClass
        algoritmos_single = ModeloSingleClass.switchAlgoritmo.keys()
        algoritmos_multi = ModeloMultiClass.switchAlgoritmo.keys()
        #        algoritmos_single=['MultinomialNB']
        for repo in id_repositorios:
            log.write('************** Repositorio ' + str(repo) +
                      ' **************' + '\n')
            y_test = []
            mejor_acc = ['', 0]
            mejor_f1 = ['', 0]
            mejor_precis = ['', 0]
            mejor_rec = ['', 0]
            issues = Almacen.sacarRepositorios(repo).issues
            print(repo)
            for prediction in range(len(issues)):
                if not issues[prediction].labels:
                    issues[prediction].labels = ['Sin etiqueta']
            y = [i.labels for i in issues]
            y = np.array(y)
            binarizer = MultiLabelBinarizer().fit(y)
            y = binarizer.transform(y)
            for i in issues:
                y_test.append(i.labels)
            for mod in algoritmos_single:
                print(mod)
                log.write('____Algoritmo ' + mod + ' sin multietiqueta_____' +
                          '\n')
                clasificador = Predictor(modelo=mod, MultiManual=False)
                pred = []
                tiempo_train = 0.0
                tiempo_pred = 0.0
                accuracy = 0
                f1 = 0
                rec = 0
                precis = 0
                t0 = time()
                clasificador.entrenar(repositorios=[repo],
                                      stopW=True,
                                      idioma='english',
                                      comentarios=True,
                                      metodo='CV',
                                      sinEtiqueta=True)
                tiempo_train = time() - t0
                t0 = time()
                for i in issues:
                    pred.append(
                        clasificador.predecir([
                            str(i.title) + ' ' + str(i.description) + ' ' +
                            str(i.state) + ' ' + str(i.notes)
                        ]))
                tiempo_pred += time() - t0
                pred = np.array(pred)
                pred = binarizer.transform(pred)
                log.write('Entrenamiento %0.5fs' % (tiempo_train) +
                          ' Prediccion %0.5fs' % (tiempo_pred) + '\n')
                accuracy = jaccard_score(y, pred, average='micro')
                if accuracy > mejor_acc[1]:
                    mejor_acc[1] = accuracy
                    mejor_acc[0] = mod
                f1 = f1_score(y, pred, average='micro')
                if f1 > mejor_f1[1]:
                    mejor_f1[1] = f1
                    mejor_f1[0] = mod
                precis = precision_score(y, pred, average='micro')
                if precis > mejor_precis[1]:
                    mejor_precis[1] = precis
                    mejor_precis[0] = mod
                rec = recall_score(y, pred, average='micro')
                if rec > mejor_rec[1]:
                    mejor_rec[1] = rec
                    mejor_rec[0] = mod
                log.write('Accuracy score: %0.7f' % accuracy +
                          ' F1 score: %0.7f' % f1 +
                          ' Precision media score: %0.7f' % precis +
                          ' Recall score: %0.7f' % rec + '\n')
            for mod in algoritmos_single:
                print(mod)
                log.write('____Algoritmo ' + mod + ' con multietiqueta_____' +
                          '\n')
                clasificador = Predictor(modelo=mod, MultiManual=True)
                pred = []
                tiempo_train = 0.0
                tiempo_pred = 0.0
                accuracy = 0
                f1 = 0
                rec = 0
                precis = 0
                t0 = time()
                clasificador.entrenar(repositorios=[repo],
                                      stopW=True,
                                      idioma='english',
                                      comentarios=True,
                                      metodo='CV',
                                      sinEtiqueta=True)
                tiempo_train = time() - t0
                t0 = time()
                for i in issues:
                    pred.append(
                        clasificador.predecir([
                            str(i.title) + ' ' + str(i.description) + ' ' +
                            str(i.state) + ' ' + str(i.notes)
                        ]))
                tiempo_pred += time() - t0
                log.write('Entrenamiento %0.5fs' % (tiempo_train) +
                          ' Prediccion %0.5fs' % (tiempo_pred) + '\n')
                pred = np.array(pred)
                pred = binarizer.transform(pred)
                accuracy = jaccard_score(y, pred, average='micro')
                if accuracy > mejor_acc[1]:
                    mejor_acc[1] = accuracy
                    mejor_acc[0] = mod
                f1 = f1_score(y, pred, average='micro')
                if f1 > mejor_f1[1]:
                    mejor_f1[1] = f1
                    mejor_f1[0] = mod
                precis = precision_score(y, pred, average='micro')
                if precis > mejor_precis[1]:
                    mejor_precis[1] = precis
                    mejor_precis[0] = mod
                rec = recall_score(y, pred, average='micro')
                if rec > mejor_rec[1]:
                    mejor_rec[1] = rec
                    mejor_rec[0] = mod
                log.write('Accuracy score: %0.7f' % accuracy +
                          ' F1 score: %0.7f' % f1 +
                          ' Precision media score: %0.7f' % precis +
                          ' Recall score: %0.7f' % rec + '\n')
            for mod in algoritmos_multi:
                print(mod)
                log.write('____Algoritmo ' + mod + ' sin multietiqueta_____' +
                          '\n')
                clasificador = Predictor(modelo=mod, MultiManual=False)
                pred = []
                tiempo_train = 0.0
                tiempo_pred = 0.0
                accuracy = 0
                f1 = 0
                rec = 0
                precis = 0
                t0 = time()
                clasificador.entrenar(repositorios=[repo],
                                      stopW=True,
                                      idioma='english',
                                      comentarios=True,
                                      metodo='CV',
                                      sinEtiqueta=True)
                tiempo_train = time() - t0
                t0 = time()
                for i in issues:
                    pred.append(
                        clasificador.predecir([
                            str(i.title) + ' ' + str(i.description) + ' ' +
                            str(i.state) + ' ' + str(i.notes)
                        ]))
                tiempo_pred += time() - t0
                log.write('Entrenamiento %0.5fs' % (tiempo_train) +
                          ' Prediccion %0.5fs' % (tiempo_pred) + '\n')
                pred = np.array(pred)
                pred = binarizer.transform(pred)
                #                aciertos=0
                #                for prediction in range(len(pred)):
                #                    if pred[prediction][0] in issues[prediction].labels or (pred[prediction][0]=='Sin etiqueta' and not issues[prediction].labels):
                #                        aciertos+=1
                #                accuracy=aciertos/len(pred)
                accuracy = jaccard_score(y, pred, average='micro')
                if accuracy > mejor_acc[1]:
                    mejor_acc[1] = accuracy
                    mejor_acc[0] = mod
                f1 = f1_score(y, pred, average='micro')
                if f1 > mejor_f1[1]:
                    mejor_f1[1] = f1
                    mejor_f1[0] = mod
                precis = precision_score(y, pred, average='micro')
                if precis > mejor_precis[1]:
                    mejor_precis[1] = precis
                    mejor_precis[0] = mod
                rec = recall_score(y, pred, average='micro')
                if rec > mejor_rec[1]:
                    mejor_rec[1] = rec
                    mejor_rec[0] = mod
                log.write('Accuracy score: %0.7f' % accuracy +
                          ' F1 score: %0.7f' % f1 +
                          ' Precision media score: %0.7f' % precis +
                          ' Recall score: %0.7f' % rec + '\n')
            log.write(' Accuracy mejor con %0.7f es ' % mejor_acc[1] +
                      mejor_acc[0] + ' F1 mejor con %0.7f es ' % mejor_f1[1] +
                      mejor_f1[0] +
                      ' Recall mejor con %0.7f es ' % mejor_rec[1] +
                      mejor_rec[0] +
                      ' Precision  mejor con %0.7f es ' % mejor_precis[1] +
                      mejor_precis[0] + '\n')
    finally:
        log.close()
def pruebaBadArgs():
    '''
    En esta prueba introduciermos malos parametros en el entrenamiento.
    
    >>> pruebaBadArgs()
    Primer error detectado
    Segundo error detectado
    Tercer error detectado
    Cuarto error detectado
    Quinto error detectado
    Sexto error detectado
    '''
    p = Predictor(modelo='RandomForest', MultiManual=False)
    try:
        p.entrenar(repositorios=[19766159],
                   stopW='inválido',
                   idioma='english',
                   comentarios=True,
                   sinEtiqueta=True)
    except Exception as e:
        if str(e) == 'Argumentos incorrectos':
            print('Primer error detectado')
        else:
            raise
    try:
        p.entrenar(repositorios=[19766159],
                   stopW=True,
                   idioma='Inválido',
                   comentarios=True,
                   sinEtiqueta=True)
    except Exception as e:
        if str(e) == 'Argumentos incorrectos':
            print('Segundo error detectado')
        else:
            raise
    try:
        p.entrenar(repositorios=[19766159],
                   stopW=True,
                   idioma='english',
                   comentarios='invalido',
                   sinEtiqueta=True)
    except Exception as e:
        if str(e) == 'Argumentos incorrectos':
            print('Tercer error detectado')
        else:
            raise
    try:
        p.entrenar(repositorios=[],
                   stopW=True,
                   idioma='english',
                   comentarios=True,
                   sinEtiqueta=True)
    except Exception as e:
        if str(e) == 'Argumentos incorrectos':
            print('Cuarto error detectado')
        else:
            raise
    try:
        p.entrenar(repositorios=[19766159],
                   stopW=True,
                   idioma='english',
                   comentarios=True,
                   metodo='invalido',
                   sinEtiqueta=True)
    except Exception as e:
        if str(e) == 'Argumentos incorrectos':
            print('Quinto error detectado')
        else:
            raise
    try:
        p.entrenar(repositorios=[19766159],
                   stopW=True,
                   idioma='english',
                   comentarios=True,
                   sinEtiqueta='invalido')
    except Exception as e:
        if str(e) == 'Argumentos incorrectos':
            print('Sexto error detectado')
        else:
            raise