Skip to content

Conversation

@LuizMiguel4444
Copy link
Contributor

  • Adiciona novos algorítmos (FlexCon, FlexConC, FlexConG, SelfTraining).
  • Adiciona documentação à classes que ainda não tinham.
  • Adiciona arquivos de testes básicos (testFlex e testSelf).
  • Refatoração de códigos para ficar de acordo com regras configuradas no pylint.

@LuizMiguel4444 LuizMiguel4444 linked an issue Jan 9, 2025 that may be closed by this pull request
@ArthurGorgonio
Copy link
Member

@LuizMiguel4444, esse PR está realmente pronto? Se eu tentar rodar o projeto vai rodar? Em uma parte do código ele está usando uma lib chamada mlabican, deveria usá-la?

@LuizMiguel4444 LuizMiguel4444 linked an issue Jan 10, 2025 that may be closed by this pull request
Copy link
Member

@ArthurGorgonio ArthurGorgonio left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sugiro que revisem o código como um todo. Além disso, seria interessante vocês consultarem o material de apoio que vocês têm acerca do flexcon, flexcon-c e flexcon-g. Algumas das classes propostas não está de acordo com a proposta original dos métodos supracitados.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esses imports não parecem certos, poderia corrigir para import o que realmente faz sentido a pessoa que está consumindo a biblioteca ver.

Esse arquivo init.py vai servir como uma interface do que a gente quer exportar para as outras pessoas usarem. Não faz sentido a gente exportar tudo, então sugiro uma revisão desse arquivo.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arthur, pelo que entendi, o init.py deve ser feito basicamente quando já se tem o projeto quase pronto ou estável, quando o nosso esta um pouco distante disso, no momento acho melhor focar nas mais imediatas.

Comment on lines +34 to +40
@abstractmethod
def adjust_threshold(self, local_measure):
"""
Método abstrato para ajuste do threshold.
Cada classe derivada deve implementar sua lógica específica.
"""
pass
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Faz um raise numa exceção que faça sentido, pois do jeito que está agora não é possível saber que esse método é obrigatório.

Aproveite defina os tipos dos atributos e retorno esperado dessa função.

Comment on lines +15 to +16
Args:
SelfTrainingClassifier: Método SelfTraining
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Argumento é só um, mas no init tem 4, descreva todos, por favor. Incluindo o valor default de cada um, quando houver.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Algo nesse estilo estaria adequado??

class BaseFlexCon(SelfTrainingClassifier):
"""
Classe que serve como base para os diferentes métodos FlexCon.

Essa classe implementa um modelo SelfTraining utilizando um classificador base
e outros parâmetros para controlar o treinamento e a execução do modelo.

Args:
    base_classifier (classificador): O classificador base que será utilizado pelo método SelfTraining.
                                      Isso pode ser qualquer classificador do scikit-learn (ex: LogisticRegression, SVC, etc.).
    threshold (float, opcional): O limiar de confiança para considerar uma instância como rotulada. 
                                 O valor padrão é 0.95, ou seja, a instância será rotulada apenas se a 
                                 probabilidade prevista for maior ou igual a 95%.
    verbose (bool, opcional): Controla o nível de saída detalhada durante o treinamento. 
                              O valor padrão é False, ou seja, nenhuma saída detalhada será gerada.
    max_iter (int, opcional): O número máximo de iterações durante o treinamento. O valor padrão é 10.

Atributos:
    base_classifier (classificador): O classificador base utilizado para treinar o modelo.
    threshold (float): O limiar de confiança para considerar instâncias rotuladas.
    verbose (bool): Controle de saída detalhada.
    max_iter (int): Número máximo de iterações para o treinamento.
    pred_x_it (dict): Dicionário para armazenar previsões durante o treinamento.
    cl_memory (list): Lista para armazenar as instâncias rotuladas durante o treinamento.
    classifier_ (classificador): O classificador clonado do base_classifier para ser treinado.
    accuracy_history (list): Lista para armazenar a acurácia ao longo das iterações.
"""

