数据挖掘—概念学习Candidate-Elimination算法的C++实现
Candidate-Elimination算法是数据挖掘中的一种概念学习算法,部分解决Find-S的不足,可以输出所有与训练样本一致的概念,同时利用概念间偏序关系来指导搜索,其伪代码描述如下
花了几个小时的时间总算把这个算法用C++实现测试通过了,采用了STL中的二维Vector容器保存字符串,在调试部分浪费不少时间。主要是用VC++ 6.0查看STL容器中的变量值不太方便,比如Vector,需要在调式窗口里输入s._first,10 才可以看到全部的数据;也可以加输出的测试代码,但是比较麻烦。好了,废话不多说了,贴上代码,希望各位批评指正。
【概念挖掘需求】
基本的算法思想是,泛化边界初始化为全?,特化边界特化为全空集(@),
1、若遇到正实例,首先从G中删除不包含该实例的概念,然后对S删除与实例不相符的概念,同时做最小泛化,使其包含该实例
2、若遇到负实例,首先从S中删除包含了该实例的概念,然后对G删除包含了该实例的概念,同时做最小特化,注意最小特化集是与当前S一一枚举出可能的特化概念,删除那些符合该实例的概念
C++源码
测试数据一
测试结果一
测试数据二 测试结果二
具体预测的方法是
1、如果给定的实例符合概念集合S,则一定去游泳
2、如果给定的实例不符合概念集合G,则一定不去游泳
3、如果给定的实例不符合概念集合S,但是符合概念集合G,则可能去游泳