예제 #1
0
    def create_output(self):
        """Funcion que crea el objeto con la estrusctura de datos leible y luego
			crea el objeto resultado que posee una estructura mas leible para ser introducido
			en el output.txt ademas de guardarlo en lista a los valores
		"""
        f = open("Output.txt", "w")
        dt = DataStructure(self.input)
        dt.open_fill()
        for i in dt.get_all():
            p = Resultado(i)
            if type(p.get_id()) == (int):
                self.output.append(p.get_all())
                f.write("{}\n\n".format(p.get_all()))

        f.close()
예제 #2
0
파일: metodo.py 프로젝트: gustavogimpel/TCC
    def eval(self,
             df_treino: pd.DataFrame,
             df_data_to_predict: pd.DataFrame,
             col_classe: str,
             seed: int = 1) -> Resultado:
        #Atividade 2: Implementação da classe eval - veja passo a passo

        #a partir de self.df_treino, separe os atributos  da classe
        #x_treino deverá ser um dataframe que possua apenas as colunas dos atributos (use o método drop com o parametro axis)
        #y_treino deverá possuir apenas os valores coluna da classe
        x_treino = df_treino.drop(col_classe, 1)
        y_treino = df_treino[col_classe]

        #execute o método fit  de ml_method e crie o modelo
        model = self.ml_method.fit(x_treino, y_treino)
        #faça a mesma separação que fizemos em x_treino e y_treino nos dados a serem previstos
        x_to_predict = df_data_to_predict.drop(col_classe, 1)
        y_to_predict = df_data_to_predict[col_classe]

        #Impressao do x e y para testes
        #print("X_treino: "+str(x_treino))
        #print("y_treino: "+str(y_treino))
        #print("X_to_predict: "+str(x_to_predict))
        #print("y_to_predict: "+str(y_to_predict))

        #retorne o resultado por meio do método predict
        y_predictions = self.ml_method.predict(x_to_predict)
        return Resultado(y_to_predict, y_predictions)
예제 #3
0
 def agrupa_resultados_por_sessao(self):
     resultado_list = {}
     self.total = self.response['hits']['total']
     for hits in self.response['hits']['hits']:
         payload = hits['_source']['payload']
         time = hits['_source']['time']
         # Caso exista adiciona novo elemento
         if (hits['_source']['sessao'] in resultado_list.keys()):
             resultado_list[hits['_source']['sessao']].payload.append(payload)
             resultado_list[hits['_source']['sessao']].time = time
         # Senao inclui novo elemento
         else:
             resultado = Resultado()
             resultado.payload.append(payload)
             resultado.time = time
             resultado_list[hits['_source']['sessao']] = resultado
     return resultado_list
예제 #4
0
    def test_macro_f1(self):
        resultado = Resultado(TestResultado.y,TestResultado.predict_y)
        prec = [1/2,1/5,4/6]
        rev = [1/2,1/3,4/8]
        f1_esp = [2*(prec[i]*rev[i])/(prec[i]+rev[i]) for i in range(len(prec))]

        macro_f1 = np.average(f1_esp)
        self.assertAlmostEqual(resultado.macro_f1,macro_f1,msg="Macro F1 não está com o valor esperado")
