主要内容

isanomaly

使用当地发现异常数据离群值的因素

自从R2022b

    描述

    例子

    特遣部队= isanomaly (LOFObj,资源描述)表中发现异常资源描述使用LocalOutlierFactor对象LOFObj并返回逻辑数组特遣部队的元素是真正的在检测到异常时在相应的行资源描述。如果您创建您必须使用这种语法LOFObj通过一个表lof函数。

    特遣部队= isanomaly (LOFObj,X)发现异常的矩阵X。如果您创建您必须使用这种语法LOFObj通过矩阵的lof函数。

    例子

    特遣部队= isanomaly (___ScoreThreshold =scoreThreshold)指定的阈值异常分数,除了任何输入参数组合在前面的语法。isanomaly确定观测分数scoreThreshold异常。

    (特遣部队,分数)= isanomaly (___)还返回一个异常分数,这是一个局部离群因子价值,为每一个观察资源描述X。得分值小于或接近1表示一个正常的观察,和一个值大于1也可以显示出异常。

    例子

    全部折叠

    创建一个LocalOutlierFactor未被污染的培训对象观察使用lof函数。然后检测小礼品(新数据异常)通过对象和新的数据对象的功能isanomaly

    1994年的人口普查数据加载存储census1994.mat。数据集由人口数据来自美国人口普查局预测一个人是否使每年超过50000美元。

    负载census1994

    census1994包含了训练数据集adultdata和测试数据集成人。预测数据必须连续或所有分类培训LocalOutlierFactor对象。删除非数字变量adultdata成人

    adultdata = adultdata (:, vartype (“数字”));成人=成人(:,vartype (“数字”));

    培训当地的离群值因子模型adultdata。假设adultdata不包含异常值。

    [Mdl, tf, s] = lof (adultdata);

    Mdl是一个LocalOutlierFactor对象。lof还返回异常指标特遣部队和异常分数年代的训练数据adultdata。如果你不指定ContaminationFraction名称参数值大于0,lof对待所有正常训练观察观察,这意味着所有的值特遣部队是逻辑0 ()。这个函数设置分数阈值最大的分数值。显示阈值。

    Mdl.ScoreThreshold
    ans = 28.6719

    发现异常成人通过训练当地异常因素模型。

    [tf_test, s_test] = isanomaly (Mdl,成人);

    isanomaly函数的作用是:返回异常指标tf_test和分数s_test成人。默认情况下,isanomaly确定观测分数高于阈值(Mdl.ScoreThreshold)异常。

    创建直方图异常分数年代s_test。创建一个垂直线阈值的异常分数。

    h1 =直方图(年代,NumBins = 50,标准化=“概率”);持有h2 =直方图(s_test h1.BinEdges正常化=“概率”);参照线(Mdl.ScoreThreshold“r -”,加入([“阈值”h1.Parent Mdl.ScoreThreshold]))。YScale =“日志”;h2.Parent。YScale =“日志”;传奇(“训练数据”,“测试数据”位置=“北”)举行

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

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

    找到(tf_test)
    ans = 0 x1空双列向量

    的异常分数分布测试数据与训练数据,isanomaly没有发现任何异常的测试数据默认阈值。您可以指定一个不同的阈值使用ScoreThreshold名称-值参数。例如,看到的指定异常分数阈值

    指定的阈值异常分数通过使用ScoreThreshold名称-值参数isanomaly

    1994年的人口普查数据加载存储census1994.mat。数据集由人口数据来自美国人口普查局预测一个人是否使每年超过50000美元。

    负载census1994

    census1994包含了训练数据集adultdata和测试数据集成人

    删除非数字变量adultdata成人

    adultdata = adultdata (:, vartype (“数字”));成人=成人(:,vartype (“数字”));

    培训当地的离群值因子模型adultdata

    [Mdl, tf,分数]= lof (adultdata);

    画一个柱状图的分数值。在默认的分数阈值创建一条垂直线。

    h =直方图(分数,NumBins = 50,标准化=“概率”);h.Parent。YScale =“日志”;参照线(Mdl.ScoreThreshold“r -”,加入([“阈值”Mdl.ScoreThreshold]))

    图包含一个坐标轴对象。坐标轴对象包含2直方图类型的对象,constantline。

    发现异常的测试数据使用训练有素的局部离群因子模型。使用不同的阈值从默认阈值时获得培训当地的离群值因子模型。

    首先,确定分数阈值使用isoutlier函数。

    [~,~,U] = isoutlier(分数)
    U = 1.1567

    指定的值ScoreThreshold名称-值参数为U

    [tf_test, scores_test] = isanomaly (Mdl、成人ScoreThreshold = U);h =直方图(scores_test NumBins = 50,标准化=“概率”);h.Parent。YScale =“日志”;参照线(U,“r -”,加入([“阈值”U]))

    图包含一个坐标轴对象。坐标轴对象包含2直方图类型的对象,constantline。

    生成一个样本数据集,其中包含异常值。计算点的异常分数通过使用示例数据isanomaly功能,并创建一个等高线图的异常分数。然后,检查培训本地离群值模型的性能通过绘制precision-recall曲线。

    使用高斯相关随机生成数据点的二维分布。

    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;

    火车模型通过使用当地异常因素lof函数。设置异常的部分训练观察到0.05。获得更好的性能,您也可以修改局部离群因子算法选项通过指定名称参数,如SearchMethod,NumNeighbors,距离。在这种情况下,指定要使用最近的邻居的数量是40。

    [LOFObj, tf,分数]= lof (u ContaminationFraction = 0.05 NumNeighbors = 40);

    计算二维网格坐标的异常分数训练观察通过训练模型和局部异常因素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 (LOFObj (X1 (:), X2 (:)));scores_grid =重塑(scores_grid、大小(X1, 1),大小(X2, 2));

    创建一个散点图的训练观察和等高线图的异常分数。标志真正的离群值和异常值探测到lof

    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举行

    图包含一个坐标轴对象。坐标轴对象包含4类型的对象分散,轮廓。这些对象代表正常点,离群值,发现离群值。

    检查培训本地离群因子模型的性能通过绘制precision-recall曲线和计算曲线下的面积(AUC)值。创建一个rocmetrics对象。rocmetrics计算假阳性利率和真实积极的利率(或召回)默认情况下。指定AdditionalMetrics另外名称参数计算精度值(或阳性预测值)。

    rocObj = rocmetrics (true_tf,分数,真的,AdditionalMetrics =“PositivePredictiveValue”);

    通过绘制曲线情节的函数rocmetrics。指定y设在度量精度(或阳性预测值)和x设在度量回忆(或真阳性率)。显示一个实心圆模型对应于操作点LOFObj.ScoreThreshold。计算precision-recall曲线下的面积使用的梯形法trapz功能,并显示传说中的值。

    (rocObj YAxisMetric = r =阴谋“PositivePredictiveValue”XAxisMetric =“TruePositiveRate”);持有idx =找到(rocObj.Metrics.Threshold > = LOFObj.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曲线”)举行

    图包含一个坐标轴对象。坐标轴对象与标题Precision-Recall曲线,包含召回,ylabel精度包含2 roccurve类型的对象,散射。这些对象代表真正的(AUC = 0.74752),真正的模型操作点。

    输入参数

    全部折叠

    训练当地的异常因素模型,指定为一个LocalOutlierFactor对象。

    预测数据,指定为一个表。每一行的资源描述对应于一个观察,每一列对应一个预测变量。多列变量和细胞数组以外的细胞阵列的特征向量是不允许的。

    如果你训练LOFObj使用一个表,那么您必须提供预测数据通过使用资源描述,而不是X。所有的预测变量资源描述必须有相同的变量名和数据类型的训练数据。然而,列顺序资源描述不需要训练数据对应的列顺序。

    数据类型:

    预测数据,指定为一个数字矩阵。每一行的X对应于一个观察,每一列对应一个预测变量。

    如果你训练LOFObj使用一个矩阵,那么你必须通过提供预测数据X,而不是资源描述。的变量的列X必须有相同的订单作为训练数据。

    数据类型:|

    阈值的异常分数,指定为负的标量。isanomaly确定观测与分数高于阈值异常。

    默认值是ScoreThreshold属性值的LOFObj

    例子:ScoreThreshold = 0.5

    数据类型:|

    输出参数

    全部折叠

    异常指标,作为一个逻辑返回列向量。一个元素的特遣部队真正的当观察相应的行资源描述X是一个异常,否则。特遣部队一样的长度吗资源描述X

    isanomaly标识的观察与分数高于阈值(ScoreThreshold作为异常值)。

    异常的评分(局部离群因子值),作为一个数字列向量返回的值是负的。分数一样的长度吗资源描述X的每个元素分数包含一个观测的异常分数对应的行资源描述X。得分值小于或接近1可以显示正常的观察,和一个值大于1也可以显示出异常。

    更多关于

    全部折叠

    局部离群因子

    当地的离群值因子(LOF)算法检测异常基于观察的相对密度对周围的邻居。

    该算法找到了k最近的邻居的观察和计算当地的可达性密度的观察和邻国。当地的离群值的因素是平均密度比观察到它的邻居。也就是说,当地的异常因素的观察p

    l O F k ( p ) = 1 | N k ( p ) | o N k ( p ) l r d k ( o ) l r d k ( p ) ,

    在哪里

    • k(·)是一个观察的地方可达性密度。

    • Nk(p)代表了k最近的邻居的观察p。您可以指定IncludeTies名称-值参数为真正的包括所有的邻居的距离值相等kth最小距离,或指定包括确切的k邻居。默认的IncludeTies的价值lof更高效的性能。请注意,该算法[1]使用所有的邻居。

    • |Nk(p)|观察的数量吗Nk(p)

    正常观测,局部离群因子值小于或接近于1,表明当地的可达性密度的观察是高于或相似的邻国。局部离群因子值大于1也可以显示出异常。的ContaminationFraction的观点lofScoreThreshold的观点isanomaly控制局部离群因子的阈值。

    该算法基于距离可达性措施的密度。距离可达性的观察p对观察o被定义为

    d ˜ k ( p , o ) = 马克斯 ( d k ( o ) , d ( p , o ) ) ,

    在哪里

    • dk(o)kth最小距离之间的距离观察o它的邻国。

    • d(p,o)是观察之间的距离p和观察o

    该算法使用了可达性距离减少统计波动d(p,o)靠近观察o

    当地的可达性密度的观察p是平均可达性的倒数距离观察吗p它的邻国。

    l r d k ( p ) = 1 / o N k ( p ) d ˜ k ( p , o ) | N k ( p ) |

    可以无限密度值如果副本的数量大于邻居的数量(k)。因此,如果训练数据包含重复的,lofisanomaly函数使用加权的局部离群值因子(WLOF)算法。该算法计算加权当地异常因素使用加权密度可达性(wlrd)。

    W l O F k ( p ) = 1 o N k ( p ) w ( o ) o N k ( p ) w l r d k ( o ) w l r d k ( p ) ,

    在哪里

    w l r d k ( p ) = 1 / o N k ( p ) w ( o ) d ˜ k ( p , o ) o N k ( p ) w ( o ) ,

    w(o)观察是副本的数量吗o在训练数据。后计算权重值,该算法将每组重复观测。

    算法

    • 计算局部离群因子值(分数为每个观察)资源描述X,isanomaly找到了k最近的邻居中存储的训练观察X财产的LocalOutlierFactor对象。

    • isanomaly认为,(空字符向量),”“(空字符串),<失踪>,<定义>资源描述X缺失值。

      • isanomaly不使用观察用缺失值。

      • isanomaly分配的异常分数和异常的指标(逻辑0)与失踪的观察值。

    引用

    [1]Breunig,马库斯·M。,et al. “LOF: Identifying Density-Based Local Outliers.”学报2000年ACM SIGMOD国际会议管理的数据,2000年,页93 - 104。

    版本历史

    介绍了R2022b