另一门课的lab,lab太多让我写的lab变成缝合怪。
好吧,谈谈今日缝合怪之粗糙集属性约简+ID3决策树,用的是之前的UCI DNA数据集,基本上就是之前ID3决策树改了改。
(代码晚点贴,目前仅讲讲思路)
先贴UCI DNA数据集:https://download.youkuaiyun.com/download/pvfeldt/16142737?spm=1001.2014.3001.5501
关于数据集的信息详见:https://blog.youkuaiyun.com/pvfeldt/article/details/115216262?spm=1001.2014.3001.5501
一、粗糙集约简目的
对于ID3来说,如果是属性列很多的话,这个算法比较有意义,如果就那么几列的话,光约简的过程几个loop复杂度就要比直接遍历还高。就我的理解而言,就是把属性中不是很重要的列排除在熵和信息增益的计算之外,其余还是原来的ID3算法。
二、等价类
等价类就是同一分类下的所有行。
以UCI DNA数据集为例,可以分为3个等价类,分别是分类为1(第61列为1)的集合,分类为2(第61列为2)的集合,分类为3(第61列为3)的集合。
三、差别矩阵
差别矩阵是一个记录两个属于不同等价类的行的属性差别的矩阵。
1.判断是不是同一等价类
如果是同一等价类,该位置空集。
如果是不同等价类,进入2。
2.判断每两行之间不同的属性是哪几列
找到不同的列以后,把列号存进差别矩阵中。
其中需要注意的是,差别矩阵的行和列代表的是两个相互比较的行的行号,所以其实只要算一个上三角或者下三角就够了。
四.求核
把差别矩阵的非零元素都拿出来求交集,交到若干个集合再交就为空集的时候停,然后可以得到相对小的那个集合为核。
上面是我对于粗糙集约简的理解,具体例子可以看,因为我也是照着论文里的算法在类比实现:
[1] 余建军, 张琼之. 基于粗糙集的决策树ID3算法. 计算机系统应用, 2020, 29(4): 156-162.<
C++粗糙集属性约简优化ID3决策树(UCI DNA数据集)
本文探讨了如何使用粗糙集约简优化ID3决策树算法,旨在减少属性计算复杂度。作者通过UCIDNA数据集进行实验,解释了等价类、差别矩阵和核的概念,并分享了实现思路。实验结果显示,虽然约简后的ID3在小数据集上可能更快,但由于约简过程本身的计算量,整体运行时间并不理想。文章提供了算法的简要实现和准确率比较。

最低0.47元/天 解锁文章
3074





