system: [SYSTEM]

user: 5. 异常值更正算法 第4节中的算法用于在数据集当中挖掘反常项集，以发现约束规则和检测出异常值。当数据集中存在反常项集时，数据集D被认为是脏的。接下来将提出异常值更正的算法。假设对数据集D作出的异常值更正为D * ，异常值更正应遵循如下原则：1) D * 是干净的，也就是说，在D * 中不应当存在反常项集；2) D * 与D的差异应当很小，即D * 仅对D做最小化的修改。 本文的异常值更正算法的思想与托梅克(Tomek)连接相似。托梅克(Tomek)连接，由数学家Tomek提出，指一个样例对，x和y，如果同时满足如下3个要求，则称它们形成了一个托梅克连接：1) x是y的最近邻。2) y是x的最近邻。3) x和y的类别不同。托梅克(Tomek)连接指出了边界样例所应具备的条件，对于异常样例的处理，通常会遇到困难，因为处理掉原有托梅克连接后，有可能会在数据集当中产生新的托梅克连接，使得该过程需要迭代运行多次。这与本文中的异常值处理相似，正如前文所述，通过反常项集发现了由多个属性共同确定的异常取值组合，可以实现异常值检测。但在异常值更正中，情况更为复杂，需要找到反常项集与正常项集的边界，即准反常项集，通过与异常值差别最小的正常值来进行异常值更正。 本节首先提出准反常项集和最小可能提升度定义，再由推论1到推论4提出用于在挖掘准反常项集时进行剪枝优化的特性，最后提出异常值更正算法。 5.1. 准反常项集 反常项集可以被看做是由多个属性确定的异常取值组合，具体取到异常值的属性是未知的。异常值更正算法通过在与反常项集最为相似的干净数据(正常项集)中找到针对个别值的更正建议，来进行异常值更正。将数据集当中每个反常项集视为异常，并将它们构成的集合视为异常值集合D dirty 。给定数据集D及D dirty ，D dirty 在D中的补集为D clean 。经过异常值更正，数据集D变为D * 。异常值更正过程可能引入新的异常值，为了避免这一不足，其中一种做法是每进行一次候选更正，都对新的D * 运行一次反常项集挖掘算法，若发现了与更正操作有关的反常项集(更正后仍为反常项集或因更正引入了新的反常项集)，就将该更正操作视为无效更正。但这种做法的直接后果是大幅提高计算量。为解决这一问题，可在D dirty 与D clean 的边界处寻找准反常项集，准反常项集指数据集D中经最多k次更正后可能变为异常的项集。准反常项集的本质还是数据集中的“干净”数据，而且，对准反常项集的挖掘过程仅涉及到数据集D及其中的异常数据，而与对异常值的具体更正操作无关。 定义6：准反常项集。对数据集D，经过至多k次更正后，得到D * ，如果D * 中出现了由更正操作引入的新反常项集，则称这样的反常项集为准反常项集，用QAbNI(Quasi AbNI)表示。 通过准反常项集，可以预计算出针对数据集D的至多k次更正。准反常项集挖掘算法与算法1类似，但采用了较为宽松的提升度概念，即经k次更正后项集M的最小可能加权调和提升度，用mpwHlift表示。接下来，将提出mpwHlift的定义，并由推论1到推论4得出其性质。 定义7：(最小可能提升度)给定数据集D，其中的项集M，设 wHlift ( M ， D ) = wSupCnt ( M ， D ) / min Φ ⊂ N ⊂ M wSupCnt ( M ， D ) ∗ wSupCnt ( M \ N ， D ) 且 wSupCnt ( N ， D ) ≤ wSupCnt ( M \ N ， D ) ，其中 N ⊂ M 。则经1次数据更正后， mpwHlift ( M ， N ， 1 ) = min { wSupCnt ( M ， D ) − 1 wSupCnt ( N ， D ) * [ wSupCnt ( M / N ， D ) − 1 ] ，                                                                       | D | ∗ wSupCnt ( M ， D ) [ wSupCnt ( N ， D ) + 1 ] ∗ wSupCnt ( M / N ， D ) } 经迭代计算k次，可将其推广到k次更正后的最小可能提升度，表示为 mpwHlift ( M ， N ， k ) 。 由于干净的对象不应被修改，所以在任一D * 中对项集的支持度都有严格的限制，设D * 由D经过最多k次更正后得到，对于任何项集N，都应当符合： wSupCnt ( N ， D clean ) ≤ wSupCnt ( N ， D * ) ≤ wSupCnt ( N ， D clean ) + k 并且，还必须考虑 wSupCnt ( N ， D clean ) = 0 的项集N [ 16 ]。 推论5：如定义7，已知项集M，其子集为N，即 N ⊂ M ，对数据集D经最多k次修改后得到已修复数据集D * 。若 M ∈ AbNI ( D * ， λ ) ，有 mpwHlift ( M ， N ， k ) ≤ λ 。 推论6：对任意两个符合 N ⊂ M 的项集N和M，若M是数据集D * 中的反常项集，有 wSupCnt ( N ， D clean ) ≥ wSupCnt ( M ， D * ) ( wSupCnt N ， D * max ∗ λ ) 2 − k 与反常项集挖掘算法的剪枝策略类似，这里取加权支持度计数下限 wSupCnt ( M ， D * ) = 1 。对任何更正后的数据集D * ， wSupCnt N ， D * max 满足不等式 wSupCnt N ， D * max ≤ wSupCnt N ， D clean max 。为了在 wSupCnt N ， D * max 未知的情况下进行剪枝，由推论6，当 wSupCnt ( N ， D clean ) < | D | ( wSupCnt N ， D clean max + k ) 2 ∗ λ 2 − k 时，可将项集N的超集剪枝掉。 推论7：对任意三个符合 N ⊂ M ⊂ L 的项集N、M和L，若L是D * 中的反常项集，有 wSupCnt ( N ， D clean ) − wSupCnt ( M ， D clean ) ≥ 1 λ − wSupCnt M max − k | D | 由推论7，可得到基于生成元的剪枝策略，若项集N符合条件 1 λ − wSupCnt N ， D * max > k | D | ，可将项集 剪枝掉。在具体的数值计算中，不必为每个项集N计算 wSupCnt N ， D * max ，可用 wSupCnt ∅ ， D * max 去估计，且 wSupCnt ∅ ， D * max = wSupCnt ∅ ， D clean max + k 。而且，若M是D * 经过k次更正后得到的反常项集，对于M的子集N ( N ⊆ M )，必有 wSupCnt ( N ， D clean ) − wSupCnt ( M ， D clean ) ≥ 1 λ − wSupCnt ∅ ， D clean max + k − k | D | 。 推论8：对于任两个符合 N ⊂ M 的项集N和M，都有 wHlift ( M ， D * ) ≥ wSupCnt ( N ， D * ) min S ⊂ I { wSupCnt ( S ， D clean ) + k ∗ wSupCnt ( N \ S ， D clean ) + k } 推论8由推论3而来，以将可能的更正考虑在内。由于最小可能调和提升度mpwHlift与 wSupCnt ( M ， D * ) 及对项集的划分方式相关，mpwHlift的分母不具有反单调性。推论8确定了mpwHlift的分母在更正效果最差情况下的增量。 5.2. 准反常项集挖掘算法 准反常项集挖掘算法是在反常项集挖掘算法的基础上，采取较为宽松的提升度和不同的剪枝策略后得到的。在反常项集挖掘算法的框架下，算法2以推论5到推论8为基础，来进行剪枝和优化。 算法2与算法1类似，第14行对应于推论6，第16行利用了推论8进行剪枝，第24行将推论7用 于剪枝。由推论7可知准反常项集具有生成元的性质，但仅当 k ≤ | D | ( λ − 1 2 − 1 ) 时，才可对非生成元进行剪枝，算法2第6~8行通过过程isGenerator()和storeGenerator()实现了对非生成元处理。 k表示进行预更正的次数，其取值与算法2的性能有关。接下来，对k的取值进行讨论。 由于不考虑对数据集的具体更正操作，该算法也是无监督的，其输入仅为数据集D和更正操作数量上限k。显然k最多为 | D dirty | 。预期的更正次数k对准反常项集挖掘算法的剪枝能力有直接影响。若k取最大值，即 k = | D dirty | ，推论6和推论7确定的界限将无法用于剪枝。而且，由于最小可能加权调和提升度mpwHlift与 高度相关，mpwHlift会将较多项集判定为准反常项集。虽然算法只需要运行一次就可以获得准反常项集Q，并且所有脏对象都可以基于集合Q进行修复，但是这个集合会很大，并且由于缺乏剪枝，算法的效率会很低。另一方面，当k = 1时，可进行剪枝操作，Q的大小也是合理的。而此时，若要更正所有异常值，就需要每处理一个异常值运行一次算法。 为使准反常项集挖掘算法在运行时间和运行次数上得到平衡，将D dirty 划分为大小为r的块，并对分块大小r进行参数优化。上文中已经讨论了块大小 r = 1 和 r = | D dirty | 的情形，接下来确定r的范围，使剪枝成为可能。 给定符合 N ⊂ M 的项集N和M，假设D * 由数据集D经至多r次更正后获得，推论6仅适用于 wSupCnt ( M ， D * ) ( wSupCnt N ， D * max ∗ λ ) 2 > r 的情形，而推论7仅适用于 1 λ − wSupCnt N ， D * max > r 的情形。显然，由于 wSupCnt ( M ， D * ) ( wSupCnt N ， D * max ∗ λ ) 2 ≥ 1 λ − wSupCnt N ， D * max ， r = wSupCnt ( M ， D * ) ( wSupCnt N ， D * max ∗ λ ) 2 为支持剪枝的最大分块大小。另外，当 1 λ − 1 > r 时，有 1 wSupCnt N ， D * max ≥ 1 ，可得块大小 r = 1 λ − 1 时，算法中将可以进行大规模剪枝。 当然，全局最优的块大小r是不存在的。数据的细节，甚至对象在r个分块中的分布情况，都会影响剪枝能力。同样值得注意的是，上面导出的分块大小仅保证了相关剪枝策略的适用性，但随着分块大 小增大，剪枝能力仍会降低。当数据集中的属性数量较少，且取分块大小 r = wSupCnt ( M ， D * ) ( wSupCnt N ， D * max ∗ λ ) 2 时，算法的运行时间会大大增加，在实验部分，取 r = ( 2 λ ) − 1 。 5.3. 异常值更正算法 正如前文所述，本文的异常值更正算法是在对准反常项集的预计算基础上实现的。与传统的异常值处理算法相比，本算法避免了由更正操作产生新的异常值，无需进行迭代计算。设数据集D中的异常值为 o d ，对其所做的修复为 o d mod 。对于两种特殊的异常值，采取如下措施： 旧异常值：这些项集不应该出现在修复后的数据集当中，因为它们在D中本来就是异常值。这分为两种情况，包含修复结果 o d mod 的项集在反常项集中，即 C ∈ Q ∩ AbNI ( D ， λ ) ，其中C为包含 o d mod 的项集；或者更正产生的项集在原始数据集D中不存在，即包含更正结果 o d mod 的项集 C ∈ Q ，但 wSupCnt ( C ， D ) = 0 ，也就是说，若它们存在于D中，就会成为反常项集。不严谨的修复可能会将这样的项集引入D * 中，因此更正结果 o d mod 中不应该存在任何被判为或可能被判为反常的项集Q old 。 潜在异常值：设修复后的对象 o d mod 包含于项集C且 C ∈ Q ，其提升度满足 wHlift ( C ， D ) > λ 且 wHlift ( C ， D mod * ) < wHlift ( C ， D ) ，称由这样的项集组成的集合为A potential 。应避免这样的更正操作，因为该项集属于D中的准反常项集，而不是反常项集，更正后的结果与更正前相比，其提升度反而减小了，出现了新的反常项集。其中 D mod * 是原始D经修复后的数据集，修复操作仅用 o d mod 去替换 o d ，而原反常项集中的其他项保持不变。 处理方式：对于旧异常值，当预修复结果中出现了Q old 时，所做更正将被视为无效，放弃该更正结果。对于潜在异常值，由于无法计算Q potential 中所有项集的加权调和提升度，这里选择了一种更有效的方法，以确保项集Q potential 的提升度不会下降，通过断言：1) 不应当将M删除掉(M的存在会减少提升度中的分子)；2) 不应当加入M的真子集(这将增加提升度中的分母)。确保 wSupCnt ( M ， D ) ≥ wSupCnt ( M ， D * ) 且 wSupCnt ( N ， D ) ≤ wSupCnt ( N ， D * ) ， N ⊊ M ，使得 wHlift ( M ， D * ) ≥ wHlift ( M ， D ) 。 通过上述针对特殊异常值的处理措施，可以确保在异常值更正后不会出现新的反常项集，使得候选更正有效。 在异常值更正中不会更改D clean ，以确保每次修复都是基于真实存在的可信值。对于每个异常值组合，通过从D clean 中寻找类似的对象，替换异常值组合中的某些项，从而生成候选更正。对象间的相似度由Linsim相似度 [ 17 ] 来衡量， Linsim ( o ， o ′ ) = ∑ A ∈ A S ( o [ A ] ， o ′ [ A ] ) ∑ A ∈ A log ( wSup ( { ( A ， o [ A ] ) } ， D ) ) + ∑ A ∈ A log ( wSup ( { ( A ， o ′ [ A ] ) } ， D ) ) 其中， S ( o [ A ] ， o ′ [ A ] ) 由 S ( o [ A ] ， o ′ [ A ] ) = { 2 ∗ log ( wSup ( { ( A ， o [ A ] ) } ， D ) ) ，                                                                                         o [ A ] = o ′ [ A ] 2 ∗ log ( wSup ( { ( A ， o [ A ] ) } ， D ) ) + log ( wSup ( { ( A ， o ′ [ A ] ) } ， D ) ) ，       其 他 确定。Linsim相似度同时考虑实际数据中匹配和不匹配的情况，对频繁值的匹配赋予较高的权重，对非频繁值的不匹配赋予较低的权重。 异常值更正算法如算法3所示 [ 16 ]。 算法3的第7到第8行为对异常值的更正操作，对于每个异常值组合 o d i ，该算法按照它们与 o d i 的相似性顺序逐个匹配干净对象。随后通过过程Modify( o d i ， o c )去更正 o d i ，在更正中仅替换包含于反常项集中的项。 在算法3中的第12行，过程TRUSTED ( o d i ， o d i mod ， A i )用于检查候选更正是否是可信的，可信与否是相对于准反常项集而言的。若更正结果可信，将其添加到D * 中；若不可信，将检查下一个候选更正，循环的终止条件是找到可信更正(第11行)或所有候选更正均被拒绝(第13行)，若无候选更正可用， o d i 被添加到无法修复的对象集D ** 中(第14行)。