无监督异常检测
这个话题介绍了多变量样本数据的无监督异常检测特征统计和机器学习工具箱™,并描述了工作流的功能异常值检测(在训练数据检测异常)新奇的检测在新数据(检测异常未被污染的训练数据)。
对于无标号多元样本数据,您可以通过使用隔离检测异常森林,看到下面成了一个支持向量机(OCSVM),和距离。金宝app这些方法检测异常值通过模型训练或学习参数。新奇的发现,你的火车模型或学习参数与未被污染的训练数据(数据没有异常值)和检测异常新数据通过训练或学习参数模型。
与世隔绝的森林,与世隔绝的森林算法检测到异常,将他们孤立于使用一个正常点的孤立树。检测异常值使用
iforest
函数,发现新奇事物通过使用目标函数isanomaly
。看到下面成了一个支持金宝app向量机(OCSVM)看到下面成了一个学习或无监督方法,试图从原点在单独的数据转换后的高维空间预测指标。火车OCSVM模型通过使用
fitcsvm
函数,然后通过使用检测异常值和小礼品resubPredict
和预测
对象的函数,分别。Mahalanobis距离——如果样本数据遵循多元正态分布,然后方Mahalanobis距离样本的分布遵循卡方分布。因此,您可以使用的距离来检测异常基于卡方分布的关键值。对于异常值检测、使用
robustcov
函数来计算健壮的距离。对于新奇的检测,可以计算使用的距离robustcov
和pdist2
功能。
异常值检测
这个例子说明了三种无监督异常检测方法的工作流程(隔离森林,OCSVM, 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)时,分数可以绑在阈值。
看到下面成了一个支持金宝app向量机(OCSVM)
火车OCSVM模型通过使用fitcsvm
使用的函数,然后检测异常值resubPredict
函数。
看到下面成了训练金宝app支持向量机模型学习使用fitcsvm
函数。看到下面成了学习的函数列车模型的类标签变量是一个向量的。指定异常值的分数(OutlierFraction
0.05)。
Mdl = fitcsvm(壮举的(大小(功绩,1),1),…OutlierFraction = contaminationFraction,…KernelScale =“汽车”,规范= true);
Mdl
是一个ClassificationSVM
对象。
计算离群值的分数的壮举
通过使用resubPredict
函数。
[~,s_OCSVM] = resubPredict (Mdl);
负分数值表明,相应的观测是离群值。获得异常指标。
tf_OCSVM = s_OCSVM < 0;
画一个柱状图的分数值。
图直方图(s_OCSVM正常化=“概率”);参照线(0,“k -”,“阈值= 0”)标题(“OCSVM直方图异常分数”)
检查中发现异常数据的一部分。
OF_OCSVM = (tf_OCSVM) / N
OF_OCSVM = 0.0500
fitcsvm
训练支持向量机模型的偏差项这样的指定部分训练观察有负面分数。因此,OF_OCSVM
接近指定的分数值。
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);
情节的正常点和异常值的降低维度。比较三种方法的结果:隔离森林算法,OCSVM模型和健壮的距离robustcov
。
图tiledlayout (2, 2) nexttile gscatter (T (: 1), T (:, 2), tf_forest,“kr”,“方式”[],“关闭”)标题(“隔离森林”)nexttile (3) gscatter (T (: 1), T (:, 2), tf_OCSVM,“kr”,“方式”[],“关闭”)标题(“OCSVM”)nexttile (4) gscatter (T (: 1), T (:, 2), tf_robustcov,“kr”,“方式”[],“关闭”)标题(“健壮Mahalanobis距离”)l =传奇(“正常点”,“新”);l.Layout。瓦= 2;
新发现的三种方法在降低维度相互靠近。计算分数的异常值的三种方法的共同点。
总和(tf_forest * tf_OCSVM。* tf_robustcov) / N
ans = 0.0298
三种方法识别约3%的数据(的壮举
)作为离群值。
你也可以可视化观测值使用选择的两个最重要的特性fsulaplacian
函数。
idx = fsulaplacian(成绩);图t = tiledlayout (2, 2);nexttile gscatter(壮举:idx(1)),专长(:,idx (2)), tf_forest,“kr”,“方式”[],“关闭”)标题(“隔离森林”)nexttile (3) gscatter(壮举:idx(1)),专长(:,idx (2)), tf_OCSVM,“kr”,“方式”[],“关闭”)标题(“OCSVM”)nexttile (4) gscatter(壮举:idx(1)),专长(:,idx (2)), tf_robustcov,“kr”,“方式”[],“关闭”)标题(“Mahalanobis距离”)l =传奇(“正常点”,“新”);l.Layout。瓦= 2;包含(t,加入([“列”idx (1)])) ylabel (t)加入([“列”idx (2))))
新奇的检测
这个例子说明了三种无监督异常检测方法的工作流程(隔离森林,OCSVM, 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
看到下面成了一个支持金宝app向量机(OCSVM)
火车OCSVM模型通过使用fitcsvm
函数,然后在新数据通过使用检测异常预测
对象的功能。
看到下面成了训练金宝app支持向量机模型学习使用fitcsvm
函数。看到下面成了学习的函数列车模型的类标签变量是一个向量的。指定异常值的分数(OutlierFraction
)为0。
Mdl = fitcsvm (XTrain的(大小(XTrain, 1), 1), OutlierFraction = 0,…KernelScale =“汽车”,规范= true);
Mdl
是一个ClassificationSVM
对象。
计算离群值的分数XTrain
通过使用resubPredict
函数。
[~,s_OCSVM] = resubPredict (Mdl);
计算出新奇的分数XTest
通过使用预测
函数。
[~,sTest_OCSVM] =预测(Mdl XTest);
负分数值显示对应的观测异常。获得异常指标。
tfTest_OCSVM = sTest_OCSVM < 0;
绘制柱状图的分数值。
图直方图(s_OCSVM正常化=“概率”);持有在直方图(sTest_OCSVM正常化=“概率”);参照线(0,“k -”,“阈值= 0”)传说(“训练数据”,“新数据”位置=“最佳”)标题(“OCSVM直方图异常分数”)举行从
检查发现异常的部分测试数据。
NF_OCSVM = (tfTest_OCSVM) / nt
NF_OCSVM = 0.0707
显示异常的观测指标的测试数据。
idx_OCSVM =找到(tfTest_OCSVM)
idx_OCSVM =851×11061 1443 1444 1445 1447 1448 1449 1450 1451 1453⋮
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
比较检测到异常
可视化检测到异常,降低数据维度通过使用tsne
函数。
rng (“默认”)%的再现性T = tsne(壮举,规范= true,困惑= 100,夸张= 20);XTest2D = T (testIndices:);
绘制正常点降低了维数和小礼品。比较三种方法的结果:隔离森林算法,OCSVM模型,而距离泰姬陵
。
图tiledlayout (2, 2) nexttile gscatter (XTest2D (: 1), XTest2D (:, 2), tfTest_forest,“kr”,“方式”[],“关闭”)标题(“隔离森林”)nexttile (3) gscatter (XTest2D (: 1), XTest2D (:, 2), tfTest_OCSVM,“kr”,“方式”[],“关闭”)标题(“OCSVM”)nexttile (4) gscatter (XTest2D (: 1), XTest2D (:, 2), tfTest_mahal,“kr”,“方式”[],“关闭”)标题(“Mahalanobis距离”)l =传奇(“正常点”,“新”);l.Layout。瓦= 2;
隔离森林发现的新奇的算法(idx_forest
),发现的新奇Mahalanobis距离(idx_mahal
)是不同的,但是他们在减少维度相互靠近。
检查发现的新奇事物OCSVM包含隔离森林发现的新算法和距离。
ismember (idx_forest idx_OCSVM)
ans =逻辑1
ismember (idx_mahal idx_OCSVM)
ans =逻辑1
你也可以可视化观测值使用选择的两个最重要的特性fsulaplacian
函数。
idx = fsulaplacian ([XTrain;XTest]);图t = tiledlayout (2, 2);nexttile gscatter (XTest (:, idx (1)), XTest (:, idx (2)), tfTest_forest,“kr”,“方式”[],“关闭”)标题(“隔离森林”)nexttile (3) gscatter (XTest (:, idx (1)), XTest (:, idx (2)), tfTest_OCSVM,“kr”,“方式”[],“关闭”)标题(“OCSVM”)nexttile (4) gscatter (XTest (:, idx (1)), XTest (:, idx (2)), tfTest_mahal,“kr”,“方式”[],“关闭”)标题(“Mahalanobis距离”)l =传奇(“正常点”,“新”);l.Layout。瓦= 2;包含(t,加入([“列”idx (1)])) ylabel (t)加入([“列”idx (2))))
另请参阅
iforest
|isanomaly
|fitcsvm
|resubPredict
|预测
|robustcov
|pdist2
相关的话题
- 异常检测与隔离森林
- 模型相关的异常检测
- 使用三轴振动数据异常检测在工业机械(预测维护工具箱)