机器学习(四):分而治之(下)——规则学习
来源:互联网 发布:淘宝售后率是什么意思 编辑:程序博客网 时间:2024/06/16 22:21
理解:
规则分类使用的是独立而治之的探索法。通过确定训练数据中覆盖一个子案例的规则,然后从剩余的数据中分离出该区域。随着案例的增加,更多的数据子集会被分离,直到整个数据集都被覆盖,不再有案例残留。(可以理解为多个嵌套的if-else)。独立而治之算法又称为覆盖算法,规则成为覆盖规则。
比如说,你在一群不同种类的动物中需要分开哺乳动物和非哺乳动物,你第一个规则可能是陆地动物,然后你发现青蛙也在这一类中,所以要细化规则,第二个规则就变成了在陆地行走且有尾巴,我们还可以定义额外的规则,这时候剩余的动物中你发现蝙蝠也是哺乳动物,所以添加了一条规则有皮毛,就把蝙蝠划分过来。这时候所有动物都被划分了——哺乳或非哺乳。
这样就有三条规则:- 如果在陆地行走且有尾巴,是哺乳动物
- 如果有皮毛,是哺乳动物
- 否则,不是哺乳动物。
- 单规则算法(1R)
运作方式:只根据案例的一个特征就划分该案例的类别,最后以投票的方式确定究竟是哪一个特征。还是说刚才动物分类的例子,如果只按照行走途径(海陆空)来划分哺乳非哺乳,导致两个错误(蝙蝠和青蛙),只按照皮毛来分,三个错误(猪,大象,犀牛)(这个例子中我们只知道案例的两个特征——行走途径和是否有皮毛),所以我们最终选择行走途径来划分是哺乳和非哺乳。
产生规则:
1.海洋或空中——非哺乳
2.陆地——哺乳
单一特征往往不能很好划分复杂的问题。
- RIPPER算法
运行方式:是规则学习多次迭代进化而来,一般有三步:生长,修剪,优化。生长时使用独立而治之,直到规则能够完全划分一个数据集,当增加一个指定规则而熵值不再减小,该规则需要立即修剪。最后用各种探索法进行规则优化。可以同时考虑多个属性,比如:会飞并且有皮毛的是哺乳动物。
部分代码:
> str(mushrooms)'data.frame': 8124 obs. of 22 variables: $ type : Factor w/ 2 levels "1","2": 1 2 2 1 2 2 2 2 1 2 ... $ cap_shape : Factor w/ 6 levels "b","c","f","k",..: 6 6 1 6 6 6 1 1 6 1 ... $ cap_surface : Factor w/ 4 levels "f","g","s","y": 3 3 3 4 3 4 3 4 4 3 ... $ cap_color : Factor w/ 10 levels "b","c","e","g",..: 5 10 9 9 4 10 9 9 9 10 ... $ bruises : Factor w/ 2 levels "f","t": 2 2 2 2 1 2 2 2 2 2 ... $ odor : Factor w/ 9 levels "a","c","f","l",..: 7 1 4 7 6 1 1 4 7 1 ... $ gill_attachment : Factor w/ 2 levels "a","f": 2 2 2 2 2 2 2 2 2 2 ... $ gill_spacing : Factor w/ 2 levels "c","w": 1 1 1 1 2 1 1 1 1 1 ... $ gill_size : Factor w/ 2 levels "b","n": 2 1 1 2 1 1 1 1 2 1 ... $ gill_color : Factor w/ 12 levels "b","e","g","h",..: 5 5 6 6 5 6 3 6 8 3 ... $ stalk_shape : Factor w/ 2 levels "e","t": 1 1 1 1 2 1 1 1 1 1 ... $ stalk_root : Factor w/ 5 levels "?","b","c","e",..: 4 3 3 4 4 3 3 3 4 3 ... $ stalk_surface_above_ring: Factor w/ 4 levels "f","k","s","y": 3 3 3 3 3 3 3 3 3 3 ... $ stalk_surface_below_ring: Factor w/ 4 levels "f","k","s","y": 3 3 3 3 3 3 3 3 3 3 ... $ stalk_color_above_ring : Factor w/ 9 levels "b","c","e","g",..: 8 8 8 8 8 8 8 8 8 8 ... $ stalk_color_below_ring : Factor w/ 9 levels "b","c","e","g",..: 8 8 8 8 8 8 8 8 8 8 ... $ veil_color : Factor w/ 4 levels "n","o","w","y": 3 3 3 3 3 3 3 3 3 3 ... $ ring_number : Factor w/ 3 levels "n","o","t": 2 2 2 2 2 2 2 2 2 2 ... $ ring_type : Factor w/ 5 levels "e","f","l","n",..: 5 5 5 5 1 5 5 5 5 5 ... $ spore_print_color : Factor w/ 9 levels "b","h","k","n",..: 3 4 4 3 4 3 3 4 3 3 ... $ population : Factor w/ 6 levels "a","c","n","s",..: 4 3 3 4 1 3 3 4 5 4 ... $ habitat : Factor w/ 7 levels "d","g","l","m",..: 6 2 4 6 2 2 4 4 2 4 ...> mushrooms_jrip<-JRip(mushrooms$type~.,data = mushrooms)> mushrooms_jripJRIP rules:===========(odor = f) => mushrooms$type=1 (2160.0/0.0)(gill_size = n) and (gill_color = b) => mushrooms$type=1 (1152.0/0.0)(gill_size = n) and (odor = p) => mushrooms$type=1 (256.0/0.0)(odor = c) => mushrooms$type=1 (192.0/0.0)(spore_print_color = r) => mushrooms$type=1 (72.0/0.0)(stalk_surface_below_ring = y) and (stalk_surface_above_ring = k) => mushrooms$type=1 (68.0/0.0)(habitat = l) and (cap_color = w) => mushrooms$type=1 (8.0/0.0)(stalk_color_above_ring = y) => mushrooms$type=1 (8.0/0.0) => mushrooms$type=2 (4208.0/0.0)Number of Rules : 9> mushrooms_1r<-OneR(mushrooms$type~.,data=mushrooms)> mushrooms_1rodor: a -> 2 c -> 1 f -> 1 l -> 2 m -> 1 n -> 2 p -> 1 s -> 1 y -> 1(8004/8124 instances correct)
注:在r软件使用过程中,如果数据框里面的数据是字符类型,得转换成因子,因为大多数学习函数,以因子作为参数。
- 机器学习(四):分而治之(下)——规则学习
- 机器学习(四):分而治之(上)——决策树分类
- 机器学习(四)最邻近规则分类
- 机器学习(十八)——关联规则挖掘
- JBoss Rules学习笔记(四)——规则引擎(下)
- 数据结构学习笔记——递归(分而治之)
- JBoss Rules 学习(四): Drools规则引擎 (下)
- JBoss Rules 学习(四): Drools规则引擎 (下)
- JBoss Rules 学习(四): Drools规则引擎 (下)
- 机器学习关联规则(1)apriori
- 机器学习之 weka学习(四)
- 机器学习(四)——SVM(2)
- 机器学习课程练习(四)——softmax
- 机器学习笔记(四)——朴素贝叶斯
- 机器学习实战(四)——logisticRegression逻辑回归
- 机器学习练习(四)——多元逻辑回归
- 机器学习练习(四)——异常检测
- 监督学习之生成学习算法——Andrew Ng机器学习笔记(四)
- 使用jdbc连接ORACLE数据库进行查询的一个例子
- imx6ul yocto project image build
- 小小知识点
- 设计模式的六大原则
- Android 5.x 权限问题解决方法
- 机器学习(四):分而治之(下)——规则学习
- 2017 Pycharm激活码
- 子类能否继承、访问父类的私有成员
- SQLServer 分布式访问 创建链接服务器
- 小小的知识点
- (1) quagga源码分析--大内总管zebra
- equals与==的区别
- log4j自定义级别并分类输出到文件
- 三相电机运转与相序的关系