首页 > 解决方案 > Sagemaker - 随机森林 - 特征归一化?预处理?

问题描述

我无法理解 RCF 算法,特别是它如何预期/预期数据或应该完成的预处理?例如,我有大约 500K 记录的以下数据/特征(带有示例值):

值和标题

我的 RCF 模型的结果(针对 57 个特征的 500K 记录进行训练 - 数量,30 个国家和 26 个类别)非常关注数量特征(例如,所有异常都高于大约 1000.00,这绝对没有基于国家或类型)。

此外,我还对金额字段进行了标准化,结果也不是那么强。事实上,可以肯定地说我的结果很糟糕,我显然错过了一些东西。

总的来说,我正在寻找一些关于正确使用功能的指导(再次 - 1 个数量字段和 2 个分类字段和虚拟 1 和 0 - 产生大约 57 个字段)。我想知道使用kmeans之类的东西是否会更好。

编辑:这里的一些上下文......我想知道:
1)加权 - 是否有一种方法可以赋予某些变量权重(即,一个分类变量比另一个更重要)。例如,我使用 Country 和 Category 作为关键属性,并希望给予 Category 比 Country 更多的权重。
2) 上下文 - 我如何确保在其同行(分类数据)的上下文中考虑异常值?例如,一笔 5000 美元的“机票”费用交易不是该类别的异常值,而是任何其他类别的异常值。我可以创建 N 个模型,但这会变得混乱和繁琐,对吧?

我浏览了大部分可用的文档(https://docs.aws.amazon.com/sagemaker/latest/dg/rcf_how-it-works.html),找不到任何描述这个的东西!

非常感谢您提前提供的帮助!

编辑:在这一点上我什至没有半合理的结果,不确定它的重要性,但我使用了以下超参数:
num_samples_per_tree=256,
num_trees=100

标签: scikit-learnamazon-sagemakerfeature-engineering

解决方案


我从未使用过 Amazon RCF,但通常基于树的模型在使用 One Hot Encoding(或虚拟编码)时表现不佳。从这个意义上说,我宁愿使用数字编码(给出从 1 到 len(category) 的数字)或二进制编码器(同样的东西,但使用二进制变量)。这应该允许树对这些变量进行更有意义的拆分。

在超参数方面很难说,num_samples_per_trees 取决于您期望的异常值的比率,而 num_trees 会影响每个分区中的数据量,因此会影响单个树的大小,因此它取决于您的大小数据集。

尝试改变这些东西,如果你发现没有改善,你可以尝试不同的东西。但老实说,我建议 DBSCAN over Kmeans,但据我所知,它们都需要定义点之间的距离或度量,这并非易事,因为您使用的是分类变量和数字变量的混合

编辑:
1 - 不,我认为没有办法在 RCF 中对特征进行加权,只要我知道,通常在任何基于树的算法中都没有办法做到这一点。但是,如果您使用基于距离的方法(分层聚类、Kmeans 等),您可以定义自己的距离度量,该度量对您的特征具有不同的权重
2 - 这就是算法的用途。它应该根据所有特征的分布来查找异常值,而不仅仅是一个。

如果您愿意,您也可以尝试隔离森林。它不需要任何指标,在我看来它比 RCF 更容易理解。


推荐阅读