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.º 2
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()