Sagemaker - 随机砍伐森林 - 特征归一化?预处理?
Sagemaker - Random Cut Forest - Feature Normalization? Pre-Processing?
我无法理解 RCF 算法,尤其是它如何期望/预期数据或应该完成的预处理?例如,对于大约 500K 条记录,我有以下 data/features(带有示例值):
我的 RCF 模型的结果(针对 57 个特征的 500K 条记录进行训练 - 数量,30 个国家虚拟化,26 个类别虚拟化)非常关注数量特征(例如,所有异常都在大约 1000.00 以上,这绝对没有基于国家或类型的变化)。
此外,我还对金额字段进行了归一化,结果也不是那么强大。事实上,可以肯定地说,结果很糟糕,而且我显然遗漏了一些东西。
总的来说,我正在寻找一些关于正确使用功能的指导(再次 - 1 个金额字段和 2 个分类字段以及虚拟 1 和 0 - 产生大约 57 个字段)。我想知道我是否对 kmeans 这样的东西更好。
编辑:这里有一些背景......我想知道:
1) 加权——有没有办法给某些变量赋予权重(即,其中一个分类变量比另一个更重要)。例如,我使用 Country 和 Category 作为关键属性,并希望给予 Category 比 Country 更多的权重。
2) 上下文——如何确保在其同行(分类数据)的上下文中考虑异常值?例如,一笔 "airfare" 费用的 5000 美元交易不是该类别的异常值,但适用于任何其他类别。我可以创建 N 个模型,但这会变得混乱和麻烦,对吧?
我查看了大部分可用文档 (https://docs.aws.amazon.com/sagemaker/latest/dg/rcf_how-it-works.html),但找不到任何描述此内容的内容!
非常感谢您的提前帮助!
编辑:在我什至没有半合理的结果的这一点上不确定它的关键,但我使用了以下超参数:
num_samples_per_tree=256,
num_trees=100
我从未使用过 Amazon RCF,但通常基于树的模型在使用 One Hot Encoding(或虚拟编码)时表现不佳。从这个意义上说,我宁愿使用数字编码(给出从 1 到 len(category) 的数字)或二进制编码器(相同的东西,但带有二进制变量)。这应该允许树对这些变量进行更有意义的拆分。
在超参数方面很难说,num_samples_per_trees取决于你期望的离群值的比例,而num_trees会影响每个分区的数据量,从而影响大小单棵树的数量,因此它取决于数据集的大小。
尝试改变这些东西,如果你看不到任何改进,你可以尝试不同的东西。但老实说,我建议 DBSCAN 而不是 Kmeans,但据我所知,它们都需要定义点之间的一些距离或度量,这并不简单,因为你使用的是分类和数字变量的混合
编辑:
1 - 不,我不认为有一种方法可以在 RCF 中对特征进行加权,就我所知,通常在任何基于树的算法中都无法做到这一点。但是,如果您使用基于距离的方法(层次聚类、Kmeans 等),您可以定义自己的距离度量,该度量对您的特征具有不同的权重
2 - 好吧,这就是算法的用途。它应该根据所有特征的分布来找到异常值,而不仅仅是一个。
如果需要,您也可以尝试隔离森林。它不需要任何指标,在我看来它比 RCF 更容易理解。
我无法理解 RCF 算法,尤其是它如何期望/预期数据或应该完成的预处理?例如,对于大约 500K 条记录,我有以下 data/features(带有示例值):
我的 RCF 模型的结果(针对 57 个特征的 500K 条记录进行训练 - 数量,30 个国家虚拟化,26 个类别虚拟化)非常关注数量特征(例如,所有异常都在大约 1000.00 以上,这绝对没有基于国家或类型的变化)。
此外,我还对金额字段进行了归一化,结果也不是那么强大。事实上,可以肯定地说,结果很糟糕,而且我显然遗漏了一些东西。
总的来说,我正在寻找一些关于正确使用功能的指导(再次 - 1 个金额字段和 2 个分类字段以及虚拟 1 和 0 - 产生大约 57 个字段)。我想知道我是否对 kmeans 这样的东西更好。
编辑:这里有一些背景......我想知道:
1) 加权——有没有办法给某些变量赋予权重(即,其中一个分类变量比另一个更重要)。例如,我使用 Country 和 Category 作为关键属性,并希望给予 Category 比 Country 更多的权重。
2) 上下文——如何确保在其同行(分类数据)的上下文中考虑异常值?例如,一笔 "airfare" 费用的 5000 美元交易不是该类别的异常值,但适用于任何其他类别。我可以创建 N 个模型,但这会变得混乱和麻烦,对吧?
我查看了大部分可用文档 (https://docs.aws.amazon.com/sagemaker/latest/dg/rcf_how-it-works.html),但找不到任何描述此内容的内容!
非常感谢您的提前帮助!
编辑:在我什至没有半合理的结果的这一点上不确定它的关键,但我使用了以下超参数:
num_samples_per_tree=256,
num_trees=100
我从未使用过 Amazon RCF,但通常基于树的模型在使用 One Hot Encoding(或虚拟编码)时表现不佳。从这个意义上说,我宁愿使用数字编码(给出从 1 到 len(category) 的数字)或二进制编码器(相同的东西,但带有二进制变量)。这应该允许树对这些变量进行更有意义的拆分。
在超参数方面很难说,num_samples_per_trees取决于你期望的离群值的比例,而num_trees会影响每个分区的数据量,从而影响大小单棵树的数量,因此它取决于数据集的大小。
尝试改变这些东西,如果你看不到任何改进,你可以尝试不同的东西。但老实说,我建议 DBSCAN 而不是 Kmeans,但据我所知,它们都需要定义点之间的一些距离或度量,这并不简单,因为你使用的是分类和数字变量的混合
编辑:
1 - 不,我不认为有一种方法可以在 RCF 中对特征进行加权,就我所知,通常在任何基于树的算法中都无法做到这一点。但是,如果您使用基于距离的方法(层次聚类、Kmeans 等),您可以定义自己的距离度量,该度量对您的特征具有不同的权重
2 - 好吧,这就是算法的用途。它应该根据所有特征的分布来找到异常值,而不仅仅是一个。
如果需要,您也可以尝试隔离森林。它不需要任何指标,在我看来它比 RCF 更容易理解。