Isolation Forest

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,保证划分之后正负样本比和总体样本保持一致。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容