异常检测与隔离森林
介绍了隔离森林
隔离森林算法[1]孤立异常检测异常的使用一个正常点的孤立树。每个孤立树是训练的一个子集训练观察,没有更换取样。算法变得孤立树,选择分离变量和随机分割位置,直到每一个观察土地在另一个叶子节点的一个子集。异常很少,不同;因此,异常的土地在一个单独的叶子节点靠近根节点和有一个短的路径长度(从根节点到叶子节点的距离)比正常点。该算法识别异常使用基于定义的异常分数的平均路径长度超过所有孤立树。
使用iforest
函数,IsolationForest
对象,isanomaly
对异常值检测和新奇检测目标函数。
参数隔离森林
您可以指定参数隔离森林算法通过使用名称-值的参数iforest
:
NumObservationsPerLearner
(为每个隔离观察树的数量)-每个孤立树对应于训练观察的一个子集。对于每一个树,iforest
样品分钟(N, 256)
从训练数据不重复观测,在哪里N
是培训的观察。隔离森林算法执行与一个小样本大小,因为它有助于检测密度异常和异常接近正常点。然而,你需要试验样本容量N
很小。例如,看到的检查NumObservationsPerLearner对于小数据。NumLearners
(数量的孤立树)——默认情况下,iforest
函数增长100隔离隔离森林树木,因为平均路径长度通常收敛之前增长100孤立树[1]。
异常分数
隔离森林算法计算异常分数年代(x)的观察x通过规范化路径长度h(x):
在哪里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表示正常点。
异常指标
iforest
和isanomaly
确定观测与异常分数高于分数阈值异常。函数返回一个逻辑向量具有相同的长度作为输入数据。值逻辑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]))
绘制轮廓的异常分数
使用隔离森林模型和训练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举行从
检查性能
检查的性能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曲线”)举行从
检查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)“异常分数”)
异常分数降低随着样本量的增加,平均分数的观测值小于0.5。平均分数的观测值大于0.55,异常分数增加随着样本量的增加,然后比分收敛约当样本容量达到50。
检测异常在训练中观察通过隔离森林模型与样本大小50和100。指定的比例异常的训练观察为0.05。
[f1, tf1 scores1] = iforest(量,NumObservationsPerLearner = 50,…ContaminationFraction = 0.05);(f2、tf2 scores2] = iforest(量、NumObservationsPerLearner = 100…ContaminationFraction = 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)
对于高维数据,您可以通过只使用可视化数据的重要特征。后你也可以可视化数据减少维度通过使用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)))
可视化观测值后,通过减少维度tsne
函数。
Y = tsne(量);gscatter (Y (: 1), Y (:, 2), tf1,“kr”,“方式”)
引用
[1],f . T。,K. M. Ting, and Z. Zhou. "Isolation Forest,"2008第八届IEEE国际会议数据挖掘。比萨,意大利,2008年,页413 - 422。
另请参阅
iforest
|IsolationForest
|isanomaly