美文网首页
Isolation Forest

Isolation Forest

作者: 王尔德的小人书 | 来源:发表于2020-12-09 16:47 被阅读0次

    Isolation Forest

    概述:

    Intro:随机选取特征,在该特征的maximum和minimum中随机选择切分值。递归划分,形成孤立树结构。根节点到叶子节点的长度,等价于split的次数。对于多棵树,计算平均长度,可以反映样本异常的程度,因为异常样本通常较快的被划分到叶子节点,路径长度较小。

    独立树:随机二叉树,每个结点要么有两个子节点,要么是叶子结点。对于数据集D,D的所有属性均为连续型变量。

    独立树构造流程:

    1、随机选择一个属性(不同于决策树的信息增益策略,直接选)

    2、随机选择该属性的分界值value(value取值在max和min之间)

    3、[根据步骤2的值对每条记录进行分类,小于value的记录在左子树,大于或等于value的记录在右子树

    4、递归执行步骤1、2、3,直到满足条件:传入的数据只有一条或者多条相同记录,或者树的高度达到阈值

    预测

    把测试记录从根节点搜索,确定预测点的搜索路径。检测异常的假设:异常点一般比较稀有,所以很快被分到叶子结点,所以独立树中,异常值一般是根节点到叶子结点路径短的叶子。可以用距离深度h(x)判断记录是否属于异常值。S(x,n)判定记录x是否为异常值,则有

    n:为样本大小,h(x)为记录在独立树的高度,S(x,n)取值为0~1,越接近1,越确定为离群点,接近0则说明正常点的概率较高。如果S(x,n)大部分都接近0.5,说明数据集没有明显异常值。

    仅使用一棵树确定离群值随机性较大,可将多颗独立树结合形成独立森林,即随机采样一部分数据集构造每一个独立树,并且保证每棵独立树不同。同时限定样本大小,因为采样前正常值和异常值有重叠,采样可以有效区分正常值和离群值;同时限定独立树的最大高度,以内离群值路径较短,设置过高的高度阈值会造成大量无意义的计算,降低效率。S(x,n)此时:

    sklearn库函数

    Parameters

    n_estimators:int, optional(default = 100) //树的棵数,paper中建议100,再增加模型提升有限

    max_samples:int or float, optional(default = “auto”) //sunsample样本大小,默认256;int,则抽取样本数为该值;float,则按比例计算

    contamination:auto or float, optional(default = “auto”) //样本中离群值的占比,auto是采用paper中的阈值,sklearn是0.5,float是自己指定

    max_features:int or float, optional(default = 1.0) //每棵树训练时参与分裂的树的特征数,默认1

    bootstrap: bool, optional(default = false) //subsample时,采取有放回抽样还是无放回抽样,默认不放回

    n_jobs: int or none, optional(default = none) //模型预测和训练时,工作的core数量,-1全部用来工作

    random_state: int, randomState instance or none, optional(default = none) //设置随机数

    verbose: int, optional(default = 0) //是否在构建树的过程中输出

    Methods

    decision_function(self, X) //返回基学习器的平均得分=score_samples-offset;得分越低越不正常

    fit(self, X[, y, sample_weight]) //拟合模型

    fit_predict(self, X[, y]) //预测

    get_params(self[, deep]) //得到模型参数

    predict(self, X) //预测

    score_sampls(self, X) //计算得分

    set_params(self, **params) //设置参数

    实验步骤:

    简单EDA

    data.head()

    data.shape

    data.Class.value_counts()

    data.isna().sum()

    数据准备

    交叉验证的数据划分和模型训练指定随机数种子,以保证数据可对比和可重复

    from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV, StratifiedKFold

    特征数据单独存放

    data[‘hour’] = data[“time”].apply(lambda x : divmod(x, 3600)[0])

    X=data.drop([‘time’, ‘Class’], axis=1)

    Y=data.Class

    训练、测试数据划分

    调用train_test_split函数划分训练集和测试集,设置参数stratify=y,保证划分之后正负样本比和总体样本保持一致。

    相关文章

      网友评论

          本文标题:Isolation Forest

          本文链接:https://www.haomeiwen.com/subject/gmwhgktx.html