Menu
CoddyTech

大数の法則

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

コインを10回投げて表が8回出ても、驚くことではありません。投げ続けると、表の割合はゆっくりと0.5に近づいていきます。

300回のコイン投げにおける表の割合を示す折れ線グラフ。最初の数回は0.3から1の間で変動し、その後、確率0.5を示す赤い破線に沿う

各点には、そこまでの割合が必要です。np.cumsum は累積合計を返します。それを、そこまでのコイントスの回数で割ります。

heads = np.array([True, False, True, True])
print(np.cumsum(heads))
print(np.round(np.cumsum(heads) / np.arange(1, 5), 2))

これは次のように出力されます:

[1 1 2 3]
[1.   0.5  0.67 0.75]

ax.axhline(y) は、グラフを横切る基準線を描画します。

ax.plot(np.arange(1, 301), share)
ax.axhline(0.5, color="red", linestyle="--")

これが大数の法則です。試行回数が増えるほど、確率に近づきます。20個のサンプルで高いスコアを出すモデルは運がよかっただけかもしれませんが、2000個ではそうとは考えにくいでしょう。

challenge icon

チャレンジ

中級

シリアルのブランドは、箱の20%におもちゃを隠しています。プログラムは開封される箱の数を読み取り、スターターコードがtoys(おもちゃが入っていればTrue)を設定し、グラフにラベルを付けます。

  1. おもちゃの割合の累積値を計算します。
  2. 10箱開封後とすべての箱を開封した後の値を、小数第3位まで出力します。
  3. 箱の番号を1からとしてその値をプロットし、0.2の位置に黒い点線(":")を追加して表示します。

ほかの80箱については:

After 10 boxes: 0.1
After 80 boxes: 0.212

そして、このグラフを描きます。次にCoddyがあなたのグラフについて説明します。

「Toys in Cereal Boxes」というタイトルのグラフ:80箱にわたる累積割合は、8箱の間は0で、その後上下し、最終的に0.2の黒い点線の近くに落ち着く

自分で試してみよう

import numpy as np
import matplotlib.pyplot as plt

boxes = int(input())

# 以下の行は変更しないでください
rng = np.random.default_rng(25)
toys = rng.random(boxes) < 0.2

fig, ax = plt.subplots()
ax.set_title("Toys in Cereal Boxes")
ax.set_xlabel("Boxes opened")
ax.set_ylabel("Share with a toy")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

機械学習のための統計のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