Exemplo n.º 1
0
    def test_eval(self):
        clf_dtree = DecisionTreeClassifier(random_state=1)
        metodo = ScikitLearnAprendizadoDeMaquina(clf_dtree)
        resultado = metodo.eval(Dados.df_treino,Dados.df_teste,"realClass")

        self.assertListEqual(list(Dados.df_teste["realClass"]),list(resultado.y),"A lista de classe alvo da partição de teste não é a esperada")
        acuracia = resultado.acuracia
        macro_f1 = resultado.macro_f1
        print(f"Macro f1: {macro_f1} Acuracia: {acuracia}")

        self.assertAlmostEqual(macro_f1, 0.5982142857142857,msg="Macro F1 não está com o valor esperado")
        self.assertAlmostEqual(acuracia, 0.6,msg="Acuracia não está com o valor esperado")
Exemplo n.º 2
0
    def calcula_resultados(self) -> List[Resultado]:
        """
        Atividade 5: Complete o código abaixo substituindo os "None", quando necessário
        Retorna, para cada fold, o seu respectivo resultado
        """
        self._resultados = []
        self.arr_validacao_por_fold = []  #experimentos de validacao por fold
        #seed para mater a reprodutibilidade dos experimentos
        np.random.seed(1)
        ## Para cada fold
        for i, fold in enumerate(self.folds):

            ##1. Caso haja um metodo de otimizacao, obtenha o melhor metodo com ele
            #substitua os none quando necessario
            if (self.ClasseObjetivoOtimizacao is not None):
                study = optuna.create_study(sampler=self.sampler,
                                            direction="maximize")
                objetivo_otimizacao = self.ClasseObjetivoOtimizacao(fold)
                study.optimize(objetivo_otimizacao, n_trials=self.num_trials)

                #1.(a) obtem o melhor metodo da otimizacao
                best_method = objetivo_otimizacao.arr_evaluated_methods[
                    study.best_trial.number].ml_method
                print("Melhor metodo")
                print(best_method)
                self.studies_per_fold.append(study)
            else:
                #caso contrario, o metodo, atributo da classe Experimento (sem modificações) é usado
                best_method = self.ml_method

            ##2. adiciona em resultados o resultado predito usando o melhor metodo
            resultado = ScikitLearnAprendizadoDeMaquina(best_method).eval(
                fold.df_treino, fold.df_data_to_predict, fold.col_classe)
            self._resultados.append(resultado)
        return self._resultados
Exemplo n.º 3
0
    def obtem_metodo(self, trial: optuna.Trial) -> MetodoAprendizadoDeMaquina:

        min_samples = trial.suggest_uniform('min_samples_split', 0, 0.5)
        clf_dtree = DecisionTreeClassifier(min_samples_split=min_samples,
                                           random_state=2)

        return ScikitLearnAprendizadoDeMaquina(clf_dtree)
Exemplo n.º 4
0
    def obtem_metodo(self,trial: optuna.Trial)->MetodoAprendizadoDeMaquina:
        #Atividade 4: complete este método
        #Para passar nos testes, os parametros devem ter o seguintes nomes: "min_samples_split",
        #. "max_features" e "num_arvores". Não mude a ordem de atribuição
        #. abaixo
        min_samples = trial.suggest_uniform('min_samples_split', 0, 0.5)
        max_features = trial.suggest_uniform('max_features', 0, 0.5)
        num_arvores = trial.suggest_int('num_arvores', 1, self.num_arvores_max)
        #coloque, ao instanciar o RandomForestClassifier como random_state=2
        clf_rf = RandomForestClassifier(random_state=2,n_estimators=num_arvores,min_samples_split=min_samples,max_features=max_features)

        return ScikitLearnAprendizadoDeMaquina(clf_rf)
Exemplo n.º 5
0
    def obtem_metodo(self, trial: optuna.Trial) -> MetodoAprendizadoDeMaquina:
        #Atividade 4: complete este método
        #Para passar nos testes, os parametros devem ter o seguintes nomes: "min_samples_split",
        #. "max_features" e "num_arvores". Não mude a ordem de atribuição
        #. abaixo
        min_samples = None
        max_features = None
        num_arvores = None
        #coloque, ao instanciar o RandomForestClassifier como random_state=2
        clf_rf = None

        return ScikitLearnAprendizadoDeMaquina(clf_rf)