无监督异常检测
这个话题介绍了多变量样本数据的无监督异常检测特征统计和机器学习工具箱™,并描述了工作流的功能异常值检测(在训练数据检测异常)新奇的检测在新数据(检测异常未被污染的训练数据)。
对于无标号多元样本数据,您可以使用隔离森林,来检测异常强劲的随机森林减少,局部离群值的因素,看到下面成了一个支持向量机(SVM),而距离。金宝app这些方法检测异常值通过模型训练或学习参数。新奇的发现,你的火车模型或学习参数与未被污染的训练数据(数据没有异常值)和检测异常新数据通过训练或学习参数模型。
与世隔绝的森林,与世隔绝的森林算法检测到异常,将他们孤立于使用一个正常点的孤立树。检测异常值使用
iforest
函数,发现新奇事物通过使用目标函数isanomaly
。随机的森林——切鲁棒随机森林减少算法分类点作为一个正常点的或反常的基于模型的变化引入的复杂性。类似于隔离森林算法,健壮的随机森林算法构建一个整体的树木。这两个算法的差异表现在他们选择在树木和分离变量如何定义异常分数。检测异常值使用
rrcforest
函数,发现新奇事物通过使用目标函数isanomaly
。——当地异常因素局部离群因子(LOF)算法检测到异常基于观察的相对密度对周围的邻居。检测异常值使用
lof
函数,发现新奇事物通过使用目标函数isanomaly
。看到下面成了一个支持金宝app向量机(SVM)看到下面成了一个支持向量机或无监督方法,试图从原点在单独的数据转换后的高维空间预测指标。检测异常值使用
ocsvm
函数,发现新奇事物通过使用目标函数isanomaly
。Mahalanobis距离——如果样本数据遵循多元正态分布,然后方Mahalanobis距离样本的分布遵循卡方分布。因此,您可以使用的距离来检测异常基于卡方分布的关键值。对于异常值检测、使用
robustcov
函数来计算健壮的距离。对于新奇的检测,可以计算使用的距离robustcov
和pdist2
功能。
异常值检测
这个例子说明了五个无监督异常检测方法的工作流(隔离森林,健壮的随机森林减少,局部离群值的因素,看到下面成了支持向量机,和Mahalanobis距离)为异常值检测。
加载数据
加载humanactivity
的数据集,其中包含的变量的壮举
和actid
。的变量的壮举
包含24075年60特性的预测数据矩阵的观察,和响应变量actid
包含活动id观测的整数。下面的例子使用了的壮举
变量进行异常检测。
负载humanactivity
找到变量的大小的壮举
。
[N、D] =大小(专长)
N = 24075
D = 60
假设数据异常值的分数是0.05。
contaminationFraction = 0.05;
与世隔绝的森林
检测异常值使用iforest
函数。
火车一个隔离森林模型通过使用iforest
函数。指定异常值的分数(ContaminationFraction
0.05)。
rng (“默认”)%的再现性(森林,tf_forest s_forest) = iforest(功绩,…ContaminationFraction = ContaminationFraction);
森林
是一个IsolationForest
对象。iforest
还返回异常指标(tf_forest
)和异常分数(s_forest
)的数据(的壮举
)。iforest
决定了分数阈值(forest.ScoreThreshold
),以便观察的功能检测指定的分数作为离群值。
画一个柱状图的分数值。创建一个垂直线的分数阈值对应于指定的分数。
图直方图(s_forest正常化=“概率”)参照线(forest.ScoreThreshold“k -”,…加入([“阈值= "forest.ScoreThreshold]))标题(“隔离森林直方图异常分数”)
检查中发现异常数据的一部分。
OF_forest = (tf_forest) / N
OF_forest = 0.0496
离群值分数可以小于指定的分数(0.05)当分数与阈值。
鲁棒随机森林减少
检测异常值使用rrcforest
函数。
火车通过削减健壮的随机森林模型rrcforest
函数。指定异常值的分数(ContaminationFraction
0.05),并指定StandardizeData
作为真正的
标准化的输入数据。
rng (“默认”)%的再现性[rforest, tf_rforest s_rforest] = rrcforest(功绩,…ContaminationFraction = ContaminationFraction StandardizeData = true);
rforest
是一个RobustRandomCutForest
对象。rrcforest
还返回异常指标(tf_rforest
)和异常分数(s_rforest
)的数据(的壮举
)。rrcforest
决定了分数阈值(rforest.ScoreThreshold
),以便观察的功能检测指定的分数作为离群值。
画一个柱状图的分数值。创建一个垂直线的分数阈值对应于指定的分数。
图直方图(s_rforest正常化=“概率”)参照线(rforest.ScoreThreshold“k -”,…加入([“阈值= "rforest.ScoreThreshold]))标题(“直方图异常分数的方法来实现鲁棒随机森林”)
检查中发现异常数据的一部分。
OF_rforest = (tf_rforest) / N
OF_rforest = 0.0500
局部离群因子
检测异常值使用lof
函数。
火车模型通过使用当地异常因素lof
函数。指定异常值的分数(ContaminationFraction
),0.05,500最近的邻居,而距离。
[LOFObj, tf_lof s_lof] = lof(功绩,…ContaminationFraction = ContaminationFraction,…NumNeighbors = 500,距离=“mahalanobis”);
LOFObj
是一个LocalOutlierFactor
对象。lof
还返回异常指标(tf_lof
)和异常分数(s_lof
)的数据(的壮举
)。lof
决定了分数阈值(LOFObj.ScoreThreshold
),以便观察的功能检测指定的分数作为离群值。
画一个柱状图的分数值。创建一个垂直线的分数阈值对应于指定的分数。
图直方图(s_lof正常化=“概率”)参照线(LOFObj.ScoreThreshold“k -”,…加入([“阈值= "LOFObj.ScoreThreshold]))标题(“直方图异常分数为当地异常因素”)
检查中发现异常数据的一部分。
OF_lof = (tf_lof) / N
OF_lof = 0.0500
看到下面成了一个支持向量机
检测异常值使用ocsvm
函数。
火车通过看到下面成了一个支持向量机模型ocsvm
函数。指定异常值的分数(ContaminationFraction
0.05)。此外,设置KernelScale
来“汽车”
让函数选择适当的内核使用启发式程序尺度参数,并指定StandardizeData
作为真正的
标准化的输入数据。
(Mdl tf_OCSVM s_OCSVM] = ocsvm(功绩,…ContaminationFraction = ContaminationFraction,…KernelScale =“汽车”,StandardizeData = true);
Mdl
是一个OneClassSVM
对象。ocsvm
还返回异常指标(tf_OCSVM
)和异常分数(s_OCSVM
)的数据(的壮举
)。ocsvm
决定了分数阈值(Mdl.ScoreThreshold
),以便观察的功能检测指定的分数作为离群值。
画一个柱状图的分数值。创建一个垂直线的分数阈值对应于指定的分数。
图直方图(s_OCSVM正常化=“概率”)参照线(Mdl.ScoreThreshold“k -”,…加入([“阈值= "Mdl.ScoreThreshold]))标题(“看到下面成了SVM直方图异常分数”)
检查中发现异常数据的一部分。
OF_OCSVM = (tf_OCSVM) / N
OF_OCSVM = 0.0500
Mahalanobis距离
使用robustcov
函数来计算健壮Mahalanobis距离和健壮的均值和协方差的估计数据。
计算出距离的壮举
的分布的壮举
通过使用robustcov
函数。指定异常值的分数(OutlierFraction
0.05)。robustcov
协方差最小化了行列式超过95%的观察。
[σ,μ,s_robustcov, tf_robustcov_default] = robustcov(功绩,…OutlierFraction = contaminationFraction);
robustcov
找到了健壮的协方差矩阵估计(σ
)和健壮的意思估计(μ
),它不太敏感的离群值的估计浸
和的意思是
功能。的robustcov
函数计算Mahalanobis距离(s_robustcov
)和离群值指标(tf_robustcov_default
)。默认情况下,函数假定遵循多元正态分布的数据集,并确定输入的观察作为离群值的2.5%基于卡方分布的关键值。
如果数据集满足正常的假设,那么平方距离遵循一个卡方分布D
自由度,D
是数据的维数。在这种情况下,你可以找到一个新的阈值使用chi2inv
功能检测观察的指定分数作为离群值。
s_robustcov_threshold =√chi2inv (1-contaminationFraction D));tf_robustcov = s_robustcov > s_robustcov_threshold;
创建一个距离阴谋情节(DD)检查数据的多元常态。
图d_classical = pdist2(功绩,意味着(成就),“mahalanobis”);gscatter (d_classical s_robustcov tf_robustcov,“kr”,“方式”)参照线(s_robustcov_threshold“k -”)yline (s_robustcov_threshold“k -”,…加入([“阈值= "s_robustcov_threshold]));1 l = refline ([0]);l颜色=“k”;包含(“Mahalanobis距离”)ylabel (“健壮的距离”)传说(“正常点”,“局外人”位置=“西北”)标题(“距离是阴谋”)
放大的轴的正常点。
xlim (10 [0]) ylim ([0 10])
如果一个数据集多元正态分布,然后数据点集群紧密大约45度的参考线。DD情节表明数据集不遵循多元正态分布。
因为数据集不满足正常的假设,使用分位数的累积概率值的距离(1 - contaminationFraction
)找到一个阈值。
s_robustcov_threshold =分位数(s_robustcov 1-contaminationFraction);
获得异常指标的壮举
使用新的阈值s_robustcov_threshold
。
tf_robustcov = s_robustcov > s_robustcov_threshold;
检查中发现异常数据的一部分。
OF_robustcov = (tf_robustcov) / N
OF_robustcov = 0.0500
比较检测到异常值
可视化检测离群值,降低数据维度通过使用tsne
函数。
rng (“默认”)%的再现性T = tsne(壮举,规范= true,困惑= 100,夸张= 20);
情节的正常点和异常值的降低维度。比较结果的五个方法:隔离森林算法鲁棒随机森林算法,局部离群因子算法,看到下面成了SVM模型,和健壮的距离robustcov
。
图tiledlayout (2、3) nexttile gscatter (T (: 1), T (:, 2), tf_forest,“kr”[][],“关闭”)标题(“隔离森林”)nexttile gscatter (T (: 1), T (:, 2), tf_rforest,“kr”[][],“关闭”)标题(“鲁棒随机森林”)nexttile (4) gscatter (T (: 1), T (:, 2), tf_lof,“kr”[][],“关闭”)标题(“局部离群值因素”)nexttile (5) gscatter (T (: 1), T (:, 2), tf_OCSVM,“kr”[][],“关闭”)标题(“看到下面成了一个支持向量机”)nexttile (6) gscatter (T (: 1), T (:, 2), tf_robustcov,“kr”[][],“关闭”)标题(“健壮Mahalanobis距离”)l =传奇(“正常点”,“局外人”);l.Layout。瓦= 3;
五个方法附近发现的新奇事物彼此减少维度。
你也可以可视化观测值使用选择的两个最重要的特性fsulaplacian
函数。
idx = fsulaplacian(成绩);图t = tiledlayout (2、3);nexttile gscatter(壮举:idx(1)),专长(:,idx (2)), tf_forest,“kr”[][],“关闭”)标题(“隔离森林”)nexttile gscatter(壮举:idx(1)),专长(:,idx (2)), tf_rforest,“kr”[][],“关闭”)标题(“鲁棒随机森林”)nexttile (4) gscatter(壮举:idx(1)),专长(:,idx (2)), tf_lof,“kr”[][],“关闭”)标题(“局部离群值因素”)nexttile (5) gscatter(壮举:idx(1)),专长(:,idx (2)), tf_OCSVM,“kr”[][],“关闭”)标题(“看到下面成了一个支持向量机”)nexttile (6) gscatter(壮举:idx(1)),专长(:,idx (2)), tf_robustcov,“kr”[][],“关闭”)标题(“Mahalanobis距离”)l =传奇(“正常点”,“局外人”);l.Layout。瓦= 3;包含(t,加入([“列”idx (1)])) ylabel (t)加入([“列”idx (2))))
新奇的检测
这个例子说明了五个无监督异常检测方法的工作流(隔离森林,健壮的随机森林减少,局部离群值的因素,看到下面成了支持向量机,和Mahalanobis距离)为新奇检测。
加载数据
加载humanactivity
的数据集,其中包含的变量的壮举
和actid
。的变量的壮举
包含24075年60特性的预测数据矩阵的观察,和响应变量actid
包含活动id观测的整数。下面的例子使用了的壮举
变量进行异常检测。
负载humanactivity
分区数据通过使用训练集和测试集cvpartition
函数。使用50%的观察作为训练数据和50%的观察作为新奇检测的测试数据。
rng (“默认”)%的再现性c = cvpartition (actid,坚持= 0.50);trainingIndices =培训(c);%训练集的指标testIndices =测试(c);%测试集的指标XTrain =壮举(trainingIndices:);XTest =壮举(testIndices:);
假设训练数据不受污染(无异常)。
找到训练集和测试集的大小。
[N、D] =大小(XTrain)
N = 12038
D = 60
元=大小(XTest, 1)
元= 12037
与世隔绝的森林
使用目标函数发现新奇事物isanomaly
通过训练后一个隔离森林模型iforest
函数。
火车一个隔离森林模型。
[森林,tf_forest s_forest] = iforest (XTrain);
森林
是一个IsolationForest
对象。iforest
还返回异常指标(tf_forest
)和异常分数(s_forest
训练数据)(XTrain
)。默认情况下,iforest
对待所有正常训练观察观察,并设置分数阈值(forest.ScoreThreshold
最大的分数值)。
使用训练有素的隔离森林模型和目标函数isanomaly
发现新奇事物XTest
。的isanomaly
函数确定观测分数高于阈值(forest.ScoreThreshold
)作为纪念品。
[tfTest_forest, sTest_forest] = isanomaly(森林、XTest);
的isanomaly
函数的作用是:返回异常指标(tfTest_forest
)和异常分数(sTest_forest
的测试数据。
绘制柱状图的分数值。创建一个垂直线分数阈值。
图直方图(s_forest正常化=“概率”)举行在直方图(sTest_forest正常化=“概率”)参照线(forest.ScoreThreshold“k -”,…加入([“阈值= "forest.ScoreThreshold]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“直方图异常分数隔离森林”)举行从
的异常分数分布测试数据与训练数据,isanomaly
检测到少量的测试数据异常。
检查发现异常的部分测试数据。
NF_forest = (tfTest_forest) / nt
NF_forest = 8.3077 e-05
显示异常的观测指标的测试数据。
idx_forest =找到(tfTest_forest)
idx_forest = 3422
鲁棒随机森林减少
使用目标函数发现新奇事物isanomaly
训练后通过削减健壮的随机森林模型rrcforest
函数。
火车一个健壮的随机森林模型。指定StandardizeData
作为真正的
标准化的输入数据。
[rforest, tf_rforest s_rforest] = rrcforest (XTrain StandardizeData = true);
rforest
是一个RobustRandomCutForest
对象。rrcforest
还返回异常指标(tf_rforest
)和异常分数(s_rforest
训练数据)(XTrain
)。默认情况下,rrcforest
对待所有正常训练观察观察,并设置分数阈值(rforest.ScoreThreshold
最大的分数值)。
使用训练有素的鲁棒随机森林模型和目标函数isanomaly
发现新奇事物XTest
。的isanomaly
函数确定观测分数高于阈值(rforest.ScoreThreshold
)作为纪念品。
[tfTest_rforest, sTest_rforest] = isanomaly (rforest XTest);
的isanomaly
函数的作用是:返回异常指标(tfTest_rforest
)和异常分数(sTest_rforest
的测试数据。
绘制柱状图的分数值。创建一个垂直线分数阈值。
图直方图(s_rforest正常化=“概率”)举行在直方图(sTest_rforest正常化=“概率”)参照线(rforest.ScoreThreshold“k -”,…加入([“阈值= "rforest.ScoreThreshold]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“直方图异常分数的方法来实现鲁棒随机森林”)举行从
的异常分数分布测试数据与训练数据,isanomaly
检测到少量的测试数据异常。
检查发现异常的部分测试数据。
NF_rforest = (tfTest_rforest) / nt
NF_rforest = 0
的异常分数分布测试数据与训练数据,isanomaly
没有发现任何异常的测试数据。
局部离群因子
使用目标函数发现新奇事物isanomaly
训练后通过使用局部离群因子模型lof
函数。
培训当地的离群值的因素模型。
[LOFObj, tf_lof s_lof] = lof (XTrain);
LOFObj
是一个LocalOutlierFactor
对象。lof
返回异常指标(tf_lof
)和异常分数(s_lof
训练数据)(XTrain
)。默认情况下,lof
对待所有正常训练观察观察,并设置分数阈值(LOFObj.ScoreThreshold
最大的分数值)。
使用训练有素的局部离群因子模型和目标函数isanomaly
发现新奇事物XTest
。的isanomaly
函数确定观测分数高于阈值(LOFObj.ScoreThreshold
)作为纪念品。
[tfTest_lof, sTest_lof] = isanomaly (LOFObj XTest);
的isanomaly
函数的作用是:返回异常指标(tfTest_lof
)和异常分数(sTest_lof
的测试数据。
绘制柱状图的分数值。创建一个垂直线分数阈值。
图直方图(s_lof正常化=“概率”)举行在直方图(sTest_lof正常化=“概率”)参照线(LOFObj.ScoreThreshold“k -”,…加入([“阈值= "LOFObj.ScoreThreshold]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“直方图异常分数为当地异常因素”)举行从
的异常分数分布测试数据与训练数据,isanomaly
检测到少量的测试数据异常。
检查发现异常的部分测试数据。
NF_lof = (tfTest_lof) / nt
NF_lof = 8.3077 e-05
显示异常的观测指标的测试数据。
idx_lof =找到(tfTest_lof)
idx_lof = 8704
看到下面成了一个支持向量机
使用目标函数发现新奇事物isanomaly
培训后看到下面成了利用支持向量机模型ocsvm
函数。
火车看到下面成了一个支持向量机模型。集KernelScale
来“汽车”
让函数选择适当的内核使用启发式程序尺度参数,并指定StandardizeData
作为真正的
标准化的输入数据。
(Mdl tf_OCSVM s_OCSVM] = ocsvm (XTrain,…KernelScale =“汽车”,StandardizeData = true);
Mdl
是一个OneClassSVM
对象。ocsvm
返回异常指标(tf_OCSVM
)和异常分数(s_OCSVM
训练数据)(XTrain
)。默认情况下,ocsvm
对待所有正常训练观察观察,并设置分数阈值(Mdl.ScoreThreshold
最大的分数值)。
使用支持向量机训练看到下面成了模型和目标函数isanomaly
找到新奇产品在测试数据(XTest
)。的isanomaly
函数确定观测分数高于阈值(Mdl.ScoreThreshold
)作为纪念品。
[tfTest_OCSVM, sTest_OCSVM] = isanomaly (Mdl XTest);
的isanomaly
函数的作用是:返回异常指标(tfTest_OCSVM
)和异常分数(sTest_OCSVM
的测试数据。
绘制柱状图的分数值。创建一个垂直线分数阈值。
图直方图(s_OCSVM正常化=“概率”)举行在直方图(sTest_OCSVM正常化=“概率”)参照线(Mdl.ScoreThreshold“k -”,…加入([“阈值= "Mdl.ScoreThreshold]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“看到下面成了SVM直方图异常分数”)举行从
检查发现异常的部分测试数据。
NF_OCSVM = (tfTest_OCSVM) / nt
NF_OCSVM = 1.6615 e-04
显示异常的观测指标的测试数据。
idx_OCSVM =找到(tfTest_OCSVM)
idx_OCSVM =2×13560 8316
Mahalanobis距离
使用robustcov
函数来计算Mahalanobis距离的训练数据,并使用pdist2
函数来计算距离的测试数据。
计算出距离XTrain
的分布XTrain
通过使用robustcov
函数。指定异常值的分数(OutlierFraction
)为0。
[σ,μ,s_mahal] = robustcov (XTrain OutlierFraction = 0);
robustcov
还返回协方差矩阵的估计(σ
),(μ
),您可以使用它来计算距离的测试数据。
使用的最大价值s_mahal
新奇的分数阈值检测。
s_mahal_threshold = max (s_mahal);
计算出距离XTest
的分布XTrain
通过使用pdist2
函数。
sTest_mahal = pdist2 (XTest亩,“mahalanobis”σ);
获得异常指标XTest
。
tfTest_mahal = sTest_mahal > s_mahal_threshold;
绘制柱状图的分数值。
图直方图(s_mahal正常化=“概率”);持有在直方图(sTest_mahal正常化=“概率”);参照线(s_mahal_threshold“k -”,…加入([“阈值= "s_mahal_threshold]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“Mahalanobis距离直方图”)举行从
检查发现异常的部分测试数据。
NF_mahal = (tfTest_mahal) / nt
NF_mahal = 8.3077 e-05
显示异常的观测指标的测试数据。
idx_mahal =找到(tfTest_mahal)
idx_mahal = 3654
另请参阅
iforest
|isanomaly (IsolationForest)
|rrcforest
|isanomaly (RobustRandomCutForest)
|lof
|isanomaly (LocalOutlierFactor)
|ocsvm
|isanomaly (OneClassSVM)
|robustcov
|pdist2
相关的话题
- 异常检测与隔离森林
- 模型相关的异常检测
- 使用三轴振动数据异常检测在工业机械(预测维护工具箱)