月度归档: 2012 年 4 月

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

    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…

  • android游戏开发框架libgdx的使用(二十)—资源预加载与AssetManager的使用

    本文使用的libgdx是0.92版本,和现在的最新版可能有一些不一样的地方。全文内容仅供参考。

    好久没有写libgdx相关的东西了,主要是我不知道改写些什么了。

    最近收到了很多邮件,大多是关于资源加载的,特别是异步资源加载,还有什么Loading窗口的实现什么的,这篇博文就做个大致的回答吧。

    什么时候需要资源预加载

    资源预加载的目的很明确,提升用户体验。当然就开发者而言,比较好的预加载实现方式还可以方便管理。

    如果游戏很简单简单,资源很少很少,那么弄资源预加载就是费事,但是以下几种情况的话还是推荐使用:

    1.资源数量大

    音乐、图片、视频什么的,如果你的游戏这些东西太多,推荐使用

    2.部分资源反复使用

    有些资源会反复使用到,比如一些背景音乐,一些小图标

    Libgdx中的AssetManager

    AssetManager是libgdx提供的资源加载方案,demo中有个例子,详细的可以细致参考。

     

    AssetManager使用很简单,先实例化一个。

    AssetManager assetManager =new AssetManager();

    加载资源时需要制定资源位置和资源类型,目前支持Pixmaps、Textures、BitmapFonts、TextureAtlases、TiledAtlases、TileMapRenderers、Music、Sound这些类型的资源。

    使用方法:

    assetManager.load("data/img/bg.png", Texture.class);assetManager.load("data/font/chinese.fnt", BitmapFont.class);assetManager.load("data/music/op_head.ogg", Music.class);assetManager.load("data/pack/task1.pack", TextureAtlases.class);

    加载的时候还支持自定义参数,比如加载Texture时

    TextureParametertextureParameter = new TextureParameter();textureParameter.minFilter = TextureFilter.Linear;textureParameter.genMipMaps =true;manager.load("data/img/bg.png", Texture.class, textureParameter);

    大多数情况还是不用考虑自定义参数的。

     

    执行了Load方法其实只是将预加载的资源载入了队列,实质上并没有加载什么,使用Update方法才会加载资源。

    该方法有个返回值,当其为True时即加载完成,为False就表示还在加载。

    如果需要一个比较准确的返回,比如当前加载到百分之多少了以方便绘制进度条,可以使用getProgress方法,该方法返回一个0到1之间的数字。…

  • 数据预处理和weka.filters的使用–数据挖掘学习和weka使用(三)

    数据预处理和weka.filters的使用–数据挖掘学习和weka使用(三)

    上一篇介绍了arff格式,这是weka专有格式,一般情况需要我们从其他数据源抽取或者获得。weka支持从cvs转化,也可以从数据库中抽取,界面如下图

    weka3_1

    weka安装目录有一个data目录,里面有一些测试数据,可以用于测试和学习。

    导入了数据仅仅是一个开始,我们还需要对数据进行预处理。

    数据预处理(data preprocessing)

    数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一些处理。

    现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。

    为了提高数据挖掘的质量产生了数据预处理技术。

    数据预处理有多种方法:数据清理,数据集成,数据变换,数据归约等。这些数据处理技术在数据挖掘之前使用,大大提高了数据挖掘模式的质量,降低实际挖掘所需要的时间。

    数据清理是使用比较频繁的,主要有:

    (1)空缺值处理

    目前最常用的方法是使用最可能的值填充空缺值,比如可以用回归、贝叶斯形式化方法工具或判定树归纳等确定空缺值.这类方法依靠现有的数据信息来推测空缺值,使空缺值有更大的机会保持与其他属性之间的联系。

    还可以用一个全局常量替换空缺值、使用属性的平均值填充空缺值或将所有元组按某些属性分类,然后用同一类中属性的平均值填充空缺值.如果空缺值很多,这些方法可能误导挖掘结果。

    (2)噪声数据处理

    噪声是一个测量变量中的随机错误或偏差,包括错误的值或偏离期望的孤立点值。常用分箱、回归、计算机检查和人工检查结合、聚类等方法进行噪音处理。

     

    数据变化主要使用平滑聚集,数据概化,规范化等手段使数据换为较利于数据挖掘的格式。

     

    数据归约主要是为了压缩数据量,源数据可以用来得到数据集的归约表示,它接近于保持原数据的完整性,但数据量比原数据小得多.与非归约数据相比,在归约的数据上进行挖掘,所需的时间和内存资源更少,挖掘将更有效,并产生相同或几乎相同的分析结果。常用维归约、数据压缩、数值归约等方法实现。

    Weka.Filters

    weka.filters中包含了一些数据预处理的简单实现(其实已经够用了),主要分成两大类,监督过滤(UnsupervisedFilter)和非监督过滤(UnsupervisedFilter)。

    如果是使用GUI的话,点击Filter的Choose就可以选择

    weka3_2

    选择完成后点击选择的Filter本身就可以修改相关参数。

    weka3_3

    完成参数修正后点击Apply就Ok了。

    我平时使用的比较多的还是非监督过滤,下面介绍一些比较常见。

    先介绍weka.filters.unsupervised.attribute包下的,这是非监督方法对属性进行预处理。

    1.Add

    为数据库添加一个新的属性,新的属性将会包含所有缺失值。可选参数:

    attributeIndex:属性位置,从1开始算,last是最后一个,first是第一个

    attributeName:属性名称

    attributeType:属性类型,一般是4选1

    dateFormat:数据格式,参考ISO-8601

    nominalLabels:名义标签,多个值用逗号隔开

    2.AddExpression

    新增一个属性,该属性由现有属性通过设定的表达式计算得出。支持+, -, *, /, ^, …