• OneR算法和weka中OneR使用数据挖掘学习和weka使用(四)


    OneR算法简介

    OneR又称1-R,是1993出现的一种极为简单的分类算法模型,它可以产生一个单层的决策树。

    OneR算法是一个简单、廉价的方法,但是常常能够获得一个非常好的结果,用于描述数据中的结构。

    OneR算法的使用非常广泛,可以简单的得到一个对数据的概括性了解,有时候甚至可以直接获得结果。

    OneR算法实现

    OneR的思路很简单,建立一个只针对于单个属性进行测试的规则,并进行不同的分支。每个分支对应的不同属性值。

    分支的类就是原始数据(训练数据)在这个分支上出现最多的类。

    每一个属性都会产生一个不同的规则集,每条规则对应这个属性的每个值。对每个属性值的规则集的误差率进行评估,选择效果最好的一个即可。

    伪代码表述:

    对于每个属性

      对于这个属性的每个属性值,建立如下规则

        计算每个类别出现的频率

        找出出现最频繁的类别

        建立规则,将这个类别赋予这个属性值

      计算规则的误差率

    选择误差率最小的规则

    一个简单的例子,数据使用weka自带的weather数据集。

    weka4_1

    针对每个属性,一共有5个,其中最后一个是我们希望输出的结果,所以只有4个属性值。即outlook、temperature、humidity、windy。

    我们先计算outlook属性,它有3个属性值,sunny、rainy、overcast。

    weka4_2

    针对属性值sunny而言,一共有5条数据。

    weka4_3

    其中对应play为no的有3条、对应play为yes的有2条,为no的最频繁,所以给sunny赋值为no。

    同理对于rainy而言,有5条记录。

    weka4_4

    其中对应play为yes的有3条、对应play为no的有2条,为yes的最频繁,所以给rainy赋值为yes。

    同理计算overcast属性值,赋值为yes。

    然后计算误差率

    sunny—>no 中有3个分类正确,2个分类错误,误差0.4

    rainy—>yes 误差为0.4

    overcast—>yes 误差为0

    outlook总误差4/14

    然后依次计算temperature、humidity、windy属性,并计算误差和总误差。然后选择误差最小的(相同则随意取或者取稳定度高的)。

    最后结果为

    sunny—>no
    
    rainy—>yes
    
    overcast—>yes

    使用Weka实现OneR算法

    weka自身已经实现了OneR算法,位于weka.classifiers.rules包中。

    OneR可以传入一个参数,如果是一个连续值,而且你希望离散化它们的话可以指定一个桶大小。

    Instances instances = DataSource.read("data/weather.arff"); 
    instances.setClassIndex(instances.numAttributes() - 1); 
    System.out.println(instances.toSummaryString());
    
    OneR oneR = new OneR(); 
    oneR.setDebug(false); 
    oneR.setMinBucketSize(6); 
    oneR.buildClassifier(instances); 
    System.out.println(oneR.toString()); 

    效果:

    weka4_5

    如果将桶大小设为1,结果将会有很大不同。

    weka4_6

    很明显前一个结果的用处要大很多。

    相关参考

    关于OneR的相关,最好的参考自然是1993年R.C. Holte所著相关文章Very simple classification rules perform well on most commonly used datasets,页码是63-91页。

    附上下载地址:http://www.ctdisk.com/file/6000694


    作者:黄云坤
    出处:http://www.huangyunkun.com/
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    支持: 新浪微博

  • 相关阅读:
    自动化系列-pyppeteer安装
    用python做一个可视化生成二维码的工具
    Python第三方包之DingDingBot
    封装属于自己的Python包
    sqlldr使用
    MS MQ 消息队列
    PDF打印
    oracle 存储过程编辑 卡死
    winrar 压缩文件方法
    数值 转换 成 带千位符的数值,且转成大写
  • 原文地址:https://www.cnblogs.com/htynkn/p/weka_4.html
Copyright © 2020-2023  润新知