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:
| temperature | mood | motivation | windy |
| low | happy | high | yes |
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.
Desafio
MédioNeste 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):
passTodas as lições de Introdução ao aprendizado de máquina
Pratique por conta própria: Compilador de Python online