IQRルール
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 25/64。
箱ひげ図では、離れた値を点で示します。コードでそれらを見つけるには、その規則を2つの境界線に置き換えます。箱の各端からIQRの1.5倍だけ外側に引きます。
コードでは、マスクを使います:
prices = np.array([35, 42, 38, 45, 40, 72, 37, 44, 39, 41, 36, 18])
q1 = np.percentile(prices, 25)
q3 = np.percentile(prices, 75)
iqr = q3 - q1
low = q1 - 1.5 * iqr
high = q3 + 1.5 * iqr
print(low, high)
print(prices[(prices < low) | (prices > high)])これは次のように出力されます:
28.125 51.125
[72 18]四分位数は極端な値を無視するため、外れ値が境界を広げて自分自身を隠すことはできません。学習の前にこれらの値にフラグを立てましょう。極端な値が1つあるだけで、モデルがその値に引き寄せられることがあります。
チャレンジ
中級ある教師がクイズの時間を計測し、プログラムは各生徒の所要時間(分)をminutesに読み込みます。ひな形のコードは、iqr_fencesが返す境界値を出力します。
iqr_fences(a)を完成させ、aの下側と上側のIQR境界値を返すようにしてください。- 下に、
Unusual:と、境界値の範囲外にある時間を元の順序で出力してください。
9人の生徒がそれぞれ8、11、9、10、27、12、9、10、11分かかった場合:
Fences: 6.0 to 14.0 minutes
Unusual: [27]自分で試してみよう
import numpy as np
# 配列のIQRの下限と上限の境界値を返す
def iqr_fences(a):
# ここにコードを書いてください
return 0.0, 0.0
n = int(input())
values = []
for i in range(n):
values.append(int(input()))
minutes = np.array(values)
# 以下の行は変更しないでください
low, high = iqr_fences(minutes)
print(f"Fences: {np.round(low, 2)} to {np.round(high, 2)} minutes")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