孤立森林---2--使用Scikit learn实现

Some Notions(算法中使用到的一些符号说明)

在这里插入图片描述

Training Stage (训练阶段包含算法1和算法2)

算法1: i F o r e s t ( X , t , ψ ) iForest(X,t,\psi) iForest(X,t,ψ)构建孤立森林,X表示我们的总数据, t 表示孤立森林中设置的树的棵数, ψ \psi ψ表示构建一棵树,我们从总数据X中选取的随机样本个数

在这里插入图片描述

算法1: i T r e e ( X ′ ) iTree(X') iTree(X)构建孤立树, X ′ X' X表示 ψ \psi ψ 个随机样本的集合

在这里插入图片描述

Evaluation Stage

算法3:把样本一个 x 放到一棵孤立树上,看这个样本 x 最后落在树的哪个节点上,返回这个节点的高度。 P a t h L e n g t h ( x , T , h l i m , e ) PathLength(x,T,hlim,e) PathLength(x,T,hlim,e),x表示一个样本,T 表示森林中的一棵树,hlim表示一棵树最多能有多高,e 表示这个样本x从根节点到其所在节点一共经历的边数

在这里插入图片描述

直接调用Scikit learn 库中的Isolation Forest算法

在这里插入图片描述
在这里插入图片描述

predict(X): 返回值:+1 表示正常样本, -1表示异常样本。
decision_function(X) 返回样本的异常评分。 值越小表示越有可能是异常样本。
官方示例:(我们现在通过这个简单的例子,来看一看它都用了Isolation Forest 算法的哪些方法~)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import IsolationForest
rng=np.random.RandomState(42)
# 生成训练数据
X=0.3*rng.randn(100,2) # 100条二维数据
X_train=np.r_[X+2,X-2] # 200条数据(X+2,X-2)拼接而成

X = 0.3 * rng.randn(20, 2)
X_test = np.r_[X + 2, X - 2]
# 基于分布生成一些观测正常的数据
X_outliers=rng.uniform(low=-4,high=4,size=(20,2))
# 训练隔离森林模型
clf=IsolationForest(behaviour='new',max_samples=100,random_state=rng,contamination='auto')
clf.fit(X_train)
y_pred_train=clf.predict(X_train)
y_pred_test=clf.predict(X_test)
y_pred_outliers = clf.predict(X_outliers)
# 画图
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50)) # 生成网络数据 https://www.cnblogs.com/lemonbit/p/7593898.html
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.title("IsolationForest")
plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r) # 等高线

b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='white',
                 s=20, edgecolor='k')
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c='green',
                 s=20, edgecolor='k')
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red',
                s=20, edgecolor='k')
plt.axis('tight')
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend([b1, b2, c],
           ["training observations",
            "new regular observations", "new abnormal observations"],
           loc="upper left")
plt.show()
可以看到这个小例子中一共用到了下面这4个方法:
1. clf=IsolationForest()
2. clf.fit(X_train)
3. clf.predict(X_train)
4.clf.decision_function()
这个示例中相关的一些python语法知识,我会在另一篇中记录~
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值