主要内容

异常检测与隔离森林

介绍了隔离森林

隔离森林算法[1]孤立异常检测异常的使用一个正常点的孤立树。每个孤立树是训练的一个子集训练观察,没有更换取样。算法变得孤立树,选择分离变量和随机分割位置,直到每一个观察土地在另一个叶子节点的一个子集。异常很少,不同;因此,异常的土地在一个单独的叶子节点靠近根节点和有一个短的路径长度(从根节点到叶子节点的距离)比正常点。该算法识别异常使用基于定义的异常分数的平均路径长度超过所有孤立树。

使用iforest函数,IsolationForest对象,isanomaly对异常值检测和新奇检测目标函数。

  • 在训练数据异常值检测(检测异常)——在训练数据通过使用检测异常iforest函数。iforest构建一个IsolationForest对象,并返回异常指标和训练数据的分数。例如,看到的检测异常值

  • 新奇检测(检测异常在新数据与未被污染的训练数据),创建一个IsolationForest对象通过未被污染的训练数据(数据没有异常值)iforest,在新数据通过检测异常对象和新的数据对象的功能isanomaly。对于每个新数据的观察,发现函数的平均路径长度到达一个叶子节点从根节点在森林训练隔离,并返回一个异常指标和评分。例如,看到的发现新奇事物

参数隔离森林

您可以指定参数隔离森林算法通过使用名称-值的参数iforest:

  • NumObservationsPerLearner(为每个隔离观察树的数量)-每个孤立树对应于训练观察的一个子集。对于每一个树,iforest样品分钟(N, 256)从训练数据不重复观测,在哪里N是培训的观察。隔离森林算法执行与一个小样本大小,因为它有助于检测密度异常和异常接近正常点。然而,你需要试验样本容量N很小。例如,看到的检查NumObservationsPerLearner对于小数据

  • NumLearners(数量的孤立树)——默认情况下,iforest函数增长100隔离隔离森林树木,因为平均路径长度通常收敛之前增长100孤立树[1]

异常分数

隔离森林算法计算异常分数年代(x)的观察x通过规范化路径长度h(x):

年代 ( x ) = 2 E ( h ( x ) ] c ( n ) ,

在哪里E(h(x)]平均路径长度超过所有孤立树隔离森林,然后呢c(n)成功搜索的平均路径长度在一个二叉搜索树的n观察。

  • 比分接近1E(h(x)]接近0。因此,一个分数值接近1显示异常。

  • 比分接近0E(h(x)]方法n- 1。同时,比分接近0.5时E(h(x)]方法c(n)。因此,一个分数值小于0.5,接近0表示正常点。

异常指标

iforestisanomaly确定观测与异常分数高于分数阈值异常。函数返回一个逻辑向量具有相同的长度作为输入数据。值逻辑1 (真正的)表明,对应的行输入数据的异常。

  • iforest确定阈值(ScoreThreshold属性值)来检测指定的分数(ContaminationFraction名称-值参数)的训练观察异常。默认情况下,函数对所有训练观察正常观测。

  • isanomaly提供了ScoreThreshold名称-值参数,您可以使用它来指定阈值。默认阈值决定当隔离森林训练价值。

检测异常值并绘制轮廓的异常分数

这个示例使用生成的样本数据包含异常值。火车一个隔离森林模型和检测异常值使用iforest函数。然后,计算异常点的分数通过使用示例数据isanomaly功能,并创建一个等高线图的异常分数。

生成样本数据

使用高斯相关随机生成数据点的二维分布。

rng (“默认”)ρ= [1,0.05,0.05,1];n = 1000;u = copularnd (“高斯”ρ,n);

添加噪声的5%随机选择观察观察异常值。

噪音= randperm (0.05 * n);true_tf = false (n, 1);true_tf(噪声)= true;u (true_tf 1) = (true_tf 1) * 5;

森林火车隔离和检测离群值

火车一个隔离森林模型通过使用iforest函数。指定的比例异常的训练观察为0.05。

(f, tf,分数)= iforest (u, ContaminationFraction = 0.05);

f是一个IsolationForest对象。iforest还返回异常指标(特遣部队)和异常分数(分数训练数据)。

画一个柱状图的分数值。创建一个垂直线的分数阈值对应于指定的分数。

