Menu
CoddyTech

método fit

Lição 13 de 19 do curso Introdução ao aprendizado de máquina da Coddy.

Aqui está a fórmula de Naive Bayes:
<strong>P(Class|Feature) = P(Feature|Class) * P(Class) / P(Feature)</strong>

Nós já calculamos <strong>P(Feature|Class)</strong> e <strong>P(Class)</strong> na lição anterior.

Agora, com base em princípios matemáticos, podemos simplificar nossos cálculos omitindo P(Feature). Por exemplo, se 5 > 3 e dividirmos ambos os lados por 10 (para obter 5/10 > 3/10), a desigualdade permanece verdadeira.

Portanto, nossa fórmula simplificada torna-se: P(Class|Feature) = P(Feature|Class) * P(Class).

Considere um novo ponto de dados com os seguintes atributos:
 

temperaturemoodmotivationwindy
lowhappyhighyes

Para calcular para todas as instâncias onde play = yes, use a fórmula:

P(temperature=<strong>low</strong>|play=Yes) * P(mood= <strong>happy</strong>|play=Yes) * P(motivation= <strong>high</strong>|play=Yes) * P(windy=<strong>yes</strong>|play=Yes) * p(play=yes)

Todos esses dados já estão salvos em nossas variáveis probability_features e probability_target:

p_yes = probability_features["temperature"]["low"]["yes"] *
	probability_features["mood"]["happy"]["yes"] *
	probability_features["motivation"]["high"]["yes"] *
	probability_features["windy"]["yes"]["yes"] *
	probability_target["yes"]

Agora precisamos fazer a mesma coisa para play = no.

Após obter ambas as probabilidades, nós as comparamos para determinar a maior.

Se p_yes for maior que p_no, classificamos este novo ponto de dados como yes; caso contrário, o classificamos como no.

challenge icon

Desafio

Médio

Neste desafio, complete o método fit para que ele armazene as probabilidades em self.probability_features e self.probability_target, exatamente como fizemos na lição anterior.

y_train é a nossa variável alvo, e X_train é o nosso conjunto de dados de características (features).

Além disso, complete o método get_classes_probability. Este método deve receber um novo ponto de dados (semelhante ao exemplo fornecido anteriormente) e retornar as probabilidades para cada classe da variável alvo (o p_yes e p_no).
A saída deve estar no seguinte formato (dependendo dos valores na variável alvo y_train)

classes_probabilities = {
    "yes": 0.00,
    "no": 0.00, 
}

Tenha em mente que os nomes das características e os nomes dos atributos não são constantes. Cada conjunto de dados possui características diferentes e nomes diferentes.

Experimente você mesmo

class NaiveBayes:
    class __init__(self):
        pass
    
    def get_classes_probability(self, X):
        # X contém um dataframe com uma única linha
        # use self.classes que foi salvo no método fit
        # escreva seu código abaixo
        classes_probabilities = {}
        
        
        # --------------------------
        return classes_probabilities
    
    def fit(self, X_train, y_train):
        self.probability_features = {}
        self.probability_target = {}
        target_variable = "target"
        df = X_train.copy()
        df[target_variable] = y_train
        # Copie seu código da lição anterior
        # Adicione self. em probability_features e probability_target
        
    
    def predict(self, X_test):
        pass

Todas as lições de Introdução ao aprendizado de máquina

Pratique por conta própria: Compilador de Python online