Ejemplo n.º 1
0
def prueba_guardar_mal():
    '''
    Intentaremos guardar algo incorrecto
    
    >>> prueba_guardar_mal()
    Detecta el fallo
    
    '''
    try:
        Almacen.guardar('Invalido')
    except Exception as e:
        if str(e) == 'Tipo a guardar incorrecto':
            print('Detecta el fallo')
        else:
            raise
 def transcribir_entrenar(self,
                          repositorios,
                          sinEtiqueta,
                          stopW='True',
                          idioma='spanish',
                          comentarios=True,
                          metodo='CV'):
     issues_text = []
     labels = []
     for r in repositorios:
         repositorio = Almacen.sacarRepositorios(idRepositorio=r)
         for i in repositorio.issues:
             if sinEtiqueta or len(i.labels) > 0:
                 temp = i.title
                 if i.description is not None:
                     temp += ' ' + i.description
                 if comentarios:
                     for c in i.notes:
                         temp += ' ' + c
                 issues_text.append(temp)
                 labels.append(i.labels)
     y = labels
     tipoBolsa = TranscriptorMultiClass.switchTipoBolsa[metodo]
     if stopW:
         stopWords = set(stopwords.words(idioma))
         self.bolsa = tipoBolsa(stop_words=stopWords)
     else:
         self.bolsa = tipoBolsa()
     self.bolsa.fit(issues_text)
     x = self.bolsa.transform(issues_text).toarray()
     x = np.array(x)
     return [x, y]
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')
Ejemplo n.º 4
0
def prueba_almacenamiento():
    '''
    >>> prueba_almacenamiento()
    id  19766159  description  Proyecto de prueba del TFG para la extracción de issues.
    iid  1  labels  ['learn']
    iid  2  labels  ['enhancement']
    iid  3  labels  ['learn']
    iid  4  labels  ['critical', 'enhancement']
    iid  5  labels  ['learn']
    iid  6  labels  ['enhancement']
    
    '''
    extractor = Extractor.Extractor('wgm1001/TFG-tst')
    proyecto = extractor.extraer()
    Almacen.guardar(proyecto)
    p = Almacen.sacarRepositorios(proyecto.pid)
    print('id ', p.pid, ' description ', p.description)
    for i in p.issues:
        print('iid ', i.iid, ' labels ', i.labels)
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')
Ejemplo n.º 6
0
def prueba_recuperacion_erronea():
    '''
    Trataremos de extraer un repositorio erroneo
    
    >>> prueba_recuperacion_erronea()
    Detecta el primer fallo
    Detecta el segundo fallo
    Detecta el tercer fallo
    Detecta el último fallo
    
    '''
    try:
        Almacen.sacarRepositorios(-245)
    except Exception as e:
        if str(e) == 'Id de repositorio no encontrado.':
            print('Detecta el primer fallo')
        else:
            raise
    try:
        Almacen.sacarRepositorios('Invalido')
    except Exception as e:
        if str(e) == 'Tipos a extraer incorrectos':
            print('Detecta el segundo fallo')
        else:
            raise
    try:
        Almacen.sacarRepositorios(moment=datetime.now())
    except Exception as e:
        if str(e) == 'Tipos a extraer incorrectos':
            print('Detecta el tercer fallo')
        else:
            raise
    try:
        Almacen.sacarRepositorios(idRepositorio=5, moment='Invalido')
    except Exception as e:
        if str(e) == 'Tipos a extraer incorrectos':
            print('Detecta el último fallo')
        else:
            raise
Ejemplo n.º 7
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()