孤立森林是一种旨在通过构建随机化的决策树(Decision Tree)来识别数据集中的异常点的算法。其特点如下:
- 随机森林构建:通过设定的孤立树数量和子采样大小,随机构建多棵孤立树。每棵树都是通过对数据进行随机抽样并在随机选择的特征上进行切割来构建,形成一种随机森林结构。
- 递归划分空间:在每一棵树中,通过随机选取的特征和切割点递归地划分数据空间,将数据集分到树的不同节点上。这一过程持续进行,直到达到了树的高度限制或者数据无法进一步分割(即被孤立)。
- 异常检测评分:在测试阶段,每个数据点的异常程度是通过其在树中被孤立的速度来评估的。简单来说,一个样本在树中路径越短,被孤立得越快,就越可能被视为异常。整个森林中所有树对同一个数据点的平均路径长度形成了该点的异常评分。
如下是代码示例:
import numpy as np
import scipy.io
data = scipy.io.loadmat('lympho.mat')['X']
labels = scipy.io.loadmat('lympho.mat')['y']
# 定义孤立森林类
class Isolation_Forest:
# 定义初始化森林的构造函数
def __init__(self, num_trees, subsample_size):
# 孤立树的个数
self.num_trees = num_trees
# 子采样的大小
self.subsample_size = subsample_size
# 存储孤立树的列表
self.trees = []
# 定义训练孤立森林的函数
def fit_ioslayion_forest(self, x):
num_samples = x.shape[0]
subsample_size = min(self.subsample_size, num_samples)
# 对于每一棵树, 将输入数据进行采样得到新的数据, 放入树的根节点
for _ in range(self.num_trees