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