Menu
CoddyTech

IQR 规则

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 25 课,共 64 课。

箱线图会用点标出较远的值。要在代码中找出这些值,可以把它的规则转化为两条围栏,分别位于箱体两端之外 1.5 个 IQR 的位置:

一条线上用点表示的 12 个音乐会门票价格。10 个价格位于 37 到 43 欧元附近的窄箱体内。虚线围栏分别位于箱体两端之外 1.5 个 IQR 的位置,即 28.1 和 51.1;18 和 72 这两个价格超出了围栏,并以红色标记为离群值

在代码中,使用掩码:

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]

四分位数会忽略极端值,因此离群值无法拉伸边界来隐藏自己。训练前要标记这些值:一个异常值就可能把模型拉向它。

challenge icon

挑战

中等

老师为一次测验计时,程序会将每位学生所用的分钟数读入 minutes。起始代码会打印 iqr_fences 返回的围栏值。

  1. 完善 iqr_fences(a),使它返回 a 的下 IQR 围栏和上 IQR 围栏。
  2. 在下面打印 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")

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器