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

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

孤立森林---2--使用Scikit learn实现_第1张图片

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中选取的随机样本个数

孤立森林---2--使用Scikit learn实现_第2张图片

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

孤立森林---2--使用Scikit learn实现_第3张图片

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从根节点到其所在节点一共经历的边数

孤立森林---2--使用Scikit learn实现_第4张图片

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

孤立森林---2--使用Scikit learn实现_第5张图片
孤立森林---2--使用Scikit learn实现_第6张图片

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语法知识,我会在另一篇中记录~

你可能感兴趣的:(机器学习)