主要内容

无监督异常检测

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

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

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

  • 随机的森林——切鲁棒随机森林减少算法分类点作为一个正常点的或反常的基于模型的变化引入的复杂性。类似于隔离森林算法,健壮的随机森林算法构建一个整体的树木。这两个算法的差异表现在他们选择在树木和分离变量如何定义异常分数。检测异常值使用rrcforest函数,发现新奇事物通过使用目标函数isanomaly

  • ——当地异常因素局部离群因子(LOF)算法检测到异常基于观察的相对密度对周围的邻居。检测异常值使用lof函数,发现新奇事物通过使用目标函数isanomaly

  • 看到下面成了一个支持金宝app向量机(SVM)看到下面成了一个支持向量机或无监督方法,试图从原点在单独的数据转换后的高维空间预测指标。检测异常值使用ocsvm函数,发现新奇事物通过使用目标函数isanomaly

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

异常值检测

这个例子说明了五个无监督异常检测方法的工作流(隔离森林,健壮的随机森林减少,局部离群值的因素,看到下面成了支持向量机,和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)当分数与阈值。

鲁棒随机森林减少

检测异常值使用rrcforest函数。

火车通过削减健壮的随机森林模型rrcforest函数。指定异常值的分数(ContaminationFraction0.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]))标题(“直方图异常分数的方法来实现鲁棒随机森林”)

图包含一个坐标轴对象。坐标轴对象与标题直方图异常分数的方法来实现鲁棒随机削减森林2类型的对象包含直方图,constantline。

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

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]))标题(“直方图异常分数为当地异常因素”)

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

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

OF_lof = (tf_lof) / N
OF_lof = 0.0500

看到下面成了一个支持向量机

检测异常值使用ocsvm函数。

火车通过看到下面成了一个支持向量机模型ocsvm函数。指定异常值的分数(ContaminationFraction0.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直方图异常分数”)

图包含一个坐标轴对象。坐标轴对象与标题直方图的异常分数看到下面成了SVM包含2直方图类型的对象,constantline。

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

OF_OCSVM = (tf_OCSVM) / N
OF_OCSVM = 0.0500

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 (“健壮的距离”)传说(“正常点”,“局外人”位置=“西北”)标题(“距离是阴谋”)

图包含一个坐标轴对象。坐标轴对象与标题距离是情节,包含Mahalanobis距离,ylabel健壮的距离包含5线类型的对象,constantline。一个或多个行显示的值只使用这些对象标记代表正常点,离群值。

放大的轴的正常点。

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

图包含一个坐标轴对象。坐标轴对象与标题距离是情节,包含Mahalanobis距离,ylabel健壮的距离包含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);

情节的正常点和异常值的降低维度。比较结果的五个方法:隔离森林算法鲁棒随机森林算法,局部离群因子算法,看到下面成了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;

图包含5轴对象。坐标轴对象1标题隔离森林包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象2标题健壮的随机削减森林包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象3 2标题局部离群因子包含对象类型的线。一个或多个行显示的值只使用SVM包含标记轴对象4标题看到下面成了2线类型的对象。一个或多个行显示它的值只使用标记轴对象与标题5健壮而距离包含2线类型的对象。一个或多个行显示的值只使用这些对象标记代表正常点,离群值。

五个方法附近发现的新奇事物彼此减少维度。

你也可以可视化观测值使用选择的两个最重要的特性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))))

图包含5轴对象。坐标轴对象1标题隔离森林包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象2标题健壮的随机削减森林包含2线类型的对象。一个或多个行显示它的值只使用标记轴对象3 2标题局部离群因子包含对象类型的线。一个或多个行显示的值只使用SVM包含标记轴对象4标题看到下面成了2线类型的对象。一个或多个行显示它的值只使用标记轴对象与标题5距离包含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]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“直方图异常分数隔离森林”)举行

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

的异常分数分布测试数据与训练数据,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]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“直方图异常分数的方法来实现鲁棒随机森林”)举行

图包含一个坐标轴对象。坐标轴对象与标题直方图异常分数的方法来实现鲁棒随机削减森林3类型的对象包含直方图,constantline。这些对象代表训练数据,测试数据。

的异常分数分布测试数据与训练数据,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]))传说(“训练数据”,“测试数据”位置=“东南”)标题(“直方图异常分数为当地异常因素”)举行

图包含一个坐标轴对象。坐标轴对象与标题直方图异常分数为当地异常因素包含3直方图类型的对象,constantline。这些对象代表训练数据,测试数据。

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

图包含一个坐标轴对象。坐标轴对象的标题直方图异常分数看到下面成了SVM包含3直方图类型的对象,constantline。这些对象代表训练数据,测试数据。

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

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

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

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

NF_mahal = (tfTest_mahal) / nt
NF_mahal = 8.3077 e-05

显示异常的观测指标的测试数据。

idx_mahal =找到(tfTest_mahal)
idx_mahal = 3654

另请参阅

|||||||||

相关的话题