def eval(self, df_treino:pd.DataFrame, df_data_to_predict:pd.DataFrame, col_classe:str, seed:int=1): #faz a predição baseada em uma representação #...essas representações abaixo são apenas sugestões. Podem haver outras melhores. #...explore, analise e entenda os dados e sinta-se livre para brincar com elas :) #faz a predição baseada nos atores y_to_predict, arr_predictions_ator = self.eval_actors(df_treino, df_data_to_predict, col_classe) #faz a predição baseada nos resumos y_to_predict, arr_predictions_bow = self.eval_bow(df_treino, df_data_to_predict, col_classe) #faz a predição baseada nos titulos y_to_predict, arr_predictions_titulo = self.eval_titulo(df_treino, df_data_to_predict, col_classe) #combina as tres representações por maioria arr_final_predictions = self.combine_predictions(arr_predictions_ator, arr_predictions_bow, arr_predictions_titulo) return Resultado(y_to_predict, arr_final_predictions)
def eval(self, df_treino: pd.DataFrame = None, df_data_to_predict: pd.DataFrame = None, col_classe: str = None, seed: int = 1) -> Resultado: if df_treino is not None and df_data_to_predict is not None and col_classe is not None: self.preprocessor = DataframePreprocessing(df_treino, df_data_to_predict, col_classe) # Dataframes x_treino, x_to_predict = self.preprocessor.df_stats() y_treino, y_to_predict = self.y predicted = [self.preprocessor.int_classe('Comedy') ] * len(x_to_predict) return Resultado(y_to_predict, predicted)
def eval(self, df_treino: pd.DataFrame = None, df_data_to_predict: pd.DataFrame = None, col_classe: str = None, seed: int = 1) -> Resultado: if df_treino is not None and df_data_to_predict is not None and col_classe is not None: self.preprocessor = DataframePreprocessing(df_treino, df_data_to_predict, col_classe) # Dataframes x_treino, x_to_predict = self.preprocessor.df_resumo() y_treino, y_to_predict = self.y self.ml_method.fit(x_treino, y_treino) predicted = self.ml_method.predict(x_to_predict) return Resultado(y_to_predict, predicted)
def eval(self, df_treino: pd.DataFrame, df_data_to_predict: pd.DataFrame, col_classe: str, seed: int = 1): #separação da classe x_treino, x_to_predict = self.obtem_x(df_treino, df_data_to_predict, col_classe) y_treino, y_to_predict = self.obtem_y(df_treino, df_data_to_predict, col_classe) # print(f"x_treino: {y_treino} y_to_predict:{y_to_predict}") #geração dos atributos x_treino_bow, x_to_predict_bow = gerar_atributos_texto( x_treino, x_to_predict) #geração do modelo e prediçaõ do primeiro nivel self.ml_method.fit(x_treino_bow, y_treino) arr_predict_prim_nivel = self.ml_method.predict(x_to_predict_bow) return Resultado(y_to_predict, arr_predict_prim_nivel)
def eval(self, seed: int = 1) -> Resultado: # Dataframes x_treino_svm, x_to_predict_svm = self.preprocessor.df_resumo() x_treino_rf, x_to_predict_rf = self.preprocessor.df_stats() y_treino, y_to_predict = self.y self.svm_method.fit(x_treino_svm, y_treino) predicted_svm = self.svm_method.predict(x_to_predict_svm) self.rf_method.fit(x_treino_rf, y_treino) predicted_rf = self.rf_method.predict(x_to_predict_rf) rf_index = self.rf_indexes() final_predictions = [ sp if i not in rf_index else predicted_rf[i] for i, sp in enumerate(predicted_svm) ] return Resultado(y_to_predict, final_predictions)
def eval(self, df_treino: pd.DataFrame, df_data_to_predict: pd.DataFrame, col_classe: str, seed: int = 1): self.obj_class_final.class_to_number(df_treino[col_classe]) # print(f"Mapeamento geral: {self.obj_class_final.dic_int_to_nom_classe}") df_treino_bow = [] df_to_predict_bow = [] #################### Primeiro Nivel ################################# #separação da classe x_treino, x_to_predict = self.obtem_x(df_treino, df_data_to_predict, col_classe) y_treino, y_to_predict = self.obtem_y(df_treino, df_data_to_predict, col_classe, True) # print(f"x_treino: {y_treino} y_to_predict:{y_to_predict}") #geração dos atributos x_treino_bow, x_to_predict_bow = gerar_atributos_letra_musica( x_treino, x_to_predict, self.max_df) #geração do modelo e predicçaõ do primeiro nivel self.ml_method.fit(x_treino_bow, y_treino) arr_predict_prim_nivel = self.ml_method.predict(x_to_predict_bow) self.result_prim_nivel = Resultado(y_to_predict, arr_predict_prim_nivel) # print(f"Predict Primeiro nivel: {arr_predict_prim_nivel}") ################### Segundo nivel ########################## arr_predict_final = [None for i in range(len(arr_predict_prim_nivel))] #no dataset fonecido pelo professor, a col_classe não existe y_to_predict_final = None if col_classe in df_data_to_predict.columns: y_to_predict_final = self.obj_class_final.class_to_number( df_data_to_predict[col_classe]) #para cada classe do treino for agrupamento in df_treino[self.col_classe_prim_nivel].unique(): # print(f"Agrupamento: {agrupamento}") #usa o segundo nivel apenas nos agrupamentos que efetivamente possuem mais de uma classe no segundo nivel df_treino_grupo = df_treino[df_treino[self.col_classe_prim_nivel] == agrupamento] arr_pos_predict = self.filtrar_por_agrupamento_prim_nivel( agrupamento, arr_predict_prim_nivel) if len(arr_pos_predict) == 0: continue #col_classe => col_classe do seg nivel if len(df_treino_grupo[col_classe].unique()) > 1: df_data_to_predict_grupo = df_data_to_predict.iloc[ arr_pos_predict] self.obj_class_seg_nivel[agrupamento] = ClasseNumerica() x_treino_grupo, x_to_predict_grupo = self.obtem_x( df_treino_grupo, df_data_to_predict_grupo, col_classe) y_treino_grupo, y_to_predict_grupo = self.obtem_y( df_treino_grupo, df_data_to_predict_grupo, col_classe, False, agrupamento) x_treino_grupo_bow, x_to_predict_grupo_bow = gerar_atributos_letra_musica( x_treino_grupo, x_to_predict_grupo, self.max_df) # print(self.obj_class_seg_nivel[agrupamento].dic_int_to_nom_classe) # print(f"y treino: {y_treino_grupo} to predict: {y_to_predict_grupo}") self.ml_method.fit(x_treino_grupo_bow, y_treino_grupo) arr_predict_grupo = self.ml_method.predict( x_to_predict_grupo_bow) # print(f"Predições: {arr_predict_grupo}") for pos_grupo, val_predict_grupo in enumerate( arr_predict_grupo): pos_original = arr_pos_predict[pos_grupo] # print(f"Posicao {pos_grupo} correspond a posicao {pos_original}") final_classe_nome = self.obj_class_seg_nivel[ agrupamento].dic_int_to_nom_classe[val_predict_grupo] arr_predict_final[ pos_original] = self.obj_class_final.dic_nom_classe_to_int[ final_classe_nome] else: for pos, pos_original in enumerate(arr_pos_predict): # print(pos_original) val_predict = arr_predict_prim_nivel[pos_original] final_classe_nome = self.obj_class_prim_nivel.dic_int_to_nom_classe[ val_predict] arr_predict_final[ pos_original] = self.obj_class_final.dic_nom_classe_to_int[ final_classe_nome] # print(y_to_predict, arr_predict_final) # print("jasdiajsaiajdisajidjsa") # print(arr_predict_final) return Resultado(y_to_predict_final, arr_predict_final)