主要内容

无监督异常检测

这个话题介绍了多变量样本数据的无监督异常检测特征统计和机器学习工具箱™,并描述了工作流的功能异常值检测(在训练数据检测异常)新奇的检测在新数据(检测异常未被污染的训练数据)。

对于无标号多元样本数据,您可以通过使用隔离检测异常森林,看到下面成了一个支持向量机(OCSVM),和距离。金宝app这些方法检测异常值通过模型训练或学习参数。新奇的发现,你的火车模型或学习参数与未被污染的训练数据(数据没有异常值)和检测异常新数据通过训练或学习参数模型。

  • 与世隔绝的森林,与世隔绝的森林算法检测到异常,将他们孤立于使用一个正常点的孤立树。检测异常值使用iforest函数,发现新奇事物通过使用目标函数isanomaly

  • 看到下面成了一个支持金宝app向量机(OCSVM)看到下面成了一个学习或无监督方法,试图从原点在单独的数据转换后的高维空间预测指标。火车OCSVM模型通过使用fitcsvm函数,然后通过使用检测异常值和小礼品resubPredict预测对象的函数,分别。

  • Mahalanobis距离——如果样本数据遵循多元正态分布,然后方Mahalanobis距离样本的分布遵循卡方分布。因此,您可以使用的距离来检测异常基于卡方分布的关键值。对于异常值检测、使用robustcov函数来计算健壮的距离。对于新奇的检测,可以计算使用的距离robustcovpdist2功能。

异常值检测

这个例子说明了三种无监督异常检测方法的工作流程(隔离森林,OCSVM, Mahalanobis距离)为异常值检测。

加载数据

加载humanactivity的数据集,其中包含的变量的壮举actid。的变量的壮举包含24075年60特性的预测数据矩阵的观察,和响应变量actid包含活动id观测的整数。下面的例子使用了的壮举变量进行异常检测。

负载humanactivity

找到变量的大小的壮举

[N、D] =大小(专长)
N = 24075
D = 60

假设数据异常值的分数是0.05。

contaminationFraction = 0.05;

与世隔绝的森林

检测异常值使用iforest函数。

火车一个隔离森林模型通过使用iforest函数。指定异常值的分数(ContaminationFraction0.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]))标题(“隔离森林直方图异常分数”)

图包含一个坐标轴对象。坐标轴对象与标题直方图异常分数隔离森林包含2直方图类型的对象,constantline。

检查中发现异常数据的一部分。

OF_forest = (tf_forest) / N
OF_forest = 0.0496

离群值分数可以小于指定的分数(0.05)时,分数可以绑在阈值。

看到下面成了一个支持金宝app向量机(OCSVM)

火车OCSVM模型通过使用fitcsvm使用的函数,然后检测异常值resubPredict函数。

看到下面成了训练金宝app支持向量机模型学习使用fitcsvm函数。看到下面成了学习的函数列车模型的类标签变量是一个向量的。指定异常值的分数(OutlierFraction0.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直方图异常分数”)

图包含一个坐标轴对象。坐标轴对象与标题直方图的异常分数OCSVM包含2直方图类型的对象,constantline。

检查中发现异常数据的一部分。

OF_OCSVM = (tf_OCSVM) / N
OF_OCSVM = 0.0500

fitcsvm训练支持向量机模型的偏差项这样的指定部分训练观察有负面分数。因此,OF_OCSVM接近指定的分数值。

Mahalanobis距离

使用robustcov函数来计算健壮Mahalanobis距离和健壮的均值和协方差的估计数据。

计算出距离的壮举的分布的壮举通过使用robustcov函数。指定异常值的分数(OutlierFraction0.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 (“健壮的距离”)传说(“正常点”,“局外人”位置=“西北”)标题(“距离是阴谋”)

图包含一个坐标轴对象。坐标轴对象与标题距离情节包含5线类型的对象,constantline。这些对象代表正常点,离群值。

放大的轴的正常点。

xlim (10 [0]) ylim ([0 10])

图包含一个坐标轴对象。坐标轴对象与标题距离情节包含5线类型的对象,constantline。这些对象代表正常点,离群值。

如果一个数据集多元正态分布,然后数据点集群紧密大约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;

图包含3轴对象。坐标轴对象1标题隔离森林包含2线类型的对象。坐标轴对象2标题OCSVM包含2线类型的对象。坐标轴对象3标题健壮而距离包含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))))

图包含3轴对象。坐标轴对象1标题隔离森林包含2线类型的对象。坐标轴对象2标题OCSVM包含2线类型的对象。坐标轴对象3标题距离包含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]))传说(“训练数据”,“新数据”位置=“东南”)标题(“直方图异常分数隔离森林”)举行

图包含一个坐标轴对象。坐标轴对象与标题直方图异常分数隔离森林包含3直方图类型的对象,constantline。这些对象代表训练数据,新数据。

的异常分数分布测试数据与训练数据,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直方图异常分数”)举行

图包含一个坐标轴对象。坐标轴对象与标题直方图异常分数OCSVM包含3直方图类型的对象,constantline。这些对象代表训练数据,新数据。

检查发现异常的部分测试数据。

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距离直方图”)举行

图包含一个坐标轴对象。标题直方图的坐标轴对象Mahalanobis距离3类型的对象包含直方图,constantline。这些对象代表训练数据,新数据。

检查发现异常的部分测试数据。

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;

图包含3轴对象。坐标轴对象1标题隔离森林包含2线类型的对象。坐标轴对象2标题OCSVM包含2线类型的对象。坐标轴对象3标题距离包含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))))

图包含3轴对象。坐标轴对象1标题隔离森林包含2线类型的对象。坐标轴对象2标题OCSVM包含2线类型的对象。坐标轴对象3标题距离包含2线类型的对象。这些对象代表正常点,小礼品。

另请参阅

||||||

相关的话题