直方图(分数)参照线(f.ScoreThreshold,“r -”,加入([“阈值”f.ScoreThreshold]))

图包含一个坐标轴对象。坐标轴对象包含2直方图类型的对象,constantline。

绘制轮廓的异常分数

使用隔离森林模型和训练isanomaly函数来计算异常分数在训练观察二维网格坐标。

l1 = linspace (min (u(: 1),[], 1)、马克斯(u (: 1), [], 1));l2 = linspace (min (u(:, 2),[], 1)、马克斯(u (:, 2), [], 1));(X1, X2) = meshgrid (l1, l2);[~,scores_grid] = isanomaly (f (X1 (:), X2 (:)));scores_grid =重塑(scores_grid、大小(X1, 1),大小(X2, 2));

创建一个散点图的训练观察和等高线图的异常分数。标志真正的离群值和异常值探测到iforest

idx = setdiff(1:1000、噪音);散射(u (idx, 1), u (idx, 2), [], [0.5 0.5 0.5],“。”)举行散射(u(噪音,1),u(噪音,2),“罗”,“填充”)散射(u (tf, 1), u (tf, 2), 60岁,“kx”线宽= 1)轮廓(X1, X2, scores_grid,“ShowText”,“上”)传说([“正常点”“局外人”“检测到异常值”),位置=“最佳”)colorbar举行

图包含一个坐标轴对象。坐标轴对象包含4类型的对象分散,轮廓。这些对象代表正常点,离群值,发现离群值。

检查性能

检查的性能iforest通过绘制precision-recall曲线和计算曲线下的面积(AUC)值。创建一个rocmetrics对象。rocmetrics计算假阳性利率和真实积极的利率(或召回)默认情况下。指定AdditionalMetrics另外名称参数计算精度值(或阳性预测值)。

rocObj = rocmetrics (true_tf,分数,真的,AdditionalMetrics =“PositivePredictiveValue”);

通过绘制曲线情节的函数rocmetrics。指定y设在度量精度(或阳性预测值)和x设在度量回忆(或真阳性率)。显示一个实心圆模型对应于操作点f.ScoreThreshold。计算precision-recall曲线下的面积使用的梯形法trapz功能,并显示传说中的值。

