首页 > 编程知识 正文

随机森林对异常值敏感,微信检测异常是什么意思

时间:2023-05-03 16:28:16 阅读:144307 作者:2200

异常检测是指识别具有与其他数据点完全不同极值的罕见观测数据。 这样的数据被称为异常值,需要与被试验者的识别相区别。 这些异常现象的原因往往是:数据的偏差、数据收集过程中出现的错误或出现新的罕见情况。

管理这些离群值通常非常困难,因为无法理解问题是与错误的数据收集相关还是其他原因。 根据我们的目标需要,决定是消除还是保持这个异常值。 如果异常点是由于新事件的发生而发生的,则删除异常点意味着丢失信息。 因为在这种情况下,由于稀有性,离群值包含重要的新信息。

检测欺诈性金融交易、制造环境中的故障设备或恶意网络活动被认为是异常检测的应用。 因此,异常检测的目标是建立能够说明数据异常的模型。 关于这些异常行为的研究可以用于银行和工业等公司的相关决定。

介绍了用孤立森林算法检测异常。 2008年周志华老师提出了这种基于树的无监督非参数算法。 实际上,它由针对特定数据集的许多树组成。 孤立是该算法的关键词,因为它将异常与剩下的观察隔离开来。 该隔离程序通过将区域随机分割成更小的块来分割所有数据点。 在说明该算法的基础之后,我们将使用Iris数据集展示使用scikit-learn的孤立森林APP应用。

孤立森林机制孤立森林与随机森林非常相似,建立在给定数据集决策树的集成基础上。 但是,有一些不同。 森林将异常识别为树上平均路径短的观测结果。 对每个孤立树应用了过程:

随机选择两个特征。 通过在选定特征的最大值和最小值之间随机选取值来分割数据点。 观察值的划分递归重复,直到所有观察值都孤立。

上面分别给出了4次分割后的流程示例。 在本例中,只需检查两个特征x、y和四个观察结果。 第一个条件是区分正常观测和异常观测的条件。 在x大于120的情况下,其观测值是异常值,用红色表示。 然后,根据平均路径长度,正常数据点和异常数据点:的短路径表示异常,长路径表示正常观测。

异常得分

孤立的森林需要异常值来了解数据点的异常程度。 那个值在0到1之间。 异常得分被定义为:

这里,e(h )x ) )是从根节点到外部节点x的路径长度h )x )的平均值,c )n是给定n的h )x )的平均值,用于正规化h )x )。 有三种可能性:

观测得分接近1时,路径长度非常小时,数据点容易孤立。 我们有异常。 如果观测值小于0.5,路径的长度将增加,从而获得正常的数据点。 如果所有观察结果都有0.5左右的异常值,则整个样品没有任何异常。 而且,孤立的森林,通过计算每棵树的异常得分,在孤立的树之间进行平均化,可以用比通常观测少的步骤隔离异常。 实际上,得分高的异常值路径的长度很低。

注:scikit-learn的隔离森林引入了异常分数的修改。 异常值用负分数表示,意味着正分数正常。

在sklearn实现中,让我们从sklearn开始这个示例:

将importplotly.expressaspxfromsklearn.datasetsimportload _ irisfromsklearn.ensembleimportisolationforest部署到库中后,将loaa 我们的目标是检查数据集的异常。

数据=load _ iris (as _ frame=true ) x,y=data.data,data.target df=data.framedf.head ) ) )。

每个样品有4个特征:萼片和花瓣的长度和宽度。 这些特征通过孤立森林算法进行检测,以检查观测是否有异常。

第二步是定义模型。 有相关的超级参数可以实例化类[2]:

contamination是数据集异常的比例。 在本例中,固定为0。 05。max_samples是从特征矩阵x考虑的最大样本数。 我们用所有的样品。max_features是模型训练中可以考虑的最大特征数。 我们使用所有这四个特性。n_estimators是可以想到的孤立树的数量。 我们用100个来估算。 I forest=isolation forest (n _ estimators=100,max_samples='auto ',contamination=0.05,max_features=4,BBB 以下代码:

pred=Iforest.fit_predict(x ) df [ ' scores ' ]=I forest.decision _ function ) x ) df [ ' anomaly _ label ' ]=PP

预测中获得的标签。当标签等于-1时,它表示我们有异常。如果标签是1,就是正常的。

df[df.anomaly_label==-1]

如果我们通过anomaly_label = -1来过滤数据集,我们可以观察到所有的分数在接近零的地方都是负的。在相反的情况下,当异常标签等于1时,我们发现所有的正分数。

df[df.anomaly_label==1]

为了突出异常分数与通过预测得到的标签之间的这种关系,我们可以显示直方图。在创建直方图之前,我添加了一个表示异常状态的列:

df['anomaly']=df['anomaly_label'].apply(lambda x: 'outlier' if x==-1 else 'inlier')fig=px.histogram(df,x='scores',color='anomaly')fig.show()

更明显的是,负分数的点是异常值。你不觉得吗?通过移动鼠标,您还可以看到带有特定异常分数的观察次数以及如何对观察进行分类。异常值的另一种有用表示是3D散点图,它拥有两个以上特征的视图。以下是如何创建散点图:

fig = px.scatter_3d(df,x='petal width (cm)', y='sepal length (cm)', z='sepal width (cm)', color='anomaly')fig.show()

从这个散点图中,我们可以观察到作为离群点的红点具有数据集中特征的极值。

总结

我希望本指南能帮助您对异常检测和孤立森林的问题有一个概述。我想指定contamination超参数在这个算法中有相关的作用。当您修改它时,模型将返回相同比例的离群值,您需要仔细选择它。典型的值在0到0.5之间,但它也取决于数据集。

我也建议你使用plotly库显示图形,就像我在本教程中做的那样。它们比用seaborn和matplotlib获得的要详细得多。如果你需要完整代码,在这里查看https://github.com/eugeniaring/Isolation_Forest/blob/main/iForest.ipynb

引用

[1] Liu, F. T., Ting, K. M., & Zhou, Z. H. (2008, December). Isolation forest. In Data Mining, 2008. ICDM’08. Eighth IEEE International Conference on (pp. 413–422). IEEE.

[2] https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.IsolationForest.html#sklearn.ensemble.IsolationForest

作者:Eugenia Anello

deephub翻译组

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。