• OneR算法分析


    OneR原理:一个属性决定类。

    算法步骤

       中文描述如下:
     For 对于每一个属性:

          For 对于属性的每一个值,创建规则如下:

               计算每一个类(值)出现的次数

               找到出现最多的类

               创建规则:把这个出现最多的类赋值给属性值(比如 OutLook中Sunny-->yes)

          计算每一个属性规则集合的错误率
    找到错误率最低属性集合

            

    举例 weather.nomiral.arff

    对于每个属性重复上述步骤后:(带星号表示可选,也就是说类值可以选yes也可以选no)

                特殊情况:1.对于遗失值的属性而言,可以通过把Missing Value当作一个属性值 比如 OutLook就具有四个值:Sunny,Overcast,Rainy,Missing Value

                                  2.对于数字值得属性而言,该如何操作呢?

    针对第二种情况  我们可以使用离散型的方法把数字属性转换为名词属性,具体步骤如下:

        以weather.numeric.arff中温度为例

     
    第一步:根据数字属性的值来选择训练案例

    第二步:通过设置断点来分割这个数字序列,断点:类变化的那个点作为断点

     第三步:选择断点为两边的中间值,依次为:64.5,66.5,70.5,72,77.5,80.5,84,

          但是两个实例中值都为72,可是对应的类不同。这个如何处理?

            最简单的解决方法是通过把断点移动到72以上的一个案例,移动到73.5(正好为(72+75)/2),这样就产生了一个混合的划分,在这个划分中no占大多数。

    第四步:可能会产生过度拟合(overfitting的概念将在下一章讲解)问题,

                          问题描述:比如对于训练集中的每一个实例,某个属性总有不同的属性值。从而标识码属性就能唯一的标识实例,这对于训练集而言会产生零错误率(因为每个分区都只有一个实例)。这个标识码属性将不会在训练集正确的外部得到任何示例。这种就是overfitting现象。处理办法?

                        解决办法      

                                          1.对于oneR来说,当某个属性有大量的可能值时,过度拟合就很有可能发生。因此,在离散化一个 数字类型属性时,加上一个条件---即每个分区中的大多数类的个数必须满足一个最小值。

                                              不妨设置为3,那么上述分区变为如下

                                                 

                                          2.在第一个分区中,要确保大多数类(yes)至少有三条记录。然而,接下来的还是yes,我们完全可以把这个也划分到第一个分区,新的分割如下

                                              

                                           3.从上述图片中看到,除了最后一个,其它的分区都满足至少有三个大多数类记录。

                                                  其实第一个分区和第二个分区的大多数类都是yes,当我们融合两个分区时,对于规则集合没影响。融合图如下:

                                               

    第五步:最后得到  规则集合

                 temperature : <=77.5 --->yes     2/10

                                          >77.5 ----->no    2/4

                                               

                                              

             温馨提醒!   

                                                       如果数字属性有已经遗失的值,将会为它创建一个额外的类别。离散程序作用这些实例的时候,会把这个属性的值作为已经定义

            
                                   

  • 相关阅读:
    【公告】阿里云出现问题:镜像创建的服务器无法启动团队
    上周热点回顾(4.8-4.14)团队
    上周热点回顾(4.1-4.7)团队
    【故障公告】阿里云抢占式实例服务器被自动释放引发的故障团队
    上周热点回顾(3.25-3.31)团队
    上周热点回顾(3.18-3.24)团队
    上周热点回顾(3.11-3.17)团队
    博客园 .NET Core 线下技术交流会 -- 上海站团队
    分区助手是什么?(博主推荐)(图文详解)
    IDEA里点击Build,再Build Artifacts没反应,灰色的?解决办法(图文详解)
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/7237891.html
Copyright © 2020-2023  润新知