(rocObj YAxisMetric = r =阴谋“PositivePredictiveValue”XAxisMetric =“TruePositiveRate”);持有idx =找到(rocObj.Metrics.Threshold > = f.ScoreThreshold 1“最后一次”);散射(rocObj.Metrics.TruePositiveRate (idx),rocObj.Metrics.PositivePredictiveValue (idx),[],r.Color“填充”)xyData = rmmissing ([r。XData r.YData]);auc = trapz (xyData (: 1), xyData (:, 2));传奇(加入([r.DisplayName”(AUC = "字符串(auc)“)”),”“),“真正的模型操作点”)包含(“回忆”起)ylabel (“精度”)标题(“Precision-Recall曲线”)举行

图包含一个坐标轴对象。坐标轴对象与标题Precision-Recall曲线,包含召回,ylabel精度包含2 roccurve类型的对象,散射。这些对象代表真正的(AUC = 0.72846),真正的模型操作点。

检查NumObservationsPerLearner对于小型数据

对于每个孤立树,iforest样品分钟(N, 256)从训练数据不重复观测,在哪里N是培训的观察。保持样本量小有助于检测密度异常和异常接近正常点。然而,你需要试验样本容量N很小。

这个例子展示了如何为小火车隔离森林模型数据与不同的样本大小,创建块异常分数值与样本大小,确定异常并将其可视化。

加载示例数据

加载费雪的虹膜数据集。

负载fisheriris

数据包含四个测量(花萼长度,萼片宽,花瓣长度,和花瓣宽度)从三个种类的虹膜花。矩阵包含所有四个测量为150的花。

火车隔离森林与不同的样本大小

火车隔离森林模型与不同的样本大小和获得的训练观察异常分数。

s =南(150150);rng (“默认”)我= 3:150 ~ ~ s(:,我)]= iforest(量,NumObservationsPerLearner =我);结束

将观察结果分成三组根据平均分数,并创建块异常分数与样本大小。

score_threshold1 = 0.5;score_threshold2 = 0.55;m =意味着(s, 2,“omitnan”);ind1 =找到(m < score_threshold1);ind2 =找到(m < = score_threshold2 & m > = score_threshold1);ind3 =找到(m > score_threshold2);图t = tiledlayout (3,1);nexttile情节(s (ind1:))标题(加入([“与平均分数<观察”score_threshold1])) nexttile情节(s (ind2,:))标题(加入([“[观察平均分数”score_threshold1”“score_threshold2“]”)))nexttile情节(s (ind3,:))标题(加入([“观察与平均分数>”score_threshold2]))包含(t)“每棵树的数量的观察”)ylabel (t)“异常分数”)

图包含3轴对象。坐标轴对象1与标题观测平均分数< 0.5包含101行类型的对象。坐标轴对象2与标题观测平均得分(0.5 - 0.55)包含33线类型的对象。坐标轴对象3与标题观测平均分数> 0.55包含16线类型的对象。

异常分数降低随着样本量的增加,平均分数的观测值小于0.5。平均分数的观测值大于0.55,异常分数增加随着样本量的增加,然后比分收敛约当样本容量达到50。

检测异常在训练中观察通过隔离森林模型与样本大小50和100。指定的比例异常的训练观察为0.05。

[f1, tf1 scores1] = iforest(量,NumObservationsPerLearner = 50,ContaminationFraction = 0.05);(f2、tf2 scores2] = iforest(量、NumObservationsPerLearner = 100ContaminationFraction = 0.05);

显示异常的观察指标。

找到(tf1)
ans =7×114 42 110 118 119 123 132
找到(tf2)
ans =7×114日15 16 110 118 119 132

两个隔离森林模型有五个异常共同之处。

可视化异常

隔离森林模型与样本大小50,视觉上比较观察值之间的正常和异常点。创建一个矩阵的组合柱状图和散点图里,每个分组的变量使用gplotmatrix函数。

tf1 =分类(tf1 [0, 1], [“正常点”“异常”]);predictorNames = [“花萼长度”“花萼宽”“花瓣长度”“花瓣宽度”];tf1 gplotmatrix(量,[],“kr”,“方式”[][],[],predictorNames)

图包含16个坐标轴对象。坐标轴对象1包含花萼长度,ylabel花瓣宽度包含2线类型的对象。一个或多个行显示与包含它的值只使用标记轴对象2萼片宽包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象3包含花瓣长度包含2类型的对象。一个或多个行显示的值只使用标记轴对象和包含4花瓣宽度包含2线类型的对象。坐标轴对象5 ylabel花瓣长度包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象6包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象7包含2线类型的对象。坐标轴对象8包含2线类型的对象。一个或多个显示它的值只使用标记轴对象9行与ylabel萼片宽包含2线类型的对象。 One or more of the lines displays its values using only markers Axes object 10 contains 2 objects of type line. Axes object 11 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 12 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 13 with ylabel Sepal Length contains 2 objects of type line. Axes object 14 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 15 contains 2 objects of type line. One or more of the lines displays its values using only markers Axes object 16 contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Normal Points, Anomalies.

对于高维数据,您可以通过只使用可视化数据的重要特征。后你也可以可视化数据减少维度通过使用t-SNE (t-Distributed随机邻居嵌入)。

可视化观测值使用选择的两个最重要的特性fsulaplacian函数。

idx = fsulaplacian(量)
idx =1×43 4 1 2
gscatter(量(:,idx (1)), (:, idx (2)), tf1,“kr”,“方式”[],“上”,predictorNames (idx (1)), predictorNames (idx (2)))

图包含一个坐标轴对象。坐标轴对象包含花瓣长度,ylabel花瓣宽度包含2线类型的对象。一个或多个行显示的值只使用这些对象标记代表正常点,异常。

可视化观测值后,通过减少维度tsne函数。

Y = tsne(量);gscatter (Y (: 1), Y (:, 2), tf1,“kr”,“方式”)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。一个或多个行显示的值只使用这些对象标记代表正常点,异常。

引用

[1],f . T。,K. M. Ting, and Z. Zhou. "Isolation Forest,"2008第八届IEEE国际会议数据挖掘。比萨,意大利,2008年,页413 - 422。

另请参阅

||

相关的话题