我有一个具有如下属性的数据集:
Marital_status = {M,S,W,D}
IsBlind = {Y,N}
IsDisabled = {Y,N}
IsVetaran = {Y,N}
等大约有 200 个这样的变量。
我需要一种算法来生成属性的组合,一次只有一个值。
换句话说,我的第一个组合是:
Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = Y
下一组是:
Marital_status = M, IsBlind = Y, IsDisabled = Y, IsVeteran = N
我尝试使用一个简单的组合生成器,将每个属性的每个值视为一个属性本身。它没有用,因为相互排斥的选择包含在组合中,并且可能的组合数量确实很大(准确地说是 133873417996074857185490633899939406700260683726864088366400)
能否请您推荐一个算法(最好用 Java 编码)?
谢谢!!
最佳答案
正如其他人(以及您自己)指出的那样,不可能对此进行详尽的测试。
我建议您采用抽样方法,然后用它进行测试。你有很强的理论背景,所以你将能够在互联网上找到自己的方式来找到和理解这一点。
但让我举个小例子。现在,我将忽略可能的参数“集群”(密切相关)。
创建一个数据样本,其中包含所有 200 个参数的所有可能值。这种详尽性确保不会忘记任何参数值。
It doesn't have to be created upfront, the values can be created by a loop.
对于一个数据的每个样本,您需要添加其他值。一种简单的方法是选择要测试每个样本的次数(比如 N = 100)。对于一个数据的每个样本,您将随机生成 N 倍其他值。
If there are 1000 possible values using all 200 parameters, and N=100, that would give us 100K tests.
您可以通过多种方式详细说明这个基本思想:
- 如果您希望您的测试可重复,您可以只生成一次,存储它,然后在所有 future 测试中重复使用相同的集合。
- 您可以控制您的分配,以便每个值都被选择了相当多的次数。
- 在现实生活中,所有 200 个参数并非没有联系。许多参数实际上会与其他一些参数相关联,因为一起找到这些值的概率是不均匀的。不像我以前那样只对一个参数进行初始详尽设置,
我会在一组连接的参数上运行详尽的集合。
关于java - 在 Java 中设置组合算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511698/