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)。
来看一个具有以下属性的新数据点:
| temperature | mood | motivation | windy |
| low | happy | high | yes |
要计算 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。
挑战
中等在这个挑战中,完成 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 在线编译器