月度归档: 2012 年 3 月

  • 输入数据与ARFF文件–数据挖掘学习和weka使用(二)

    输入数据与ARFF文件–数据挖掘学习和weka使用(二)

    我个人认为直接讨论数据挖掘算法和weka的使用过于心急。我一开始就直接学习的数据挖掘方法,有些方法艰涩枯燥,我常常在思考的不是方法本身,而是“这是干什么的?”。

    在使用了weka后有些东西渐渐清晰,因为输入和输出给了人很直观的感觉,再结合技术本身学习效率很高。

    输入主要有三类:概念、实例和属性。

    概念

    概念简单而言就是需要被处理的东西。它可以是分类学习中那个已经分类完成的样本集。

    你需要处理的东西可能差别很大,但你可以统称它们为概念,而输出就是对其的描述,即概念描述。

    实例

    实例这个词你可能觉得陌生,但是你可以大致认为其为样本。

    我们通常的输入是一个实例集,其中的每一个实例都是单一、独立的概念样本。

    当然最常见的实例表现方式就是表格:

    instances

    不过这是因为如此,有人戏称数据挖掘应该成为文件挖掘。

    诚然,关系型数据库可以表现更为复杂的关系,但有限关系的有限集一般都可以转化为单个表。有兴趣深入看看的朋友可以看一下有关反向规格化的虚假事实问题。

    属性

    如果上面说到的实例是表格中的一行的话,属性就是数据表中的一列。

    一个特定实例的一个属性值是属性对应部分的一个测量或者观测值。

    ARFF格式

    arff格式是weka专用的文件格式,全称Attribute-Relation File Format。

    它是一个ASCII文本文件,记录了一些共享属性的实例。arff格式是由怀卡托大学的计算机科学部门开发的。

    arff格式文件主要由两个部分构成,头部定义和数据区。

    头部定义包含了关系名称(relation name)、一些属性(attributes)和对应的类型,如:

    %1.Title:IrisPlantsDatabase %
    %2.Sources: %
    (a)Creator:R.A.Fisher %
    (b)Donor:MichaelMarshall (MARSHALL%[email protected]) %
    (c)Date:July,1988 %@RELATION iris@ATTRIBUTE sepallengthNUMERIC@ATTRIBUTE sepalwidthNUMERIC@ATTRIBUTE petallengthNUMERIC@ATTRIBUTE petalwidthNUMERIC@ATTRIBUTEclass {Iris-setosa,Iris-versicolor,Iris-virginica}
  • 数据挖掘简述和weka介绍–数据挖掘学习和weka使用(一)

    写在开篇

    weka用了一些时日了,觉得真心不错。功能很完善,而且是开源的。最重要的扩展方便,非常适合搞研究和做全国大学生数学建模之类的比赛。

    我学习weka主要是看的一本数据挖掘和weka使用的书,是英文的。国内有中文版…但是不想吐就不要看译本吧,不知道是翻译的人是怎么想的.

    我写博文的顺序和参考书顺序是一样的,一方面是我觉得原书的学习顺序很合理,另外一个方面是因为我也确确实实是按照这个顺序学的。

    文章的内容一部分是我大致翻译的原书内容,一部分是我的实际经验。

    weka的中文资料还是有一些的,但是我没有找到一个较为系统,所以准备自己写一个系列出来。因为数据挖掘涉及一些比较专业的知识,我虽然是学数学的,但毕竟不是专职做数据挖掘的,如果有什么错误和疏漏还希望大家指正。

    数据挖掘的发展背景

    我们正在被数据所困扰。在我们生活的世界中,数据不断增长。无所不在的个人计算机使原本应该被废弃的数据现在可以很轻易地被保存。廉价的存储设备可以让我们简简单单存储数据而不急于决定其用途,我们所需要的只是再买个硬盘然后继续保存数据。

    互联网让我们被信息淹没,但另一个方面每一个选择都被记录下来。它们都是私人的数据,每一个数据都对应了一个个体。数据的数量高速增长,但让人感到遗憾的是,人们的认知和知识保有量却没有同步增长。信息隐藏在大量数据中,那些极有用处的信息没有被发现和重复利用。

    寻找数据中的模式是一切的核心,这并不是多么新奇或者高级的事情,从人类出现开始人们就开始寻找模式。猎人从动物迁徙行为中寻找模式;农夫从谷物生长中寻找模式;政客寻求选民意见的模式;科学家寻找物理世界的模式并将其浓缩成理论;企业家评估风险,从行为中寻找模式并将其转化为可以盈利的事业并开阔它们。

    经济学家、统计学家和工程师们为了模式可以被自动风险、识别、验证并用于验证这个目标奋斗了相当长的时间,如洪水般增长的数据增加了发现规律的可能性,并使其成为前沿热点技术。据预测,存储于全球的数据每隔20个月就可以翻一倍,当世界不断变得复杂,我们被淹没于数据之中时,数据挖掘将成为极为有价值的技术。它可以让人们获得新的视角并在商业竞争中获得竞争优势。

    数据挖掘的定义

    数据挖掘是一门交叉学科,汇集了数据库、人工智能、统计学、可视化、并行计算等不同学科和领域。

    关于数据挖掘暂时没有一个统一的定义,以下几个定义比较常见:

    1.SAS研究所:在大量相关数据基础之上进行数据探索和建立相关模型的先进方法

    2.Hand等人:数据挖掘就是在大型数据库中寻找有意义、有价值信息的过程

    还有其他很多定义,我个人倾向于“数据挖掘是通过分析现存于数据库中的数据来解决问题的技术”。举个例子,我们要解决的问题在竞争激烈的市场中获得易变的顾客的忠诚。同时我们拥有一个数据库,它包含了顾客的个人信息和顾客的决策。通过分析以前顾客的信息,我们可以发现哪些顾客可能流失,哪些顾客会继续保持忠诚。

    数据挖掘的流程

    数据挖掘方法很多,但是大致的流程是相似的。

    1.问题定义

    明确数据挖掘任务的具体需求,同时确定所需要采用的具体方法

    2.数据收集和预处理

    确定数据挖掘任务所涉及的目标数据,对其进行消除噪音、消除重复数据等处理,然后降维

    3.数据挖掘实施

    4.数据结果解释

    以上流程是一个相对简单的流程,SPSS和NCR等曾提出一个跨行业数据挖掘过程标准,将数据挖掘项目分成6个阶段。具体的内容和介绍可以参考IT168的一篇文章

    数据挖掘的功能

    数据挖掘是为了从现有数据中获得信息,但它也不是万能,能够发现的知识主要是以下5种:

    1.概念知识

    类别特征的概括性描述知识。根据数据的微观特征发现同类事物带有普遍性的、较高层次概念的共同性质,是一种对数据的概况、提炼和抽象。

    2.关联知识

    主要反映一个事件和其他事件之间依赖或者关联性。如果两项或者多项属性之间存在关联,那么其中一项的属性值就可以根据其他属性值进行预测。这类知识发现方法中最有名的就是Apriori算法。

    3.分类知识

    主要反映同类事物的共同特征和不同事物之间的差异。

    4.预测性知识

    根据历史数据和当前数据对未来数据进行预测,主要是时间序列预测。

    5.偏差性知识

    这是对差异和阶段特例的揭示,如数据聚类的离群值等。

    相较于挖掘能够发现的知识而言,数据挖掘的方法类型很多,大致可以分为7类…

  • android游戏开发框架libgdx的使用(十九)—使用自定义配置改进AVG游戏开发

    android游戏开发框架libgdx的使用(十九)—使用自定义配置改进AVG游戏开发

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

    先说明一下上一篇文章我使用了多张hiero图的字体绘制,因为我对源码进行了一些修改,本来想这次发出来的,但是我仔细调试了一下,发现对于多图的支持还是有问题,有些字会出现偏移。

    这个只有继续尝试了…大家可以考虑使用ttf字库。

    然后继续说上一篇,虽然实现了一个简单的效果,但是目前有很多不足。我把AVG游戏需要的资源全部提取出来,放在一个个文件夹中,然后通过配置文件加载这些数据。

    libgdx的工具库

    com.badlogic.gdx.utils就是libgdx的工具库,支持两种格式xml和json。

    我最先倾向于使用json格式,但是反复想了想,虽然json的大小可能要小点,但是没有xml直观好读。

    所以还是选择使用xml格式,读取xml文件使用XmlReader。

    XmlReader reader =new XmlReader();
    try {
    Element config = reader.parse(Gdx.files.internal("data/config.xml"));
    config.get("name");//获取属性值,如果没有属性值则返回同名child的值
    config.getAttribute("name");//获取属性值
    }catch (Exception e) {
    e.printStackTrace();
    }

    配置文件格式分析

    配置文件需要配置的内容其实就是上一篇我们硬编码进去的东西,有背景、边框、对话等。

    我设计的比较随意,不一定是最好的,大家可以参考参考。

    <?xml version="1.0" encoding="UTF-8"?>
    <scene>
    <packfile>pack</packfile>
    <background>bg1</background>
    <border>
    <border-name>border</border-name>
    <border-left>26</border-left>
    <border-right>26</border-right>
    <border-top>31</border-top>
    
  • android游戏开发框架libgdx的使用(十八)—简单的AVG游戏效果实现

    android游戏开发框架libgdx的使用(十八)—简单的AVG游戏效果实现

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

    好久没有写libgdx的东西了,主要是最近迷上了各种算法…

    文章是关于实现简单的AVG游戏效果,可能会有好几篇。

    想用libgdx做点AVG效果主要是因为目前Android上运行的AVG游戏(主要是恋爱模拟类型)的基本基于NScripter引擎移植出来的,我的2B中兴机子跑着巨卡,所以想自己做个。

     

    何为AVG游戏

    冒险类游戏AVG (Adventure Game)通常是玩家控制角色进行虚拟冒险的游戏,其故事情节往往是以完成某个任务或是解开一个谜题的形式出现的。

    我这里说的AVG主要是指日式AVG,就是在最初的文字冒险游戏的基础上利用精美的CG图片和动人的音响效果加以强化,靠优秀的文字和剧情打动人心的一种游戏形式。

    比如夜明前的琉璃色

    20100317110151412

     

    简单分析

    AVG游戏主要是由对话,CG图和音效组成。

    拆分下来其实很简单,如下图

    thinking

    再看一张:

    thinking2

    就不举其他例子了,每个场景基本由背景(场景图),对话,人物组成。要是以前玩过的话就很清楚了,背景切换比较少,人物的变化也比较少,文字是点击或者触摸就切换到下一句去。

    我是选用的libgdx的Stage,背景和人物做成Image,对话由Label实现,对话边框由NinePatch实现,然后触摸对话框区域就切换到下一句去。

     

    文字处理

    AVG游戏的对话占据了很大部分,中文的处理很重要。

    libgdx支持中文有两种方法,一是使用Hiero制作,二是使用ttf字库(好像目前还有点问题,暂时不推荐使用)。

    最全的汉字字库有文字9万余个,但是常用的字并不多(相对于所有文字)。

    对比中国大陆、中国台湾和香港特区各自的常用字标准,可以得到3500个常用字,全部做成libgdx用的字体文件。

    总共生成12张图,共1.90M

    chinese

    还是有点大就是了。我比较偏向于先使用这个常用字开发,完成后在重新根据实际使用制作字库。

     

    libgdx实现

    我选用的是Stage,游戏由Game和Screen控制。新建一个类AVGScreen,实现Screen接口。

    private Stage stage;//舞台
    private TextureRegion background;//背景
    private List<string[]> dialogues;//对话
    private BitmapFont