Sagemaker - 随机切割森林 - 特征归一化?预处理?

3

我对RCF算法的理解有些困难,尤其是它如何期望/预处理数据或应完成的预处理工作?例如,我有大约500K条记录的以下数据/特征(带有示例值):

valuesandheader

我的RCF模型的结果(基于500K记录的57个特征 - 金额、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

1个回答

1

我从未使用过Amazon RCF,但通常基于树的模型在使用One Hot Encoding(或虚拟编码)时表现不佳。在这种意义上,我宁愿使用数字编码(给定1到len(category)的数字)或二进制编码(相同的东西,但是使用二进制变量)。这应该允许树在这些变量上有更有意义的分裂。
在超参数方面很难说,num_samples_per_trees取决于您期望拥有的异常值比率,而num_trees将影响每个分区中的数据量,因此也会影响单个树的大小,因此它取决于您的数据集大小。
尝试更改这些内容,如果看不到任何改善,可以尝试其他方法。但是老实说,我建议使用DBSCAN而不是Kmeans,但据我所知,它们都需要定义一些距离或测量点之间的距离或测量标准,这并不容易,因为您正在使用混合的分类和数值变量。
编辑:
1- 不,我认为在RCF中没有加权特征的方法,就像我所知道的任何基于树的算法一样。但是,如果您使用基于距离的方法(分层聚类,Kmeans等),则可以定义自己的距离度量,以在不同的特征上进行加权。
2- 好吧,这就是算法的作用。它应该基于所有特征的分布而不仅仅是一个来查找异常值。
您也可以尝试孤立森林。它不需要任何度量标准,并且在我看来比RCF更容易理解。

Davide DN - 非常感谢您。我现在意识到了... DBSCAN看起来很有前途,甚至可能是sklearn中的OPTICS。我将先使用RCF进行数字编码测试。我还在上面的问题中添加了一些上下文。您介意看看吗? - theStud54
我已经对类别进行了一些数字标记,但我发现模型可能无法为具有25个值(“类别”)的变量执行有意义的分割。我可以想象它在选择某个值来拆分该字段时进行了一些操作,但这当然是没有意义的。因此,它仍然过于依赖值字段来单独确定是否为异常值。我不知道如何考虑这个类别变量。谢谢您进一步的想法!PS-我也在研究DBSAN / OPTICS模型。 - theStud54
更令人困惑的是,当我将RCF降至两个变量时,一个连续测量(未改变)和一个单一编码变量(如果XXX则为0,如果YYY则为1),仍然没有很好的区分。它只关注于连续测量 - 也就是说,任何超过XXX的值都是异常值。唉 - 我一定漏掉了什么。 - theStud54
如果XXX和YYY的连续变量分布相同,那么这很容易实现。 - Davide ND

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接