예제 #5
0
def execucaoAGCanonico(objetos, penalizar, pc, pm):
    melhoresIndividuos = []
    execucao = 1

    while execucao < MAX_EXECUCOES:
        individuos = []
        individuos = iniciaPopulacao([])
        individuos = calculaFitness(objetos, individuos)
        geracao = 1

        while geracao < MAX_GENERATIONS:
            #Caso não haja mais que um indivíduo com o fitness positivo para o cruzamento
            #então paro a execução e salvo o valor gerado
            numIndFitnessPositivo = 0
            for individuo in individuos:
                if individuo.fitness >= 0:
                    numIndFitnessPositivo += 1

            #Caso haja menos de 2 individuos com fitness positivo entao salvo o melhor fitness
            # e vou para a proxima execucao
            if numIndFitnessPositivo < 2:
                # melhorInd = Resultado(geracao, individuos[0], individuos[0].fitness, execucao)
                # melhoresIndividuos.append(melhorInd)
                break
            else:
                sorteioPrimeiro = selecionaRoleta(individuos)
                sorteioSegundo = selecionaRoleta(individuos)
                #Caso os individuos sejam os mesmos vou sorteando ate serem diferentes
                while sorteioPrimeiro == sorteioSegundo:
                    sorteioSegundo = selecionaRoleta(individuos)

                # print("Primeiro sorteado foi: "+ str(sorteioPrimeiro))
                # print("Segundo sorteado foi: "+ str(sorteioSegundo))

                individuos = cruzamento(individuos, sorteioPrimeiro,
                                        sorteioSegundo, pc, pm)
                individuos = calculaFitness(objetos, individuos)

                # Faco a reparacao ou penalizacao
                individuos = checaPesoMochila(objetos, individuos, penalizar)

                individuos.sort(key=ordenaPorFitness, reverse=True)
                if len(individuos) > NP:
                    # Caso tenha sofrido mutacao
                    del individuos[11]
                    del individuos[10]

            melhorInd = Resultado(geracao, individuos[0],
                                  individuos[0].fitness, execucao)
            melhoresIndividuos.append(melhorInd)
            geracao += 1

        execucao += 1

    return melhoresIndividuos
예제 #6
0
    def executar(self):

        self.listaDadosIniciais = Configuracao.gerarDadosIniciais(
            self.configuracao)

        resultado = Resultado(self.configuracao.problema)

        for a in range(4):

            algoritmo = None

            if (a == 0):
                algoritmo = Algoritmo(Configuracao.algoritmos[a],
                                      HillClimbing(self.configuracao))
            elif (a == 1):
                algoritmo = Algoritmo(Configuracao.algoritmos[a],
                                      HillClimbingRestart(self.configuracao))
            elif (a == 2):
                algoritmo = Algoritmo(Configuracao.algoritmos[a],
                                      SimulatedAnnealing(self.configuracao))
            else:
                algoritmo = Algoritmo(Configuracao.algoritmos[a],
                                      GeneticAlgorithm(self.configuracao))

            for iteracao in range(10):
                algoritmo.executar(self.listaDadosIniciais[iteracao], iteracao)

            algoritmo.gerarEstatisticas()

            Graficos.gerarGraficoFuncaoObjetivo(algoritmo, self.configuracao)

            resultado.adicionar(algoritmo)

        inicioComparativo = time.perf_counter()

        self.finalizar(resultado)

        terminoComparativo = time.perf_counter()

        print(
            f"Geração da tabela/gráfico de comparativo de performance em {terminoComparativo - inicioComparativo:0.4f} segundos"
        )
예제 #7
0
    def test_otimizacao(self):
        fold = Fold(Dados.df_treino,
                    Dados.df_teste,
                    "realClass",
                    num_folds_validacao=3,
                    num_repeticoes_validacao=2)
        otimiza_fold = OtimizacaoObjetivoRandomForest(fold)
        tpe_sampler = TPESampler(n_startup_trials=10, seed=1)
        study_TP = optuna.create_study(sampler=tpe_sampler,
                                       direction="maximize")
        study_TP.optimize(otimiza_fold, n_trials=30)

        for trial in study_TP.trials:
            print(trial.params)
        arr_params_to_test = [
            "min_samples_split", "max_features", "num_arvores"
        ]
        for param_name in arr_params_to_test:
            self.assertTrue(
                param_name in study_TP.best_trial.params,
                f"Não foi encontrado o parametro '{param_name}' certifique-se se você nomeou o parametro devidamente"
            )

        self.assertAlmostEqual(study_TP.best_trial.params["min_samples_split"],
                               0.19829036364801306,
                               places=5,
                               msg="Otimização não deu resultado esperado")
        self.assertAlmostEqual(study_TP.best_trial.params["max_features"],
                               0.1939553705810037,
                               places=5,
                               msg="Otimização não deu resultado esperado")
        self.assertAlmostEqual(study_TP.best_trial.params["num_arvores"],
                               5,
                               msg="Otimização não deu resultado esperado")
        print(f"Melhor execução: {study_TP.best_trial.params}")

        result = Resultado(np.array([1, 1, 1, 1, 0, 0, 0, 0]),
                           np.array([1, 1, 0, 0, 1, 1, 1, 0]))
        result_metrica = otimiza_fold.resultado_metrica_otimizacao(result)
        print(f"Resultado: {result_metrica}")
        self.assertAlmostEqual(
            result_metrica,
            0.3650793650793651,
            places=5,
            msg="Resultado da metrica de otimização não deu resultado esperado"
        )
