Menu
CoddyTech

分散と標準偏差

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

.std()は平均からの典型的な距離です。ここでは、5杯のエスプレッソについて手作業で計算します:

26秒のオレンジ色の平均線の周りに点で示された5杯のエスプレッソ。灰色の棒が各点と線を結び、偏差がラベル表示されています:-2、+1、-1、+4、-2

平均値との差はそれぞれ偏差です。合計すると0になるため、二乗してから平均を求めます。これが分散です。

shots = np.array([24, 27, 25, 30, 24])
deviations = shots - shots.mean()
variance = (deviations ** 2).mean()
print(deviations)
print(variance, np.round(np.sqrt(variance), 2))

これは次のように出力します。

[-2.  1. -1.  4. -2.]
5.2 2.28

その平方根である標準偏差は、秒の二乗を秒に戻します:2.28。np.var(a)とnp.std(a)を使えば、それぞれ1回の呼び出しで計算できます。

標準偏差が0の特徴量は決して変化しないため、モデルに何も情報を与えません。

challenge icon

チャレンジ

簡単

品質管理では、機械がジュースのボトルにどれだけ均等に充填するかを確認します。スターターコードは6つの容量(ml)を読み取り、spread_by_hand(a)が返す値をnp.stdと並べて出力します。この関数を完成させ、次の値を返すようにしてください。

  1. 分散:aの平均からの偏差を二乗した値の平均、
  2. 標準偏差:その平方根。

容量が1004、996、1011、993、1002、998の場合:

Variance: 34.56 ml squared
Std: 5.88 ml
Same as np.std: True

自分で試してみよう

import numpy as np

values = []
for i in range(6):
    values.append(int(input()))
volumes = np.array(values)


# 配列 a の分散と標準偏差を返す
def spread_by_hand(a):
    # ここにコードを書き、0, 0 の代わりに2つの値を返す
    return 0, 0


# 以下の行は変更しないでください
variance, std = spread_by_hand(volumes)
print(f"Variance: {np.round(variance, 2)} ml squared")
print(f"Std: {np.round(std, 2)} ml")
print("Same as np.std:", np.round(std, 2) == np.round(np.std(volumes), 2))
quiz icon腕試し

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

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

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