IQR 规则
本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 25 课,共 64 课。
箱线图会用点标出较远的值。要在代码中找出这些值,可以把它的规则转化为两条围栏,分别位于箱体两端之外 1.5 个 IQR 的位置:
在代码中,使用掩码:
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]四分位数会忽略极端值,因此离群值无法拉伸边界来隐藏自己。训练前要标记这些值:一个异常值就可能把模型拉向它。
挑战
中等老师为一次测验计时,程序会将每位学生所用的分钟数读入 minutes。起始代码会打印 iqr_fences 返回的围栏值。
- 完善
iqr_fences(a),使它返回a的下 IQR 围栏和上 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 在线编译器