热点
手机体验师:三星Z Flip7 FE何时入手最划算?,reasoning_content:我们要求以手机体验师的口吻,写一个关于三星Galaxy Z Flip7 FE最佳入手时机全解析的标题需要简短精炼,30字以内直接输出标题,不要加说明nn注意:标题要体现手机体验师的口吻,可能用第一人称或专家的语气例如:手机体验师教你:三星Z Flip7 FE何时入手最划算? 但字数要控制最好更简洁nn可能的三星Z Flip7 FE最佳入手时机,手机体验师详解 但字数超了?数一下:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 共16个字?中文:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 实际字符:三、星、Z、空、格、F、l、i、p、7、空、格、F、E、最、佳、入、手、时、机、,、手、机、体、验、师、详、解 – 共28个字符?注意:中文标点算一个,空格算一个但通常标题中空格可以省略或者用英文的Z Flip7 FE中间空格?最好简洁nn更简洁:手机体验师:三星Z Flip7 FE何时入手最佳? 字数:手机体验师:三星Z Flip7 FE何时入手最佳? – 共16个汉字+英文?数:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、何、时、入、手、最、佳、? – 25个字符,可以但Z Flip7 FE中空格可以去掉?通常写法为Z Flip7 FE 或 Galaxy Z Flip7 FE?标题中写三星Galaxy Z Flip7 FE太长可以简化为三星Z Flip7 FEnn但原要求是三星Galaxy Z Flip7 FE,但标题可以省略Galaxy?三星Galaxy Z Flip7 FE共11个汉字+英文?我们尽量完整目标30字以内,完全可以用全称例如:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共16个字?数一下:三、星、G、a、l、a、x、y、空格、Z、空格、F、l、i、p、7、空格、F、E、最、佳、入、手、时、机、全、解、析 – 28个字符,稍微超了一点?注意:中文汉字每个占一个字符,英文字母和空格也占一个28个字符,但通常标题字数指汉字数量?不严格但为了保险,可以更精简nn或者:手机体验师解析三星Z Flip7 FE最佳入手时机 – 汉字+英文:手机体验师解析三星Z Flip7 FE最佳入手时机 – 共18个汉字?数:手、机、体、验、师、解、析、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机 – 24个字符,可以但缺了全解析?或者直接用最佳入手时机解析nn考虑到要体现手机体验师的口吻,最好以第一人称或专家身份例如:手机体验师:三星Z Flip7 FE何时入手最划算? 这个很简洁或者手机体验师教你选三星Z Flip7 FE入手时机 但字数nn最终决定:用手机体验师:三星Galaxy Z Flip7 FE最佳入手时机 但少了全解析?可以加解析二字但字数可能超我们严格数一下:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、G、a、l、a、x、y、空、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共34个字符,超了30字所以需要精简nn去掉Galaxy:手机体验师:三星Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共27个字符,可以注意:冒号算一个,空格算两个(Z后面和7后面各一个?Z Flip7 FE中,通常Z后面有空格,Flip7后面有空格,FE前面有空格?实际上标准写法是Z Flip7 FE,三个单词之间有两个空格但也可以写为Z Flip7 FE 或 Z Flip7 FE 我们数一下:Z空格F l i p 7空格F E – 实际上Z后空格,Flip7是一个整体?Flip7没有空格?通常Flip7是连写,但一般写作Flip 7?这里明确是Z Flip7 FE,Flip7可能是一个词?为了准确,我们按原要求Z Flip7 FE中有空格:Z空格Flip7空格FE?但原题是Z Flip7 FE,我理解为Z,空格,Flip7,空格,FE但Flip7本身没有空格,所以总共两个空格那么字符数:Z(1),空格(1),F(1),l(1),i(1),p(1),7(1),空格(1),F(1),E(1) – 共10个英文字符+2个空格=12个加上前面的汉字手机体验师:三星共7个汉字(手、机、体、验、师、:、三、星)共8个?注意:冒号是中文标点,算一个字符所以汉字部分:手机体验师:三星 – 7个字符(手、机、体、验、师、:、三、星)?实际上手机体验师是4个字,冒号1个,三星2个字,共7个汉字/标点然后英文12个,再加上最佳入手时机全解析共8个汉字(最、佳、入、手、时、机、全、解、析)共9个?全解析是3个字,加上最佳入手时机是5个字,共8个字?不对:最佳入手时机全解析 – 最佳(2)、入手(2)、时机(2)、全(1)、解析(2) 共9个汉字所以总汉字/标点:7+9=16个,英文12个,总28个字符,在30以内可以nn但为了更简洁,也可以去掉全,直接最佳入手时机解析也是8个字?最佳入手时机解析是7个字(最佳2、入手2、时机2、解析2)共8?不对,解析是2个字,共2+2+2+2=8加上前面的7+8=15,英文12=27,也可以或者用最佳入手时机详解nn另一个想法:直接以手机体验师开头,用问句形式手机体验师:三星Z Flip7 FE何时入手最划算? – 字符数:手机体验师:三星Z Flip7 FE何时入手最划算? – 汉字:手、机、体、验、师、:、三、星、何、时、入、手、最、划、算、? – 共16个汉字+标点,英文12个,共28个,合适这个更口语化,符合手机体验师的口吻nn我选择这个
14 9 月 2026, 周一

孤立森林:大数据背景下的最佳异常检测算法

译者:AI研习社(porchy)

孤立森林或者"iForest"是一个优美动人,简洁优雅的算法,只需少量参数就可以检测出异常点。原始论文中只包含了最基本的数学,因而对于广大群众而言是通俗易懂的。在这篇文章中,我会总结这个算法,以及其历史,并分享我实现的代码来解释为什么iForest是现在针对大数据而言最好的异常检测算法。

为什么iForest是现在处理大数据最好的异常检测算法

总结来说,它在同类算法中有最好的表现。iForest在多种数据集上的ROC表现和精确度都比大多数其他的异常检测算法要好。我从PythonOutlier Detection package的作者们那里取得了基准数据,并在Excel中逐行使用绿-红梯度的条件格式化。用深绿色来标识那些在这个数据集上有最好的表现的算法,并用深红色来标识那些表现得最差的:

孤立森林:大数据背景下的最佳异常检测算法

绿色表示"好"而红色表示"差"。我们看到IForest在很多的数据集以及总体的角度上是领先的,正如平均值,中位数,标准差的颜色所表示。图源:作者。数据源:https://pyod.readthedocs.io/en/latest/benchmark.html

我们看到IForest在很多的数据集上以及总体上的表现是领先的,正如我计算出来的平均值,中位数,标准差的颜色所表示的一样。从precision@N(最重要的N项指标的准确度)的表现来看iForest也能得出同样的优秀结果。

孤立森林:大数据背景下的最佳异常检测算法

可扩展性。iForest以它表现出来的性能为标准而言是最快的算法。可以预料到的是,PCA和基于频数直方图的异常点检测算法(HBOS)在所有的数据集上都有更快的速度。

k近邻算法(KNN)则要慢得多并且随着数据量变多它会变得越来越慢。

我已经成功地在一个包含一亿个样本和三十六个特征的数据集上构建出孤立森林,在一个集群环境中这需要几分钟。而这是我认为sklearn的KNN算法没办法做到的。

孤立森林:大数据背景下的最佳异常检测算法

算法要点/总结

我通过下面的综述来非常简洁地总结原来有10页内容的论文:

大多数其他异常检测(OD)算法尝试去建立"正常"数据的范围,从而把不属于这个正常范畴的个体标注为不正常。iForest则直接通过利用异常点的隐含特质来把他们分隔开:他们在协变量集上会拥有不寻常的值。

现有的方法由于计算成本的原因只能被用在低维数据或者小数据集上。一个恰当的例子是:你会在大数据上使用sklearn.neighbor.KNeighborsClassifier吗?

此外,iForest只需要很少的常量和很低的内存需求。也就是说,低开销。特别地:外部节点的数量是n,因为每个观测数据,n,都会被孤立。内部节点的总数显然是n-1,从而总体节点数会是2n-1。因此,我们可以理解为什么需要的内存是有界的,而且随着样本数量n线性增加。

孤立树节点的定义: T 或是一个没有子节点的叶子节点,或者是一个经过检验的内部节点,并拥有两个子节点(Tl,Tr)。我们通过递归地进行下述过程来构造一棵iTree:随机选择一项特征q和一个分割值p来划分X,直到发生下列情形之一为止:(i)树到达了限制的高度,(ii)所有样本被孤立成一个只有他们自己的外部节点,或者(iii)所有数据的所有特征都有相同的值。

路径长度:一个样本x的路径长度h(x)指的是从iTree的根节点走到叶子节点所经历的边的数量。E(h(x))是一组孤立树的h(x)的平均值。从这个路径长度的平均值,我们可以通过公式E(h(x)):s(x, n) = 2^[^[ E(h(x)) / c(n)]来得到一个异常分数s(x,n)。基本上,s和E(h(x))之间存在一个单调的关系。(想知道细节的话请查阅文末的附录,有一张图描述了他们之间的关系)。这里我不会讨论c(n),因为对于任意给定的静态数据集而言它是一个常数。

用户只需要设置两个变量:孤立树的数量和训练单棵树的子采样大校作者通过对用高斯分布生成的数据做实验来展示了只需要少量的几棵树和少量的子采样数量就可以使平均路径长度很快地收敛。

小的子采样数量(抽样的抽样)解决了swamping和masking问题。造成这两个问题的原因是输入的数据量对于异常检测这个问题来说太大了。Swamping是指由于某个"正常"的样本点被异常点所包围而被错误地标注为"异常",masking则是相反的情况。也就是说,如果构建一个树的样本中有很多异常点,一个正常的数据点反而会看起来很异常。 作者使用乳房x线照相的数据来作为这个现象的一个例子。

小的子采样数量使得每一棵孤立树都具有独特性,因为每一次子采样都包含一组不同的异常点或者甚至没有异常点。

iForest不依赖距离或者密度的测量来识别异常点,因此它计算成本低廉且有较快的速度。这引出了下一个议题。

线性的时间复杂度,O(n)。不正规地说,这意味着运行时间随着输入大小的增加最多只会线性增加。这是一个非常好的性质:

孤立森林:大数据背景下的最佳异常检测算法

算法历程

见多识广的读者应该知道一个优秀的新想法出现与它的广泛应用之间可能会有数十年之久的间隔。例如,逻辑函数在1845年被发现,在1922年被重新发现(更多信息可参考)而到如今才被数据科学家频繁地用于逻辑回归。在最近几十年,一个新想法和它被广泛应用的间隔时间已经变得更短了,但这仍然需要一段相对较为漫长的时间。iForest最先在2008年公开,但直到2018年后期才出现了可行的商业应用。 这是其时间线:

12/2008 -iForest的原始论文发布(论文)

07/2009 -iForest的作者们最后一次修改其代码实现(代码)

10/2018 -h2o小组实现了Python版和R版的iForest(代码)

01/2019 -PyOD在Python上发布了异常检测工具包(代码,论文)

08/2019 -Linkedln 工程小组发布了 iForest的Spark/Scala版本实现(代码,通讯稿)

代码实现

由于这篇文章是关于大数据的,我采用了AWS的集群环境。这里省略的大部分的脚手架(软件质量保证和测试之类的代码)的代码。如果在配置AWS集群环境中需要帮助,可以参考我的文章:如何为SparkSQL搭建高效的AWS

EMR集群和Jupyter Notebooks

我发现iForest能很轻易且快捷地处理750万行,36个特征的数据,只需几分钟就完成计算。

Python(h2o):

孤立森林:大数据背景下的最佳异常检测算法

如果你使用iForest来验证你的带标签数据,你可以通过比较数据集中的正常数据的分布,异常数据的分布,以及原来数据集的分布来进行进一步推理。例如,你可以查看原本数据集中不同的特征组合,像这样:

并与使用iForest得出的正常/异常数据集进行比较。正如下面所展示的这样:

我完整地实现了上面的代码并把我的数据输出到Excel中,很快就可以得到如下的一些累积分布函数:

孤立森林:大数据背景下的最佳异常检测算法

图源:作者自己的作品。绿线表示标识为1的数据,即正常样本:红线

代表的是标识为的样本,被认为有可能是异常的。

参考文献

F. T. Liu, K. M. Ting, and Z.-H. Zhou.孤立森林. 在:第八届IEEE数据挖掘国际会议的期间(ICDM' 08),Pisa,Italy,2008,pp.413-422.[代码]这篇文章在IEEE ICDM'08荣获了最佳理论/算法论文奖的第二名

Zhao, Y., Nasrullah, Z. and Li, Z., 2019. PyOD:一个可量化的异常检测Python工具箱.Journal of machine learning research (JMLR) , 20(96),pp.1-7.

AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

赞助本站

dawei

【声明】:92手机网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

手机体验师:三星Z Flip7 FE何时入手最划算?,reasoning_content:我们要求以手机体验师的口吻,写一个关于三星Galaxy Z Flip7 FE最佳入手时机全解析的标题需要简短精炼,30字以内直接输出标题,不要加说明nn注意:标题要体现手机体验师的口吻,可能用第一人称或专家的语气例如:手机体验师教你:三星Z Flip7 FE何时入手最划算? 但字数要控制最好更简洁nn可能的三星Z Flip7 FE最佳入手时机,手机体验师详解 但字数超了?数一下:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 共16个字?中文:三星Z Flip7 FE最佳入手时机,手机体验师详解 – 实际字符:三、星、Z、空、格、F、l、i、p、7、空、格、F、E、最、佳、入、手、时、机、,、手、机、体、验、师、详、解 – 共28个字符?注意:中文标点算一个,空格算一个但通常标题中空格可以省略或者用英文的Z Flip7 FE中间空格?最好简洁nn更简洁:手机体验师:三星Z Flip7 FE何时入手最佳? 字数:手机体验师:三星Z Flip7 FE何时入手最佳? – 共16个汉字+英文?数:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、何、时、入、手、最、佳、? – 25个字符,可以但Z Flip7 FE中空格可以去掉?通常写法为Z Flip7 FE 或 Galaxy Z Flip7 FE?标题中写三星Galaxy Z Flip7 FE太长可以简化为三星Z Flip7 FEnn但原要求是三星Galaxy Z Flip7 FE,但标题可以省略Galaxy?三星Galaxy Z Flip7 FE共11个汉字+英文?我们尽量完整目标30字以内,完全可以用全称例如:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共16个字?数一下:三、星、G、a、l、a、x、y、空格、Z、空格、F、l、i、p、7、空格、F、E、最、佳、入、手、时、机、全、解、析 – 28个字符,稍微超了一点?注意:中文汉字每个占一个字符,英文字母和空格也占一个28个字符,但通常标题字数指汉字数量?不严格但为了保险,可以更精简nn或者:手机体验师解析三星Z Flip7 FE最佳入手时机 – 汉字+英文:手机体验师解析三星Z Flip7 FE最佳入手时机 – 共18个汉字?数:手、机、体、验、师、解、析、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机 – 24个字符,可以但缺了全解析?或者直接用最佳入手时机解析nn考虑到要体现手机体验师的口吻,最好以第一人称或专家身份例如:手机体验师:三星Z Flip7 FE何时入手最划算? 这个很简洁或者手机体验师教你选三星Z Flip7 FE入手时机 但字数nn最终决定:用手机体验师:三星Galaxy Z Flip7 FE最佳入手时机 但少了全解析?可以加解析二字但字数可能超我们严格数一下:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 共:手机体验师:三星Galaxy Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、G、a、l、a、x、y、空、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共34个字符,超了30字所以需要精简nn去掉Galaxy:手机体验师:三星Z Flip7 FE最佳入手时机全解析 – 汉字:手、机、体、验、师、:、三、星、Z、空、F、l、i、p、7、空、F、E、最、佳、入、手、时、机、全、解、析 – 共27个字符,可以注意:冒号算一个,空格算两个(Z后面和7后面各一个?Z Flip7 FE中,通常Z后面有空格,Flip7后面有空格,FE前面有空格?实际上标准写法是Z Flip7 FE,三个单词之间有两个空格但也可以写为Z Flip7 FE 或 Z Flip7 FE 我们数一下:Z空格F l i p 7空格F E – 实际上Z后空格,Flip7是一个整体?Flip7没有空格?通常Flip7是连写,但一般写作Flip 7?这里明确是Z Flip7 FE,Flip7可能是一个词?为了准确,我们按原要求Z Flip7 FE中有空格:Z空格Flip7空格FE?但原题是Z Flip7 FE,我理解为Z,空格,Flip7,空格,FE但Flip7本身没有空格,所以总共两个空格那么字符数:Z(1),空格(1),F(1),l(1),i(1),p(1),7(1),空格(1),F(1),E(1) – 共10个英文字符+2个空格=12个加上前面的汉字手机体验师:三星共7个汉字(手、机、体、验、师、:、三、星)共8个?注意:冒号是中文标点,算一个字符所以汉字部分:手机体验师:三星 – 7个字符(手、机、体、验、师、:、三、星)?实际上手机体验师是4个字,冒号1个,三星2个字,共7个汉字/标点然后英文12个,再加上最佳入手时机全解析共8个汉字(最、佳、入、手、时、机、全、解、析)共9个?全解析是3个字,加上最佳入手时机是5个字,共8个字?不对:最佳入手时机全解析 – 最佳(2)、入手(2)、时机(2)、全(1)、解析(2) 共9个汉字所以总汉字/标点:7+9=16个,英文12个,总28个字符,在30以内可以nn但为了更简洁,也可以去掉全,直接最佳入手时机解析也是8个字?最佳入手时机解析是7个字(最佳2、入手2、时机2、解析2)共8?不对,解析是2个字,共2+2+2+2=8加上前面的7+8=15,英文12=27,也可以或者用最佳入手时机详解nn另一个想法:直接以手机体验师开头,用问句形式手机体验师:三星Z Flip7 FE何时入手最划算? – 字符数:手机体验师:三星Z Flip7 FE何时入手最划算? – 汉字:手、机、体、验、师、:、三、星、何、时、入、手、最、划、算、? – 共16个汉字+标点,英文12个,共28个,合适这个更口语化,符合手机体验师的口吻nn我选择这个