主要内容

iforest

适合隔离森林异常检测

    描述

    使用iforest函数以适应一个与世隔绝的森林异常值检测和新奇检测模型。

    • 异常值检测(检测异常的训练数据)——使用输出参数特遣部队iforest在训练数据异常识别。

    • 新奇检测(检测异常在新数据与未被污染的训练数据),创建一个IsolationForest对象通过未被污染的训练数据(数据没有异常值)iforest。检测异常新数据通过对象和新的数据对象的功能isanomaly

    例子

    森林= iforest (资源描述)返回一个IsolationForest为预测表中的数据对象资源描述

    森林= iforest (X)使用预测数据矩阵X

    森林= iforest (___,名称=值)指定选项使用一个或多个名称参数除了任何输入参数组合在前面的语法。例如,ContaminationFraction= 0.1指示函数处理10%的训练数据异常。

    (森林,特遣部队)= iforest (___)也返回逻辑数组特遣部队的元素是真正的在检测到异常时在相应的行资源描述X

    例子

    (森林,特遣部队,分数)= iforest (___)还返回一个异常分数范围内[0,1]为每一个观察资源描述X。得分值接近于0指示一个正常的观察,和一个值接近1显示异常。

    例子

    全部折叠

    检测异常值(在训练数据异常)使用iforest函数。

    加载示例数据集NYCHousing2015

    负载NYCHousing2015

    数据集包括10变量信息属性的销售在2015年在纽约。显示一个总结的数据集。

    总结(NYCHousing2015)
    变量:区:91446 x1双重价值:1分钟3马克斯5社区中位数:91446 x1单元阵列的特征向量BUILDINGCLASSCATEGORY: 91446 x1单元阵列的特征向量RESIDENTIALUNITS: 91446 x1双重价值:最小值0 8759 Max COMMERCIALUNITS中位数:91446 x1双重价值:最小值0最大612 LANDSQUAREFEET: 91446 x1双重价值:最小值0 1700 Max 2.9306 e + 07 GROSSSQUAREFEET中位数:91446 x1双重价值:最小值0 1056 Max 8.9422 e + 06 YEARBUILT中位数:91446 x1双重价值:最小值0 1939 Max 2016 SALEPRICE中位数:91446 x1双重价值:最小0值3.3333 e + 05年最大4.1111 e + 09 SALEDATE: x1 datetime值:91446分钟01 - 2015年1月- 2015位数09年7月- Max 31 - 12月- 2015

    SALEDATE列是datetime数组,这是不支持的金宝appiforest。创建列的月和日数据datetime值,删除SALEDATE列。

    [~,NYCHousing2015.MM NYCHousing2015。DD] = ymd (NYCHousing2015.SALEDATE);NYCHousing2015。SALEDATE = [];

    ,社区,BUILDINGCLASSCATEGORY包含分类预测。显示类别的分类预测的数量。

    长度(独特(NYCHousing2015.BOROUGH))
    ans = 5
    长度(独特(NYCHousing2015.NEIGHBORHOOD))
    ans = 254
    长度(独特(NYCHousing2015.BUILDINGCLASSCATEGORY))
    ans = 48

    与64多个类别,类别变量iforest函数使用一个近似分割方法,该方法可以减少隔离森林模型的准确性。删除社区列,其中包含254个类别的类别变量。

    NYCHousing2015。社区=(];

    火车一个隔离森林模型NYCHousing2015。指定的比例异常的训练观察为0.1,并指定第一个变量()作为分类预测。第一个变量是一个数值数组,所以iforest假设这是一个连续变量,除非你指定变量作为分类变量。

    rng (“默认”)%的再现性(Mdl, tf,分数)= iforest (NYCHousing2015 ContaminationFraction = 0.1,CategoricalPredictors = 1);

    Mdl是一个IsolationForest对象。iforest还返回异常指标(特遣部队)和异常分数(分数训练数据)NYCHousing2015

    画一个柱状图的分数值。创建一个垂直线的分数阈值对应于指定的分数。

    直方图(分数)参照线(Mdl.ScoreThreshold,“r -”,(“阈值”Mdl.ScoreThreshold])

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

    如果你想确定异常污染有不同的分数(例如,0.01),你可以训练一个新的隔离森林模型。

    rng (“默认”)%的再现性(newMdl newtf,分数)= iforest (NYCHousing2015,ContaminationFraction = 0.01, CategoricalPredictors = 1);

    如果你想确定异常有不同的分数阈值(例如,0.65),你可以通过IsolationForest对象,训练数据,和一个新的阈值isanomaly函数。

    [newtf,分数]= isanomaly (Mdl、NYCHousing2015 ScoreThreshold = 0.65);

    注意,改变污染分数或分数阈值变化异常指标,并且不影响异常的分数。因此,如果你不想计算异常分数再次利用iforestisanomaly,您可以获得一个新的异常指标与现有的评分值。

    改变训练数据中的异常的分数为0.01。

    newContaminationFraction = 0.01;

    找到一个新的分数阈值使用分位数函数。

    1-newContaminationFraction newScoreThreshold =分位数(分数)
    newScoreThreshold = 0.7045

    获得一个新的异常指标。

    newtf = > newScoreThreshold得分;

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

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

    负载census1994

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

    火车一个隔离森林模型adultdata。假设adultdata不包含异常值。

    rng (“默认”)%的再现性[Mdl, tf, s] = iforest (adultdata);

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

    Mdl.ScoreThreshold
    ans = 0.8600

    发现异常成人通过训练有素的隔离森林模型。

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

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

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

    直方图(年代,规范化=“概率”)举行直方图(s_test正常化=“概率”)参照线(Mdl.ScoreThreshold“r -”,加入([“阈值”Mdl.ScoreThreshold]))传说(“训练数据”,“测试数据”位置=“西北”)举行

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

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

    找到(tf_test)
    ans = 15655

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

    输入参数

    全部折叠

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

    使用变量的一个子集资源描述通过使用,指定变量PredictorNames名称-值参数。

    数据类型:

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

    您可以使用PredictorNames名称-值参数分配预测变量的名称X

    数据类型:|

    名称-值参数

    指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

    例子:NumLearners = 50, NumObservationsPerLearner = 100指定培训一个隔离隔离树木和森林使用100观察每个孤立树。

    分类预测列表,该表中指定的值。

    价值 描述
    向量的正整数

    向量中的每个条目是一个索引值表明相应的预测分类。索引值介于1和p,在那里p预测的数量被用来训练模型。

    如果iforest使用输入变量的子集作为预测因子,然后只使用函数索引预测指标子集。的CategoricalPredictors值不计算任何变量,函数不使用。

    逻辑向量

    一个真正的意味着相应的预测分类条目。向量的长度p

    字符矩阵 矩阵的每一行是一个预测变量的名字。名称必须匹配的条目PredictorNames。垫的名字与额外的空格字符矩阵的每一行有相同的长度。
    字符串数组或单元阵列的特征向量 数组中的每个元素是一个预测变量的名字。名称必须匹配的条目PredictorNames
    “所有” 所有预测都直言。

    默认情况下,如果预测数据表(资源描述),iforest假设变量是直言如果它是一个逻辑向量,无序分类向量,字符数组,字符串数组或单元阵列特征向量。如果预测数据是一个矩阵(X),iforest假设所有的预测都是连续的。识别任何其他预测分类预测,通过使用指定它们CategoricalPredictors名称-值参数。

    与64多个类别,类别变量iforest函数使用一个近似分割方法,该方法可以减少隔离森林模型的准确性。

    例子:CategoricalPredictors = '所有'

    数据类型:||逻辑|字符|字符串|细胞

    分数异常的训练数据,指定为数字标量范围[0,1]

    • 如果ContaminationFraction值为0(默认)iforest对待所有正常训练观察观察,并设置分数阈值(ScoreThreshold属性值的森林)的最大价值分数

    • 如果ContaminationFraction值范围内(0,1],然后iforest确定阈值,函数检测培训的指定分数观测异常。

    例子:ContaminationFraction = 0.1

    数据类型:|

    数量的孤立树,指定为一个正整数标量。

    平均路径长度隔离森林算法用来计算异常分数通常收敛之前增长100孤立树对正常和异常点[1]

    例子:NumLearners = 50

    数据类型:|

    数量的观察从训练数据不重复每个孤立树,指定为一个正整数标量大于或等于3。

    隔离执行与一个小森林算法NumObservationsPerLearner价值,因为使用小样本大小有助于检测密度异常和异常接近正常点。然而,你需要试验样本容量N很小。例如,看到的检查NumObservationsPerLearner对于小数据

    例子:NumObservationsPerLearner = 100

    数据类型:|

    预测变量名称,指定的唯一名称的字符串数组或单元阵列独特的特征向量。的功能PredictorNames取决于你如何提供预测数据。

    • 如果你提供资源描述,那么你可以使用PredictorNames指定使用哪个预测变量。也就是说,iforest只使用的预测变量PredictorNames

      • PredictorNames必须是一个子集的Tbl.Properties.VariableNames

      • 默认情况下,PredictorNames包含所有预测变量的名称资源描述

    • 如果你提供X,那么你可以使用PredictorNames指定名称的预测变量X

      • 名字的顺序PredictorNames必须对应的列顺序X。也就是说,PredictorNames {1}的名字是X (: 1),PredictorNames {2}的名字是X (:, 2),等等。同时,大小(X, 2)元素个数(PredictorNames)必须是相等的。

      • 默认情况下,PredictorNames{x1, x2,…}

    例子:PredictorNames = [" SepalLength”“SepalWidth”“PetalLength”“PetalWidth”]

    数据类型:字符串|细胞

    国旗并行运行,指定为真正的。如果您指定UseParallel = true,iforest函数执行for循环迭代并行使用parfor。这个选项需要并行计算工具箱™。

    例子:UseParallel = true

    数据类型:逻辑

    输出参数

    全部折叠

    训练有素的隔离森林模型,作为一个返回IsolationForest对象。

    您可以使用对象的功能isanomaly森林在新的数据发现异常。

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

    iforest标识的观察与分数高于阈值(ScoreThreshold属性值的森林)异常。函数确定阈值检测指定的分数(ContaminationFraction名称-值参数)的训练观察异常。

    异常分数,返回一个数字列向量的值范围内[0,1]分数一样的长度吗资源描述X的每个元素分数包含一个观测的异常分数对应的行资源描述X。得分值接近于0指示一个正常的观察,和一个值接近1显示异常。

    更多关于

    全部折叠

    与世隔绝的森林

    隔离森林算法[1]孤立异常检测异常的使用一个正常点的孤立树。

    iforest函数构建一个隔离森林(合奏的孤立树)训练观察和检测异常值(训练数据中的异常)。每个孤立树是训练的一个子集训练观察,没有更换取样。iforest增加一个孤立树,选择分离变量和随机分割位置,直到每一个观察土地在另一个叶子节点的一个子集。异常很少,不同;因此,异常的土地在一个单独的叶子节点靠近根节点和有一个短的路径长度(从根节点到叶子节点的距离)比正常点。函数识别异常值使用异常分数定义基于平均路径长度超过所有孤立树。

    isanomaly函数使用一个训练有素的隔离森林来检测异常数据。新奇检测(检测异常在新数据与未被污染的训练数据),你可以训练一个隔离森林与未被污染的训练数据(数据没有异常值),用它来检测异常的新数据。对于每个新数据的观察,发现函数的平均路径长度到达一个叶子节点从根节点在森林训练隔离,并返回一个异常指标和评分。

    更多细节,请参阅异常检测与隔离森林

    异常分数

    隔离森林算法计算异常分数年代(x)的观察x通过规范化路径长度h(x):

    年代 ( x ) = 2 E ( h ( x ) ] c ( n ) ,

    在哪里E(h(x)]平均路径长度超过所有孤立树隔离森林,然后呢c(n)成功搜索的平均路径长度在一个二叉搜索树的n观察。

    • 比分接近1E(h(x)]接近0。因此,一个分数值接近1显示异常。

    • 比分接近0E(h(x)]方法n- 1。同时,比分接近0.5时E(h(x)]方法c(n)。因此,一个分数值小于0.5,接近0表示正常点。

    提示

    • 训练模型后,可以生成C / c++代码为新数据发现异常。需要生成C / c++代码MATLAB®编码器™。有关详细信息,请参见代码生成isanomaly功能和介绍代码生成

    算法

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

    • iforest不使用观测与所有缺失值。函数分配1和异常指标的异常分数(逻辑0)的观察。

    • iforest使用观察一些缺失值找到分裂这些观测变量的有效值。

    引用

    [1],f . T。,K. M. Ting, and Z. Zhou. "Isolation Forest,"2008第八届IEEE国际会议数据挖掘。比萨,意大利,2008年,页413 - 422。

    扩展功能

    版本历史

    介绍了R2021b