예제 #8
0
 def test_acuracia(self):
     resultado = Resultado(TestResultado.y, TestResultado.predict_y)
     self.assertAlmostEqual(resultado.acuracia,
                            6 / 13,
                            msg="Acuracia não está com o valor esperado")
예제 #9
0
    def gerar(self):
        # ['1|2|1|1']
        # v1 | a | v2 | peso

        resList = []

        if self.checkDirecionado.isChecked():
            self.grafo.setDirecionado(True)
        else:
            self.grafo.setDirecionado(False)

        if self.checkExisteLaco.isChecked():
            if self.grafo.existeLaco():

                resList.append("- Existem os seguintes laços:\n" + "\n".join(self.grafo.getLaco()))
            else:
                resList.append("- Nao existem lacos no grafo.")

        if self.checkExisteParalela.isChecked():
            if self.grafo.existeArestaParalela():
                resList.append("- Existem arestas paralelas")
            else:
                resList.append("- Nao existem arestas paralelas")

        if self.checkExisteIsolado.isChecked():
            if self.grafo.existeVerticeIsolado():
                resList.append("- Existem vertices isolados")
            else:
                resList.append("- Nao existem vertices isolados")

        if self.checkOrdem.isChecked():
            resList.append("- Ordem do grafo: " + str(self.grafo.getOrdem()))

        if self.checkExisteCiclo.isChecked():
            ciclos = self.grafo.getCiclos()

            if ciclos:
                resList.append("- Existe(m) ciclo(s) para o(s) vértice(s): " + ", ".join(ciclos))
            else:
                resList.append("- Nao existem ciclos no grafo")

        if self.checkConexo.isChecked():
            if self.grafo.isConexo():
                resList.append("- Grafo é conexo")
            else:
                resList.append("- Grafo não é conexo")

        if self.checkCaminhoCurto.isChecked():
            v1 = self.comboCaminhoInicio.currentText()
            v2 = self.comboCaminhoFim.currentText()
            if self.grafo.existeCaminho(v1, v2, []):
                resList.append("- Existe caminho entre o vértice '" + v1 + "' e '" + v2 +"'")
            else:
                resList.append("- Nao existe caminho entre o vértice '" + v1 + "' e '" + v2 +"'")

        if self.checkGrau.isChecked():
            graus = self.grafo.getTodosGraus()
            if self.grafo.isDirecionado:
                resList.append("- Grau de cada vértice (emissão, recepção):")
            else:
                resList.append("- Grau de cada vértice:")

            for v in graus.keys():
                if self.grafo.isDirecionado:
                    resList.append("  '" + v + "': " + str(graus[v][0]) + ", " + str(graus[v][1]))
                else:
                    resList.append("  '" + v + "': " + str(graus[v]))
            resList.append("")

        if self.checkAdjacencia.isChecked():
            adjacencias = self.grafo.getTodasAdjacencias()
            resList.append("- Adjacências de cada vértice:")
            for v in adjacencias.keys():
                strAdj = "" + v + ": "
                verticesAdj = []
                for arestaAdj, vertAdj in adjacencias[v]:
                    verticesAdj.append(vertAdj)
                if verticesAdj:
                    resList.append(strAdj + ", ".join(verticesAdj))
                else:
                    resList.append(strAdj + "Nenhum")

        resultado = Resultado("\n".join(resList), self)
        resultado.centerToMainWindow()
        self.resultados.append(resultado)