SCiForest—python实现

本文介绍了SCiForest,一种基于超平面划分的异常检测方法,与iForest的区别在于其选择最佳划分超平面。虽然论文未提供代码,但这里给出了SCiForest的Python简单实现。注意,代码未经充分验证,存在一些限制,例如未使用向量化计算、不支持bootstrap等。作者期待更多优化和改进,同时希望能与异常检测或风控领域的专业人士交流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、说明

SCiForest与iForest的最大差别在于其利用超平面去划分数据集,其利用了多个特征组合划分,并且还在可选范围内选择了最佳的划分超平面,而不是像iForest一样,只是随机选单个特征,随机选单个值(SCiForest论文链接)但论文中并未给出代码实现,更未被收录到如 s c i k i t − l e a r n scikit-learn scikitlearn P y O D PyOD PyOD 等机器学习常用库,可能异常检测是机器学习的一个小的子领域,不像 n l p nlp nlp C V CV CV如此热门吧。
下面给出SCiForest的python的简单实现,需要注意的是:

  1. 原论文中并未给出最终异常得分公式,但熟悉iForest的应该知道其得分和 p a t h L e n g t h pathLength pathLength的关系。
  2. 本次代码未经大量验证,难免有考虑不周的地方,可以自行修改、添加,比如:部分地方没有采用向量化的计算方式;不支持 b o o t s t r a p bootstrap bootstrap;不支持max_features;不支持自定义污染程度、可视化等。

此外,本次实现是一次抛砖引玉,希望各路大牛能更高效、更规范地实现它,也希望结交更多在异常检测领域或风控领域的朋友。

2、代码

import numpy as np
from sklearn.utils import check_array
import random
from collections import namedtuple
from sklearn.exceptions import NotFittedError


def is_same(x):
    """
    用于比较二维数组中,每行是否相同,本方法采用了一种投机取巧的方法,直接转换成string比较。
    """
    first = x[0]
    for i in range(1, len(x)):
        if str
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值