Isolation Forest
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 35 课,共 51 课。
异常点很容易被分离出来。反复随机切分数据,直到某个点单独出现:
距离较远的点需要 2 次切分,密集的点需要 8 次。孤立森林会对 100 棵随机树的切分次数取平均值:
from sklearn.ensemble import IsolationForest
forest = IsolationForest(contamination=0.02, random_state=0)
flags = forest.fit_predict(X)fit_predict 对异常行返回 -1,对其余行返回 1。contamination 表示你预计的异常行占比。
挑战
中等一个港口记录了 160 个起重机班次:每小时搬运量和每次搬运的能耗。哪些班次比较异常?
- 用孤立森林标记这些班次,设置
contamination=0.03、random_state=0。按下面的格式输出数量。 - 用点标出正常班次,标签为
normal。 - 圈出被标记的班次:
s=150, facecolors="none", edgecolors="red",标签为flagged。添加图例并显示图表。
对于另一个有 200 个班次的港口:
Flagged: 6 of 200 shifts然后 Coddy 会描述你的图表。
亲手试试
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
# 港口每个起重机班次占一行:记录作业速度和能耗
shifts = pd.read_csv("cranes.csv")
X = shifts[["moves_per_hour", "kwh_per_move"]]
# 不要修改下面的代码行
fig, ax = plt.subplots()
ax.set_title("Crane Shifts")
ax.set_xlabel("Moves per hour")
ax.set_ylabel("Energy per move (kWh)")
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器