Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 精确拟合整数的数据挖掘_Algorithm_Data Mining - Fatal编程技术网

Algorithm 精确拟合整数的数据挖掘

Algorithm 精确拟合整数的数据挖掘,algorithm,data-mining,Algorithm,Data Mining,我经常处理RFID卡。因为有不同的读卡器,所以同一类型的卡有不同的输出和编码。 我经常被要求(如果可能的话)将一个输出转换成另一个输出,这意味着我必须盯着这些数字,找出转换是什么 最常见的转换是 附加常数 反向二进制序列 切掉一些碎片 轮换 这些方法的组合 我通常有大约30%的成功率,但当几个小时后我找不到翻译时,我总是感到沮丧。这可能很简单,但我就是想不出来。这就是为什么我在寻找一种算法/库/软件,它可以在两组数字上自动检查这些规则,并试图找出最小的Kolmogorov复杂度 因为我对数据

我经常处理RFID卡。因为有不同的读卡器,所以同一类型的卡有不同的输出和编码。 我经常被要求(如果可能的话)将一个输出转换成另一个输出,这意味着我必须盯着这些数字,找出转换是什么

最常见的转换是

  • 附加常数
  • 反向二进制序列
  • 切掉一些碎片
  • 轮换
  • 这些方法的组合
我通常有大约30%的成功率,但当几个小时后我找不到翻译时,我总是感到沮丧。这可能很简单,但我就是想不出来。这就是为什么我在寻找一种算法/库/软件,它可以在两组数字上自动检查这些规则,并试图找出最小的Kolmogorov复杂度


因为我对数据挖掘一无所知,所以我非常感谢有人给我指点。

我不知道数字的长度,但假设它们是64位的。不同的非平凡原子变换的数量如下

