规则归纳算法自动设计的计算结果与应用分析
1. 多目标优化算法对比
在规则归纳算法的设计中,多目标语法引导遗传编程规则归纳算法(MOGGP - RIs)与语法引导遗传编程规则归纳算法(GGP - RIs)以及基线(人工设计)算法进行了对比。在部分情况中,MOGGP - RIs 的模型优于 GGP - RIs 的模型。而与基线算法相比,在 30 种情况(三种基线算法乘以十个数据集)中的 23 种里,MOGGP - RIs 的模型占主导,且从未被基线算法的模型超越。
在多目标优化方法上,除了基于帕累托优势的方法外,还可以采用字典序方法。帕累托方法适用于用户对分类模型的预测准确性和规则集大小等质量标准的相对重要性没有明确概念的情况。而如果用户认为最大化预测准确性比最小化规则集大小更重要(这是大多数数据挖掘研究人员的立场),那么字典序方法是更自然的选择,因为它能直接考虑用户的这种偏好。因此,将提出的 GGP 系统扩展为基于字典序方法进行多目标优化是一个有趣的研究方向。
2. GGP 系统执行时间分析
正式分析进化算法的计算时间复杂度并非易事,理论研究虽建议使用马尔可夫链模型进行分析,但这并非简单任务。这里不进行理论分析,而是探讨影响 GGP 系统最佳和最坏情况场景的因素。
GGP 系统中最耗时的操作是对个体的评估,因为每个个体代表一个完整的规则归纳算法,所以 GGP 系统的整体运行时间取决于规则归纳算法的整体运行时间。具体而言,GGP 系统适应度函数的运行时间(系统中最耗时的部分)取决于以下三个主要因素:
- 元训练集中数据集的数量。
- 元训练集中每个数据集的属性数量(对于名义属性,还包括属性值)和示例数量。
- GGP 系统用于生成完整规则归纳算法的规则归纳组件(包含在语法中)。
其中,规则归纳组件会显著改变规则归纳算法的运行时间。例如,“Add2”操作考虑属性 - 值对的两两组合,其时间复杂度相对于属性数量是二次的;“RemoveCondRule”通过从规则模型的每个规则中一次移除一个或两个条件来对规则模型进行后剪枝。
由于很难估计 GGP 系统的最佳和最坏运行时间,下面给出了在不同元训练集数据集数量下,GGP 系统实验的最佳和最坏运行时间,所有实验均在配备 1GB RAM 的奔腾 4 双核处理器机器上运行 Linux 系统进行。
| 元训练集数据集数量 | 最佳时间(时:分) | 最坏时间(时:分) |
|---|---|---|
| 6 | 33:21 | 48:29 |
| 8 | 25:39 | 32:48 |
| 10 | 18:29 | 34:02 |
| 12 | 33:12 | 53:30 |
| 14 | 40:31 | 64:21 |
需要注意的是,规则归纳算法的执行时间仍有改进空间,其代码尚未优化。由于 GGP 系统考虑了非终结符和终结符的许多组合,要以所有组合都能在最佳时间内运行的方式编写所有语法符号的代码并不简单。
3. 针对目标应用领域定制规则归纳算法
GGP 系统可用于两种不同框架:进化出在不同应用领域都稳健的规则归纳算法,或进化出针对特定应用领域定制的规则归纳算法。这里主要研究后一种方法。
与之前的实验设置相比,本部分实验有两个主要差异:一是之前使用一组数据集作为 GGP 系统的元训练集,而这里仅使用一个数据集;二是之前元测试集由来自与元训练集不同应用领域的数据集组成,而这里元测试集包含与元训练集中数据集来自同一应用领域的数据集。
对于本部分的所有实验,每个数据集被分为三个子集:训练集、验证集和测试集。训练集和验证集被放入 GGP 系统的元训练集中,用于评估 GGP 系统找到的候选规则归纳算法。元测试集在 GGP 系统的进化过程中不使用,仅用于评估进化后的规则归纳算法的预测准确性。具体操作步骤如下:
1. 将数据集划分为训练集、验证集和测试集。
2. 将训练集和验证集放入元训练集,评估候选规则归纳算法。
3. 运行 GGP 系统。
4. 合并进化过程中使用的训练集和验证集,创建新的训练集。
5. 进化后的规则归纳算法使用新训练集创建规则集(分类模型)。
6. 在未见过的测试集上评估规则集的预测准确性。
由于为每个特定数据集优化 GGP 系统的所有参数不切实际,因此使用与之前实验相同的参数:种群大小为 100,进化 30 代,锦标赛大小为 2。交叉率为 0.7,变异率为 0.25,繁殖率为 0.05。
对于每个数据集,GGP 系统运行 25 次。为了获得更多统计支持,使用五个不同的随机种子,每个随机种子进化五个 GGP - RIs。在每次运行中,通过将整个数据集划分为五个分区,采用传统的五折交叉验证程序,每次使用三个分区进行训练,一个分区进行验证,一个分区进行测试。
实验使用的数据集分为两组:一是之前实验中使用的 20 个公共 UCI 数据集;二是五个生物信息学数据集。
3.1 公共 UCI 数据集实验
使用 GGP 系统为来自 UCI 数据集仓库的特定数据集进化规则归纳算法。通过配对双尾学生 t 检验(显著性水平为 0.05)比较 GGP - RIs 和基线算法(有序 CN2、无序 CN2、Ripper 和 C4.5Rules)的预测准确性。结果如下表所示:
| 数据集 | GGP - RIs | OrdCN2 | UnordCN2 | Ripper | C45Rules |
|---|---|---|---|---|---|
| balance - scale | 79.77±1.11 | 81.62 ± 1.53 | 77.1 ± 1.18 | 74.04 ± 1.27 | 76 ± 1.58 |
| crx | 82.22±1.51 | 80.16 ± 1.27 | 80.6 ± 0.93 | 84.37 ± 1.21 | 84.82 ± 1.53 |
| glass | 65.36±1.89 | 68.44 ± 4.58 | 69.42 ± 2.27 | 66.13 ± 3.32 | 67.72 ± 4.23 |
| heart - c | 78.67±1.37 | 77.9 ± 1.96 | 77.54 ± 2.85 | 77.53 ± 1.1 | 74.2 ± 5.43 |
| hepatitis | 80.02±1.07 | 81.94 ± 5.02 | 83.34 ± 1.83 | 86.03 ± 1.14 | 83.36 ± 0.9 |
| ionosphere | 85.65±2.85 | 87.6 ± 2.76 | 90.52 ± 2.03 | 89.61 ± 1.75 | 89.06 ± 2.71 |
| lymph | 75.85±2.04 | 82.44 ± 1.7 | 80.36 ± 4.06 | 79.03 ± 4.62 | 81.42 ± 4.05 |
| monks - 1 | 100±0 | 100 ± 0 | 100 ± 0 | 93.84 ± 2.93 | 100 ± 0 |
| monks - 2 | 89.67±1.22 | 87.26 ± 1.09 | 76.5 ± 0.83 | 64.1 ± 0.8 | 73.78 ± 2.25 |
| monks - 3 | 98.38±0.6 | 97.46 ± 0.74 | 99.1 ± 0.4 | 98.54 ± 0.46 | 94 ± 4.89 |
| mushroom | 100±0 | 100 ± 0 | 100 ± 0 | 99.96 ± 0.04 | 98.8 ± 0.06 |
| pima | 73.57±0.53 | 69.34 ± 2.13 | 74.6 ± 0.38 | 73.91 ± 1.65 | 71.04 ± 1.67 |
| promoters | 76.07±3.36 | 81.9 ± 4.65 | 74.72 ± 4.86 | 78.18 ± 3.62 | 83.74 ± 3.46 |
| segment | 95.55±0.25 | 95.38 ± 0.28 | 85.26 ± 0.87 | 95.44 ± 0.32 | 88.16 ± 7.72 |
| splice | 89.53±0.65 | 90.32 ± 0.74 | 74.82 ± 2.94 | 93.88 ± 0.41 | 89.66 ± 0.78 |
| sonar | 70.9±2.27 | 70.42 ± 2.66 | 72.42 ± 1.4 | 72.88 ± 4.83 | 72.4 ± 2.68 |
| vehicle | 68.34±0.95 | 70.16 ± 1.68 | 59.68 ± 2.01 | 66.46 ± 1.94 | 71.94 ± 1.29 |
| vowel | 73.66±1.11 | 76.64 ± 0.93 | 62.02 ± 1.63 | 68.93 ± 2.64 | 58.68 ± 6.24 |
| wisconsin | 94.27±1.1 | 94.58 ± 0.68 | 94.16 ± 0.93 | 93.99 ± 0.63 | 95.9 ± 0.56 |
| zoo | 91.85±1.87 | 92.64 ± 1.33 | 92.52 ± 2.21 | 89.47 ± 1.66 | 92.56 ± 1.45 |
从结果来看,GGP - RIs 在 80 种情况中有 10 种的预测准确性明显优于基线算法,有 5 种情况明显差于基线算法,在其余 65 种情况中,GGP - RIs 的准确性与基线人工设计的规则归纳算法具有统计学上的竞争力。
对于“splice”数据集,由于设计规则归纳算法所需的计算时间过长(该数据集有 63 个属性和 3190 个示例),在将其提供给 GGP 系统之前应用了属性选择方法。具体操作步骤如下:
1. 采用基于属性信息增益比的过滤方法对属性进行排序。
2. 从最坏到最好(按排名)每次移除十个属性,每次移除后使用四种基线算法在新数据集上进行五折交叉验证。
3. 重复步骤 2 直到至少一种基线算法的预测准确性下降。
4. 将最后移除的十个属性重新添加到训练集,然后从最坏到最好逐个移除,直到分类器的预测准确性不再下降。最终,63 个属性中使用了 14 个。
此外,在分析为单个数据集进化的算法时发现,它们比使用一组数据集作为元训练集时产生的算法更具原创性。大约 25%的算法是有序 CN2 的实例,或者只是改变了其一两个主要组件,但也有很多算法采用了更具创造性的规则查找方式。这表明,当为一组数据集进化规则归纳算法时,GGP 系统更谨慎,倾向于选择更简单的算法;而当针对特定数据定制进化规则归纳算法时,会生成更“专业化”的算法。
同时,对于相同的随机种子,在交叉验证过程中使用不同数据集生成的五个进化算法通常遵循相同的大致策略。例如,在“balance - scale”数据集中,五个算法中有四个使用自下而上的方法而非自上而下的方法,其中三个使用典型性度量创建第一条规则,而第四个则从随机示例开始搜索。
下面给出一个 GGP 系统为“crx”数据集创建的决策列表算法示例:
Divide the training data in Build and PostPrune
RuleList = /0
repeat
Divide the Build data in Grow and PrePrune
bestRule = rule created from a typical example
candidateRules = /0
candidateRules = candidateRules ∪bestRule
while negative examples covered by bestRule ̸= /0 do
for each candidateRule CR do
newCandidateRules = /0
Remove 2 conditions at a time from CR
Evaluate CR using its information content in Grow
if CR better than bestRule then
bestRule = CR
newCandidateRules = newCandidateRules ∪CR
candidateRules = best 10 rules selected from newCandidateRules
bestRule’ = Remove the last condition from bestRule
Evaluate bestRule’ into PrePrune using Laplace estimation
if bestRule’ better than bestRule then
bestRule = bestRule’
RuleList = RuleList ∪bestRule
Remove from Build data all examples covered by bestRule
until at least 99% of the examples in the training set are covered
RuleList’ = RuleList
for each rule R in the RuleList’ do
notImproving = false
repeat
Remove 2 conditions at a time from R
Evaluate RuleList’ in PostPrune
if laplaceEstimation(RuleList’) ≥laplaceEstimation(RuleList) then
RuleList = RuleList’
else notImproving = true
until notImproving
这个算法的创新之处在于它从一个典型示例开始搜索(而非随机示例),并每次移除两个条件,考虑了一些属性交互。虽然规则被细化到不覆盖任何负示例可能会导致过拟合,但通过预剪枝和后剪枝阶段确保了分类器的泛化能力。
流程图如下:
graph TD;
A[开始] --> B[划分训练数据为 Build 和 PostPrune];
B --> C[RuleList 初始化为空];
C --> D[重复操作];
D --> E[划分 Build 数据为 Grow 和 PrePrune];
E --> F[从典型示例创建最佳规则];
F --> G[候选规则集初始化为空];
G --> H[将最佳规则加入候选规则集];
H --> I{是否有负示例被最佳规则覆盖};
I -- 是 --> J[遍历候选规则];
J --> K[每次从规则移除 2 个条件];
K --> L[在 Grow 中用信息内容评估规则];
L --> M{规则是否优于最佳规则};
M -- 是 --> N[更新最佳规则并加入新候选规则集];
N --> O[从新候选规则集选择前 10 条规则];
I -- 否 --> P[移除最佳规则最后一个条件];
P --> Q[在 PrePrune 中用拉普拉斯估计评估规则];
Q --> R{新规则是否优于最佳规则};
R -- 是 --> S[更新最佳规则];
S --> T[将最佳规则加入规则列表];
T --> U[从 Build 数据移除被最佳规则覆盖的示例];
U --> V{是否至少 99% 示例被覆盖};
V -- 否 --> D;
V -- 是 --> W[复制规则列表];
W --> X[遍历规则列表中的规则];
X --> Y[重复操作];
Y --> Z[每次从规则移除 2 个条件];
Z --> AA[在 PostPrune 中评估规则列表];
AA --> AB{拉普拉斯估计值是否提高};
AB -- 是 --> AC[更新规则列表];
AB -- 否 --> AD[标记为不改进];
AD --> AE{是否不改进};
AE -- 否 --> Y;
AE -- 是 --> AF[结束];
3.2 GGP - RIs 与 GHC - RIs 对比
将 GGP 系统设计的规则归纳算法(GGP - RIs)与基于语法的爬山系统设计的规则归纳算法(GHC - RIs)的预测准确性进行了对比。通过配对双尾学生 t 检验(显著性水平为 0.01)得出结果,如下表所示:
| 数据集 | GGP - RIs 与 GHC - RIs 对比结果 |
|---|---|
| balance - scale | - |
| crx | - |
| glass | GGP - RIs 显著优于 GHC - RIs |
| heart - c | - |
| hepatitis | - |
| ionosphere | - |
| lymph | - |
| monks - 1 | - |
| monks - 2 | - |
| monks - 3 | - |
| mushroom | - |
| pima | - |
| promoters | - |
| segment | - |
| splice | - |
| sonar | - |
| vehicle | GGP - RIs 显著优于 GHC - RIs |
| vowel | GGP - RIs 显著优于 GHC - RIs |
| wisconsin | - |
| zoo | - |
从表中可以看出,GGP - RIs 在 20 种情况中有 10 种的预测准确性显著优于 GHC - RIs。在其中三种情况(vowel、vehicle 和 glass)中,GHC - RIs 的准确性出奇地低。以 glass 数据集为例,GHC - RIs 使用了需要不同数据集的预剪枝和后剪枝方法,而 glass 数据集仅包含 129 个示例,用于预剪枝和后剪枝的数据集规模过小,无法为结果提供足够的统计支持,从而导致了较差的准确性。
下面给出一个 GGP 系统为“ionosphere”数据集生成的规则归纳算法示例:
Algorithm 6.5: Example of a GGP - RI produced for the dataset ionosphere
Produce a rule set using a top - down strategy
while less than 97% of the examples of the current class are covered do
if number of conditions in the rule < 5 then
Add 2 conditions at a time to the rule
else
Add 1 condition at a time to the rule
end if
Perform a beam search of size 3
Evaluate rules using accuracy
Exclude rules with less than 80% accuracy from the set of candidates
Produce rules for a given class
end while
这个算法采用自上而下的策略生成规则集。其新颖之处在于规则的细化方式根据规则所含条件的数量而定:条件少于 5 个时,每次添加 2 个条件;条件不少于 5 个时,每次添加 1 个条件。同时,进行大小为 3 的束搜索,使用准确性评估规则,并排除准确率低于 80%的规则。
流程图如下:
graph TD;
A[开始] --> B[采用自上而下策略生成规则集];
B --> C{当前类示例覆盖是否少于 97%};
C -- 是 --> D{规则条件数量是否少于 5};
D -- 是 --> E[每次添加 2 个条件到规则];
D -- 否 --> F[每次添加 1 个条件到规则];
E --> G[进行大小为 3 的束搜索];
F --> G;
G --> H[用准确性评估规则];
H --> I[排除准确率低于 80% 的规则];
I --> J[为给定类生成规则];
J --> C;
C -- 否 --> K[结束];
总结
本文围绕规则归纳算法的自动设计展开了多方面的研究。在算法对比方面,多目标语法引导遗传编程规则归纳算法(MOGGP - RIs)在多数情况下优于语法引导遗传编程规则归纳算法(GGP - RIs)和基线人工设计算法,并且在多目标优化方法的选择上,帕累托方法和字典序方法各有适用场景。
在 GGP 系统执行时间分析中,明确了影响其运行时间的主要因素,包括元训练集数据集数量、数据集属性和示例数量以及规则归纳组件等。同时,通过实验数据展示了不同元训练集数据集数量下的最佳和最坏运行时间,也指出规则归纳算法的执行时间仍有优化空间。
在针对目标应用领域定制规则归纳算法的研究中,通过改变实验设置,使用单个数据集进行元训练,并采用特定的数据集划分和评估方式,对 GGP - RIs 进行了实验。在公共 UCI 数据集实验中,GGP - RIs 在部分情况下表现出优于基线算法的预测准确性,并且为单个数据集进化的算法更具原创性。此外,对比 GGP - RIs 与 GHC - RIs 的结果显示,GGP - RIs 在不少情况下预测准确性显著更优。
总体而言,规则归纳算法的自动设计在不同方面展现出了潜力和特点,未来可以进一步探索基于字典序方法的多目标优化扩展,以及不断优化规则归纳算法的执行时间和性能,以更好地应用于各种实际场景。
超级会员免费看
3964

被折叠的 条评论
为什么被折叠?



