Menu
CoddyTech

条件概率

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 17 课,共 64 课。

这 10 封邮件中有一半是垃圾邮件。但一旦你知道一封邮件中含有链接,就只需关注含有链接的邮件:

10 封邮件分成两组,每封邮件代表一个单元格。一个框标出了含有链接的 4 封邮件,其中 3 封是垃圾邮件;不含链接的 6 封邮件中有 2 封是垃圾邮件

该分组中的比例就是给定邮件含有链接时属于垃圾邮件的条件概率,P(spam | link)。分别统计两者的数量,然后除以满足条件的数量:

emails = pd.DataFrame({
    "link": ["yes", "no", "yes", "no", "no", "no", "yes", "no", "no", "yes"],
    "spam": ["yes", "no", "yes", "no", "no", "yes", "no", "no", "yes", "yes"],
})
spam = emails["spam"] == "yes"
link = emails["link"] == "yes"
print(spam.mean())
print((spam & link).sum() / link.sum())

这会打印:

0.5
0.75

你已经知道的条件写在分数线下面:用它来做除数。垃圾邮件过滤器就是这样工作的:根据邮件中的词语计算它是垃圾邮件的概率。

challenge icon

挑战

中等

某个市场记录了 50 天的数据,保存在 mornings.csv 中:早晨的 sky(clear、cloudy 或 foggy)以及 rain,如果之后下雨则为 yes。哪种天空状况最能预示下雨?

  1. 对于 skies 中的每种天空状况,打印在该状况下下雨的概率。
  2. 打印任意一天的下雨概率。
  3. 打印最佳线索:下雨概率最高的天空状况。

对于较短的记录,将结果保留 2 位小数:

Rain after a clear morning: 0.25
Rain after a cloudy morning: 0.33
Rain after a foggy morning: 0.75
Rain on any day: 0.45
Best clue for rain: foggy

亲手试试

import pandas as pd

days = pd.read_csv("mornings.csv")
skies = ["clear", "cloudy", "foggy"]

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器