コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)