Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

Faça como eu fiz: construindo um sistema especialista

1. Base de Conhecimento:

class BaseDeConhecimento:
    def __init__(self):
        self.fatos = set()
        self.regras = []

    def adicionar_fato(self, fato):
        self.fatos.add(fato)

    def adicionar_regra(self, condicoes, conclusao):
        # condicoes: lista de fatos necessários
        # conclusao: diagnóstico ou novo fato
        self.regras.append((condicoes, conclusao))

    def obter_fatos(self):
        return self.fatos

    def obter_regras(self):
        return self.regras

2. Inferência:

class SistemaEspecialista:
    def __init__(self, base_conhecimento):
        self.base = base_conhecimento
        self.diagnosticos = []

    def inferir(self):
        mudou = True
        while mudou:
            mudou = False
            for condicoes, conclusao in self.base.obter_regras():
                if all(cond in self.base.obter_fatos() for cond in condicoes):
                    if conclusao not in self.base.obter_fatos():
                        self.base.adicionar_fato(conclusao)
                        self.diagnosticos.append(conclusao)
                        mudou = True

    def mostrar_diagnosticos(self):
        return self.diagnosticos

3. Implementação de diagnósticos:

# Criação da base de conhecimento:
base = BaseDeConhecimento()

# Adição dos sintomas relatados pelo paciente:
base.adicionar_fato("febre alta")
base.adicionar_fato("tosse")
base.adicionar_fato("dificuldade para respirar")

# Adição de regras:
base.adicionar_regra(["febre alta", "tosse"], "infecção respiratória")
base.adicionar_regra(["infecção respiratória", "dificuldade para respirar"], "pneumonia")

# Criação do sistema especialista:
sistema = SistemaEspecialista(base)

# Execução de inferência:
sistema.inferir()

# Possíveis diagnósticos:
print("Como diagnósticos possíveis foram encontrados:", sistema.mostrar_diagnosticos())

Como diagnósticos possíveis foram encontrados: ['infecção respiratória', 'pneumonia']

2 respostas
solução!

Olá, Andressa! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a base de conhecimento para estruturar fatos com Python, utilizou muito bem as regras de inferência para gerar novos diagnósticos e ainda compreendeu a importância do sistema especialista para apoiar decisões médicas.

Uma dica interessante para o futuro é expandir o sistema para lidar com incerteza, usando probabilidades em vez de apenas regras determinísticas. Assim:

# Exemplo de regra probabilística simples
base.adicionar_regra(["febre alta", "tosse"], ("infecção respiratória", 0.8))

# Durante a inferência, considerar o peso da probabilidade

Isso faz o sistema refletir melhor a realidade médica, onde sintomas não garantem 100% de certeza em diagnósticos.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Adicionar granularidade nos sintomas: diferenciar intensidade ou duração.
  • Integrar com dados reais: usar prontuários ou bases médicas para enriquecer regras.
  • Explorar bibliotecas avançadas: como pgmpy para redes bayesianas ou experta para sistemas especialistas mais robustos.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução do navegador.

Ah, uma pergunta: Você acredita que sistemas especialistas são mais eficazes em diagnósticos médicos simples com regras claras ou em cenários complexos quando combinados com redes probabilísticas?

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Muito obrigada pelo retorno, Daniel!