Menu
CoddyTech

条件付き確率

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 17/64。

この10通のメールの半分はスパムです。しかし、メールにリンクがあるとわかったら、リンクがあるメールだけが重要です。

10通のメールが2つのグループのセルとして表示されている。枠はリンクのある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

チャレンジ

中級

ある市場では、mornings.csvに50日分の記録があります。朝の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オンラインコンパイラ