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")
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
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)
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)
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)