def __init__(
    self,
    base_classifier,
    threshold=0.95,
    verbose=False,
    max_iter=10
):
    """
    Inicializa a instância do modelo BaseFlexCon.

    Args:
        base_classifier (classificador): O classificador base que será utilizado no método SelfTraining.
        threshold (float, opcional): O limiar de confiança para considerar uma instância como rotulada. 
                                     O valor padrão é 0.95.
        verbose (bool, opcional): Controle de saída detalhada. O valor padrão é False.
        max_iter (int, opcional): Número máximo de iterações durante o treinamento. O valor padrão é 10.
    """
    self.base_classifier = base_classifier
    self.threshold = threshold
    self.verbose = verbose
    self.max_iter = max_iter
    self.pred_x_it = {}
    self.cl_memory = []
    self.classifier_ = clone(base_classifier)
    self.accuracy_history = []

Comment on lines +21 to +32
threshold=0.95,
verbose=False,
max_iter=10
):
self.base_classifier = base_classifier
self.threshold = threshold
self.verbose = verbose
self.max_iter = max_iter
self.pred_x_it = {}
self.cl_memory = []
self.classifier_ = clone(base_classifier)
self.accuracy_history = []
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seria muito bom a gente indicar qual seria o tipo que a gente está tratando. Por exemplo:

Suggested change
threshold=0.95,
verbose=False,
max_iter=10
):
self.base_classifier = base_classifier
self.threshold = threshold
self.verbose = verbose
self.max_iter = max_iter
self.pred_x_it = {}
self.cl_memory = []
self.classifier_ = clone(base_classifier)
self.accuracy_history = []
threshold: float = 0.95,
verbose: bool = False,
max_iter: int = 10
):
self.base_classifier = base_classifier
self.threshold = threshold
self.verbose = verbose
self.max_iter = max_iter
self.pred_x_it: dict[int, int] = {}
self.cl_memory = []
self.classifier_ = clone(base_classifier)
self.accuracy_history: list[float] = []

continue a partir daí, coloque, de preferência o tipo correto para os argumentos que são listas, dicionários e etc. VALE PARA TODO O RESTO DO ARQUIVO!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Irei repassar por todo o arquivo.

from typing import Dict, List, Optional

import numpy as np
from selfTrainingInitial import SelfTrainingClassifier
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esse cara está na ordem errada.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conforme o ISort, é isso mesmo.

Comment on lines +208 to +209
if (first_confidence >= self.threshold or \
confidence >= self.threshold) and first_class == predicted_class:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Evitar o uso da ''.

escolha um dos modelos a seguir e refatore com ele em mente, veja a PEP-0008. Ou podem usar um estilo de vocês, mas essa backslash a PEP, e eu, desencorajamos fortemente.

Comment on lines +231 to +233
if first_class != predicted_class and \
first_confidence >= self.threshold and \
confidence >= self.threshold:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Evitar o uso da ''.

escolha um dos modelos a seguir e refatore com ele em mente, veja a PEP-0008. Ou podem usar um estilo de vocês, mas essa backslash a PEP, e eu, desencorajamos fortemente.

Comment on lines +254 to +256
if first_class != predicted_class and \
(first_confidence >= self.threshold \
or confidence >= self.threshold):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Evitar o uso da ''.

escolha um dos modelos a seguir e refatore com ele em mente, veja a PEP-0008. Ou podem usar um estilo de vocês, mas essa backslash a PEP, e eu, desencorajamos fortemente.

Função responsável por gerenciar todas as regras de inclusão do método

Returns:
_type_: _description_
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cade a documentação do retorno?

Comment on lines +296 to +298



Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

era para ser só uma linha aqui, pq tem 3?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Irei remover na correção.

@ArthurGorgonio ArthurGorgonio changed the title Equalização do projeto: adição de novos algorítmos, métodos e refatorações a main. Equalização do projeto: adição de novos algoritmos, métodos e refatorações a main. Jan 13, 2025
This was unlinked from issues Feb 17, 2025
@ArthurGorgonio
Copy link
Member

Conforme alinhado com o @RenanCDev em reunião virtual, eu vou fechar essa revisão e serão criadas as tarefas específicas de cada um dos algoritmos para que seja melhor dividido e distribuído o código.

Ele iniciou o trabalho da divisão desse PR pela tarefa #17 que está específica para o FlexCon-G.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants