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')
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')
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 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
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()