Menu
CoddyTech

偶然の可能性は?

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

サンセリフ体で読んだ5人の読者は、セリフ体で読んだ5人の読者より6.6秒速く読みました。フォントが何の影響も与えなかったとすれば、どの時間もどちらのグループに入ってもおかしくありません。シャッフルして、それを再現してみましょう。

読書時間をセルで示したもの。青色のセリフ体が5つ、オレンジ色のサンセリフ体が5つ。rng.permutation(pooled) とラベル付けされた矢印が、同じ10個の値を混ぜた順序で示し、平均48.4の架空のセリフ体グループと平均49.8の架空のサンセリフ体グループに分けている。偶然によって生じた差は+1.4秒

rng.permutation(a) はシャッフルしたコピーを返します。これを1000回繰り返し、偽の差をすべて記録します。

serif = np.array([52, 47, 58, 50, 55])
sans = np.array([45, 49, 41, 50, 44])
pooled = np.concatenate([serif, sans])
rng = np.random.default_rng(4)
diffs = []
for i in range(1000):
    shuffled = rng.permutation(pooled)
    diffs.append(shuffled[5:].mean() - shuffled[:5].mean())

シャッフルした差1000個のヒストグラム。-7.8秒から7.8秒の範囲で、0付近に集中しており、左端近くの-6.6に実際の差を示す赤い線がある

偶然による差は0の周辺に積み重なり、本当の差は端の近くに位置します。これは置換検定です。

あるモデルが別のモデルより優れていると判断する前に、シャッフルによってそれほど大きな差が生じることがめったにないか確認しましょう。

challenge icon

チャレンジ

中級

犬は2つの方法でおすわりを覚えました。clickerとtreatsには、それぞれの犬のセッション数が入っています。スターターコードではrngとshufflesを作成します。

  1. 実際の差を計算します。treatsの平均からclickerの平均を引きます。
  2. clicker、次にtreatsをプールし、shuffles回シャッフルして、len(clicker)の位置で分割します。各模擬差は同じ引き算の順序で求めます。他の乱数抽出は行いません。
  3. 実際の差、最初の模擬差、最小値、最大値を小数第2位まで表示します。

ほかの犬の場合:

Real difference: 3.0
First shuffle: -1.0
Smallest shuffled: -3.33
Largest shuffled: 3.67

自分で試してみよう

import numpy as np

# 各犬が"sit"を覚えるのに必要だったトレーニング回数
clicker = np.array([9, 12, 8, 11, 10, 7, 13])
treats = np.array([14, 11, 15, 12, 16, 13])
# 以下の行は変更しないでください
rng = np.random.default_rng(12)
shuffles = 1000

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

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

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

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