找出异常项
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 34 课,共 51 课。
本章将找出异常行。学完后,你会圈出服务器中异常的分钟:
异常是与其他行不同的少见行:可能是故障、欺诈或拼写错误。每个新异常都不一样,所以没人能提前为它们贴上标签。
先从 z 分数开始。StandardScaler 会将每一列转换为 z 分数,因此一行代码就能标记任意值超过 3 的行:
z = StandardScaler().fit_transform(X)
odd = (np.abs(z) > 3).sum(axis=1) > 0但一行数据在每一列中都可能很普通,只有组合起来才显得奇怪。列的 z 分数无法发现这一点。
挑战
中等一家超市记录了其 80 台冷柜当天的平均数据。哪些冷柜需要技术人员检查?程序会读取一个阈值。
- 将
X的每一列转换为 z 分数。 - 对每一列,打印被标记的冷柜数量:z 分数与 0 的距离大于阈值。
- 按表格中的顺序,打印被任意一列标记的每台冷柜。
对于另一家商店,阈值为 3:
temp_c: 1 flagged
power_kw: 2 flagged
door_openings: 0 flagged
defrost_min: 0 flagged
Freezers to check:
F05
F13
F51亲手试试
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 每台冷冻柜占一行:记录一天的平均值
freezers = pd.read_csv("freezers.csv")
columns = ["temp_c", "power_kw", "door_openings", "defrost_min"]
X = freezers[columns]
cutoff = float(input())
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器