標本が大きいほどノイズは小さく
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 22/64。
サンプルが大きいほど推定値は良くなりますが、どのくらい良くなるのでしょうか?買い物かご25個の平均値が1000個、そして買い物かご100個の平均値が1000個あります。
sample_means はそれぞれのばらつきを測定します。標準誤差 std / np.sqrt(n) を使えば、シミュレーションなしでばらつきを予測できます。
for n in [25, 100]:
spread = sample_means(baskets, n, 1000).std()
print(n, np.round(spread, 2), np.round(baskets.std() / np.sqrt(n), 2))これは次のように出力されます。
25 3.43 3.45
100 1.72 1.72データが4倍ならノイズは半分。それが平方根の働きです。400個の例でテストしたモデルのスコアは、100個の場合と比べて精度が2倍です。
チャレンジ
中級bagsには、製粉所の小麦粉の袋5000個の重量がグラム単位で格納されています。品質管理では毎時サンプルを計量し、プログラムは許容する標準誤差を読み取ります。
- 標準誤差がその値以下となる最小の
nを見つけます。bags.std() / np.sqrt(n)を使い、1から始め、大きすぎる間は1ずつ増やします。 - 確認します。
sample_meansから得られる300個の標本平均の標準偏差を求めます。 - 以下のように小数第2位まで表示します。
別の製粉所で2.5の場合:
Bags to weigh: 24
Standard error: 2.46 g
Simulated spread: 2.37 g自分で試してみよう
import numpy as np
target = float(input())
# 以下の行は変更しないでください:小麦粉の各袋の重さ(グラム)
rng = np.random.default_rng(22)
bags = np.round(rng.normal(500, 8, size=5000), 1)
# Sample Means Vary で作成した関数:count 個の標本それぞれの平均値
def sample_means(data, size, count):
means = []
for i in range(count):
sample = rng.choice(data, size=size, replace=False)
means.append(sample.mean())
return np.array(means)
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