Added constant      2**64 - 1
Reversal            1
Remove bits         63
Rotation            63
如果您也有组合,则有4+12+24+24=64种不同的方式来排列变换子集(不考虑变换的参数)。所以我要做的就是

  • 有一个外部循环,循环64种方式来组合转换
  • 然后有一个内部循环,该循环迭代“删除位”和旋转的最大63*63参数值;现在迭代的总数是~~~643==(26)3=218,这是可以的
  • 应用假设转换(218个转换中的一个),然后计算转换后的第一个数据集和第二个数据集之间的差异;如果差值为常量,则已找到“添加常量”转换的添加常量,并已完成

  • 这在现代PC上应该非常快,也就是说,你应该能够在几秒钟内找到解决方案。如果数据集很大(>100),您可以先使用一个样本,然后只有在子集计算正确时才验证整个数据集的结果。

    我写了一个小的概念证明。这就是我所做的

    我生成了10个随机的64位二进制字符串,作为参考读取器生成的卡片内容示例

    0010110111011011100000010001100011111001010100111101110111000100
    0000000110001111101110001011110100000100111101100100110010100000
    1111000010100111011000111000100111111001000010100101011100011001
    0010011011100011001000010111100010110001001000010101001110000000
    1111000100101100010011101011010011100111000000001111110010101110
    0101011101000101110111000010100110000111001010000010000001110111
    0101110010011010011110011110111100111001110010100111101001111101
    0101110100100101110000101000001000011100010100010010110000010001
    0111101011011010111001011011110101011100111011010111100110100101
    0000101001000110111101000100111011110000000011010110001110101011
    
    然后我生成了一个随机映射表来模拟另一个读卡器对相同十张卡的不同输出。它的格式为
    i->j
    意味着参考内容中的位
    i
    在另一个读卡器上出现为位
    j

     4 ->  0   4 ->  1  49 ->  2  32 ->  3  51 ->  4  52 ->  5  10 ->  6  47 ->  7
    16 ->  8  32 ->  9  14 -> 10  24 -> 11  13 -> 12   1 -> 13   8 -> 14  47 -> 15
    12 -> 16  56 -> 17  55 -> 18  22 -> 19   6 -> 20  33 -> 21  22 -> 22  45 -> 23
    37 -> 24  39 -> 25  46 -> 26  47 -> 27  25 -> 28  15 -> 29  43 -> 30  13 -> 31
    33 -> 32  31 -> 33  16 -> 34  49 -> 35   0 -> 36  30 -> 37  28 -> 38  31 -> 39
    45 -> 40  28 -> 41  17 -> 42  18 -> 43  40 -> 44  18 -> 45  23 -> 46  54 -> 47
    11 -> 48  54 -> 49  41 -> 50  39 -> 51  28 -> 52  31 -> 53   1 -> 54  34 -> 55
    45 -> 56   4 -> 57  59 -> 58  11 -> 59   6 -> 60  26 -> 61  21 -> 62   0 -> 63
    52 -> 64   1 -> 65  55 -> 66  46 -> 67  49 -> 68  23 -> 69  47 -> 70  45 -> 71
    28 -> 72  23 -> 73  41 -> 74  41 -> 75  16 -> 76   4 -> 77   4 -> 78  18 -> 79
    
    例如,其他读卡器的第1位和第2位输出等于参考读卡器输出的第4位。模拟输出为80位宽,有些位重复,有些位缺失

    11111101111000111110010001110110101100100100001010111001010100001011111011111110
    00100100101110101100000110100111011100111101110000101100100001001001100110111001
    00111010011111100011011001100101110110110111011101011111001000010111110011000001
    00111011011000110110100001011100000100100101011101011001000011000010111011000001
    00111110010111001101011011000001100110000010000000010011000001111100100000000000
    00010000110011000000100011000101011000110110000000011110001011100100000010001000
    11101100001101101000000001101000010101110111111111111111011101001101110011110111
    11000111100111010001001010010111001001000010000000100010011000001100001000111110
    11101101101101111110110110010000111100111111111010101110110111101110111111111111
    11110001111010010110110100011001101101101111010101001001110010100010101110001111
    
    现在我们要找到两个数据集之间的映射。对于这一点,我们只看位之间的相关性。这意味着对于由参考读取器产生的位索引i(0到63)和由另一读取器产生的位索引j(0到79)的每个组合,我们仅计算在该位置具有匹配位的示例的数量

                 111111111122222222223333333333444444444455555555566666
       0123456789012345678901234567890123456789012345678901234567890123
    
     0 3545.65456386363765535465634568436588433683666585575745656555647
     1 3545.65456386363765535465634568436588433683666585575745656555647
     2 4474534385457494458444376567873567875326554355654.48656783626534
     3 64743565476336564544465525456333.7853368114353456646256765446574
     4 669655438567727425624459656765356787734855435365684.656765446734
     5 4656752763479454654464558367475525457744794735656666.72365644734
     6 8676354543.33636254244956545235365655566334533456446476543266354
     7 33638674585643657453154636365462565864334656463.5555545874333445
     8 2434756747255656.54646334345655545255742576757474462652565642556
     9 64743565476336564544465525456333.7853368114353456646256765446574
    10 33636452963663.5549533285656964656786215665466763937547874535425
    11 685853256165765447646475.365475725457744774555634666874343666536
    12 6636334723613.36674666716343455565433764334555434462474343666376
    13 6.5.554543655634494466758363455745457766554373434486654325686758
    14 44745543.5477296438442396567853745677326776555854828656765444514
    15 33638674585643657453154636365462565864334656463.5555545874333445
    16 556564367438.363545575467478584636546655885646747757963476735843
    17 42725365674574746364463545696733676535445565374768466547.3604552
    18 5383647278564385547315483636744478786235445466585737347.74335445
    19 9767443632944725363355.47434146456546675443644547355585434377465
    20 445455.349453454656648352765655565453564538377274464216765644576
    21 758562545656656356533766543656447.766455443466567757565874537665
    22 9767443632944725363355.47434146456546675443644547355585434377465
    23 534362745636656374775744565658663634465186766.565553545674735465
    24 5747445834546725763577627276364634124.73667646345373761254753665
    25 667637456565545625446457456563358585536.334351636648456547466754
    26 6454552583477476436662576545655745657346774755.36626676547466534
    27 33638674585643657453154636365462565864334656463.5555545874333445
    28 5343667256564363347755463.54568454764255645466565555329656557465
    29 445437476563365.634442554345613563455546356733654424474545262334
    30 5343663854566547723553645436346434346653685.26767333783456353443
    31 6636334723613.36674666716343455565433764334555434462474343666376
    32 758562545656656356533766543656447.766455443466567757565874537665
    33 5747445474366565567775467474764.34346655867486723555545436775647
    34 2434756747255656.54646334345655545255742576757474462652565642556
    35 4474534385457494458444376567873567875326554355654.48656783626534
    36 .676334543855634254466956545255567635586534555638446476545468574
    37 552586543456454356575564583236.434566453663666565373547436577467
    38 2454556387255496658644174565.53765675326556375652846436765644536
    39 5747445474366565567775467474764.34346655867486723555545436775647
    40 534362745636656374775744565658663634465186766.565553545674735465
    41 2454556387255496658644174565.53765675326556375652846436765644536
    42 59496454345447435.5557647452566656566655443284343595545434777669
    43 445453618545549445.644376765875745675324756377652846438763646336
    44 5545645474388363547775467676586814346653.87668745555745456755645
    45 445453618545549445.644376765875745675324756377652846438763646336
    46 55856652965861853473334.5656744656788237665464765739547856355625
    47 645455616565347425864457494365756587514653437565464623.745468356
    48 55658654763.8163545555485656566636568455885666767557745658555845
    49 645455616565347425864457494365756587514653437565464623.745468356
    50 35458636743883657455534674565666143686338.5846765555963456553625
    51 667637456565545625446457456563358585536.334351636648456547466754
    52 2454556387255496658644174565.53765675326556375652846436765644536
    53 5747445474366565567775467474764.34346655867486723555545436775647
    54 6.5.554543655634494466758363455745457766554373434486654325686758
    55 6474554365655474256444574745655387.75148332353656848458765448554
    56 534362745636656374775744565658663634465186766.565553545674735465
    57 3545.65456386363765535465634568436588433683666585575745656555647
    58 68385745436536364746647565414377434575665545736342644563074.6558
    59 55658654763.8163545555485656566636568455885666767557745658555845
    60 445455.349453454656648352765655565453564538377274464216765644576
    61 46563565654574544566863565.7673743433766758355434666634365844754
    62 665653852745563267466.534565475567433784536377256484434565846796
    63 .676334543855634254466956545255567635586534555638446476545468574
    64 4656752763479454654464558367475525457744794735656666.72365644734
    65 6.5.554543655634494466758363455745457766554373434486654325686758
    66 5383647278564385547315483636744478786235445466585737347.74335445
    67 6454552583477476436662576545655745657346774755.36626676547466534
    68 4474534385457494458444376567873567875326554355654.48656783626534
    69 55856652965861853473334.5656744656788237665464765739547856355625
    70 33638674585643657453154636365462565864334656463.5555545874333445
    71 534362745636656374775744565658663634465186766.565553545674735465
    72 2454556387255496658644174565.53765675326556375652846436765644536
    73 55856652965861853473334.5656744656788237665464765739547856355625
    74 35458636743883657455534674565666143686338.5846765555963456553625
    75 35458636743883657455534674565666143686338.5846765555963456553625
    76 2434756747255656.54646334345655545255742576757474462652565642556
    77 3545.65456386363765535465634568436588433683666585575745656555647
    78 3545.65456386363765535465634568436588433683666585575745656555647
    79 445453618545549445.644376765875745675324756377652846438763646336
    
    以上是这项研究的结果,其中一个点代表十个匹配项。如您所见,这将恢复除第13、54和65位之外的所有位的映射,其中找到了两个可能的匹配项


    80位中只有10个样本的77位相当不错。诚然,如果位模式包含结构,而不仅仅是随机位,或者必须考虑从多个位计算出的位,那么这将不太好。但是如果你有足够大的样本集,你可以发现所有可能的映射。

    这似乎是一个遗传编程问题

    “基因”是可能发生的单个位转换。适应度函数是为不断增长的输入集正确转换的位数。一个基因编程库可以将基因重组,试图找到更好的健康状况,并“培育”具有高健康水平的个体,试图创造一个更健康的个体


    .

    您有没有办法为给定目标生成相对较大的数据集?比如,一个字段的连续递增?同一类型的所有RFID卡是否编码相同的字段,或者是一些可选/专有的?最大二进制长度为52位,但大多数情况下为32位或更少。客户使用旧系统,他们有像2k+用户这样的数据库,我得到的只是这个数据库,很少有卡片,这些卡片是如何存储在他们的数据库中的。在所有情况下,客户都可以手动输入这么多的卡,但他们希望自动完成此过程,我有责任找到此转换。我需要的东西,可以自动运行,要么找到简单的翻译或返回,无法找到任何逻辑。不错的概念,但如何处理添加?当xoring时,这一切都可能起作用。将尝试并报告。添加的数字是最简单的情况,因为它们在所有示例中都是相等的。您可以在预处理步骤中检测它们,或者只向参考输入添加一个固定模式01,并将添加的位与这两个添加的位相关联。当然,您也可以处理反转位或从多个参考位计算的位。为此,您不仅要计算位与一个参考位之间的相关性,还要计算位与最多n个参考位的所有可能组之间的相关性。将n设置为2将发现依赖于两个参考位的位,例如and、or和xor。将n设置为3将发现依赖于三个参考位的位,依此类推。但是,增加n将很快需要更多的样本来可靠地检测底层函数。例如,用这种方法几乎不可能找到一个位是奇偶校验。我不够清楚。我的意思是加法/求和。添加常量可能会更改多个位。伊格