Menu
CoddyTech

fit 方法

Coddy 机器学习入门 课程的第 13 课,共 19 课。

以下是朴素贝叶斯公式:
<strong>P(Class|Feature) = P(Feature|Class) * P(Class) / P(Feature)</strong>

在上一课中,我们已经计算了 <strong>P(Feature|Class)</strong> 和 <strong>P(Class)</strong>。

现在,根据数学原理,我们可以省略 P(Feature),简化计算。例如,如果 5 > 3,并且我们将两边都除以 10(得到 5/10 > 3/10),不等式仍然成立。

因此,简化后的公式为:P(Class|Feature) = P(Feature|Class) * P(Class)。

来看一个具有以下属性的新数据点:
 

temperaturemoodmotivationwindy
lowhappyhighyes

要计算 play = yes 的所有实例的概率,请使用以下公式:

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)

所有这些数据都已保存在 probability_features 和 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"]

现在,我们需要对 play = no 做同样的计算。

得到两个概率后,我们比较它们,找出较大的一个。

如果 p_yes 大于 p_no,我们就将这个新数据点分类为 yes;否则,将它分类为 no。

challenge icon

挑战

中等

在这个挑战中,完成 fit 方法,使其像我们在上一课中所做的那样,将概率存储在 self.probability_features 和 self.probability_target 中。

y_train 是我们的目标变量,X_train 是我们的特征数据集。

另外,完成 get_classes_probability 方法。这个方法应接收一个新的数据点(类似于前面提供的示例),并返回目标变量每个类别的概率(即 p_yes 和 p_no)。
输出应采用以下格式(具体取决于目标变量 y_train 中的值):

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

请记住,特征名称和属性名称并不固定。每个数据集的特征和名称都不同。

亲手试试

class NaiveBayes:
    class __init__(self):
        pass
    
    def get_classes_probability(self, X):
        # X 是一个只有一行的 DataFrame
        # 使用在 fit 方法中保存的 self.classes
        # 在下面编写你的代码
        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
        # 复制你在上一课编写的代码
        # 在 probability_features 和 probability_target 前加上 self.
        
    
    def predict(self, X_test):
        pass

机器学习入门中的所有课

自己练习: Python 在线编译器