示例#1
0
    def test_arr_validacao(self):
        #testa a criação do fold
        fold = Fold(Dados.df_treino,
                    Dados.df_teste,
                    "realClass",
                    num_folds_validacao=3,
                    num_repeticoes_validacao=2)

        #verifica se foi criado 6 folds de validação
        self.assertEqual(
            len(fold.arr_folds_validacao), 6,
            "Foi solicitado 2 execuções de 3 folds, ou seja, no final 6 folds")

        #os folds de validação nao possuem validação
        for fold_validacao in fold.arr_folds_validacao:
            self.assertEqual(len(fold_validacao.arr_folds_validacao), 0,
                             "O fold de validação não possuirá validação")

        #verifica cada execução
        arr_folds_execucao_1 = fold.arr_folds_validacao[:3]
        TestFold.folds_test(self, Dados.df_treino, arr_folds_execucao_1, 3,
                            True, 1)

        arr_folds_execucao_2 = fold.arr_folds_validacao[3:]
        TestFold.folds_test(self, Dados.df_treino, arr_folds_execucao_2, 3,
                            True, 1)
示例#2
0
    def test_gerar_k_folds(self):
        k = 7
        num_repeticoes = 3

        #print("DADOS: "+str(len(TestFold.df_dados)))
        tam_fold = len(Dados.df_dados)//k
        folds = Fold.gerar_k_folds(Dados.df_dados,col_classe="realClass",val_k=k,num_repeticoes=num_repeticoes,seed=1)

        #verifica se foram 4 folds e 3 repetições
        self.assertEqual(k*num_repeticoes,len(folds),"O número de folds criado não é quantidade solicitada")

        #verifica se os dados estao embaralhados
        arr_lista_fold0 = list(folds[0].df_data_to_predict.index.values)
        self.assertTrue(arr_lista_fold0!=[0,1,2], "A lista não foi embaralhada!")
        self.assertListEqual(arr_lista_fold0,[14, 13, 17], "A lista não foi embaralhada corretamente! Não esqueça de usar a seed=seed+num_repeticoes")
        #verifica se os dados foram divididos corretamente

        #testa cada repetição separadamente
        for repeticao_i in range(num_repeticoes):
            folds_por_repeticao = folds[repeticao_i*k:repeticao_i*k+k]
            TestFold.folds_test(self,Dados.df_dados,folds_por_repeticao,k,True,repeticao_i)

            for i,f in enumerate(folds_por_repeticao):
                ids_teste = set(f.df_data_to_predict.index.values.tolist())
                ids_treino = set(f.df_treino.index.values.tolist())

                #verifica se o temanho do teste esta correto do dataset
                if(i<k-1):
                    self.assertEqual(tam_fold,len(ids_teste),"O tamanho do partição deveria ser floor(numero_de_itens/val_k) - exceto o ultimo que deve possuir mais.")
                else:
                    self.assertTrue(len(ids_teste)>=tam_fold, "No ultimo fold, o tamanho da particao deve ser maior ou igual a floor(numero_de_itens/val_k)")
示例#3
0
    def get_experimento(self,ml_method=DecisionTreeClassifier(min_samples_split=1,random_state=1),ClasseObjetivoOtimizacao=OtimizacaoObjetivoArvoreDecisao):


        folds = Fold.gerar_k_folds(Dados.df_dados,val_k=5,col_classe="realClass",
                                    num_repeticoes=1,seed=1,
                                    num_folds_validacao=3,num_repeticoes_validacao=2)

        exp = Experimento(folds,ml_method, ClasseObjetivoOtimizacao, num_trials=10,
                            sampler=optuna.samplers.TPESampler(seed=1, n_startup_trials=3))
        return exp
示例#4
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"
        )