本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 基于 Weka 的数据库挖掘及数据预处理
  • 1、双击下面的 exe 程序进行安装

    网盘链接: https://pan.baidu.com/s/1pTNWBHq5qdL1GaeZUh4uSQ 提取码:wpzr

    image.png

    2、出现欢迎窗口

    image.png

    3、单击 next 按钮进入下一步

    同意 GNU GPL 协议,选择 I Agree 按钮

    image.png

    4、进入选择安装组件,默认选择 FULL ,再单击 next

    image.png

    5、 选择安装路径

    image.png

    6、选择开始菜单文件夹名称

    这里是 weka 3.8.4,没有特殊要求不需更改,单击 Install 安装完成即可。

    image.png

    7、安装完成后,可生成如下文件

    image.png

    8、data 文件夹

    这里需要看一下 data 文件夹,里面是 weka 自带 25个arff 文件作为测试数据集。

    image.png

    9、weka 的初步使用

    在电脑的开始菜单里找到 Weka3.8.4 的子菜单,下面有三个菜单项,如下图,第一个菜单项: Documentation ,提供 weka 的参考资料,包括 Weka 手册、 Java API 文档及一些线资源。下面两个菜单项都可以启动W eka 界面,不同的是后者带有一个 控制台的输出,而前者没有。

    image.png

    10、单击 weka3.8.4启动 weka 界面,并选择探索者界面 Explorer

    image.png

    进入探索者界面如下:

    image.png

    根据不同的功能把这个界面分成 8 个区域。

    区域1 的几个选项卡是用来切换不同的挖掘任务面板。这一节用到的只有**“Preprocess”**,其他面板的功能将在以后介绍。

    主界面最左上角(标题栏下方)的是标签栏,分为 6 个部分,功能

    依次是:

    Preprocess( 数据预处理 ) :选择和修改要处理的数据;

    Classify( 分类 ) :训练和测试关于分类或回归的学习方案;

    Cluster( 聚类 ) :从数据中学习聚类;

    Associate( 关联 ) :从数据中学习关联规则;

    Select attributes( 属性选择 ) :选择数据中最相关的属性;

    Visualize( 可视化 ) :查看数据的交互式二维图像。


    区域2 是一些常用按钮。包括打开数据,保存及编辑功能、载入、编

    辑数据

    标签栏下方是载入数据栏,功能如下:

    Open file :打开一个对话框,允许你浏览本地文件系统上的数据文

    件( .dat );

    Open URL :请求一个存有数据的 URL 地址;

    Open DB :从数据库中读取数据;

    Generate :从一些数据生成器中生成人造数据。


    区域 3 中“Choose” 某个 “Filter”,可以实现筛选数据或者对数据进行某种变换。数据预处理主要就利用它来实现。


    区域 4 展示了数据集的一些基本情况。


    区域 5 中列出了数据集的所有属性。勾选一些属性并“Remove”就可以删除它们,删除后还可以利用区域 2 的“Undo”按钮找回。区域 5 上方的一排按钮是用来实现快速勾选的。


    在区域 5 中选中某个属性,则 区域 6 中有关于这个属性的摘要。注意对于数值属性和分类属性,摘要的方式是不一样的。图中显示的是对数值属性“income”的摘要。


    区域 7 是区域 5 中选中属性的直方图。若数据集的最后一个属性(我们说过这是分类或回归任务的默认目标变量)是分类变量(这里的“pep”正好是),直方图中的每个长方形就会按照该变量的比例分成不同颜色的段。要想换个分段的依据,在区域 7 上方的下拉框中选个不同的分类属性就可以了。下拉框里选上“No Class”或者一个数值属性会变成黑白的直方图。


    区域 8 是状态栏,可以查看 Log 以判断是否有错。右边的 weka 鸟在动的话说明 WEKA 正在执行挖掘任务。右键点击状态栏还可以执行 JAVA 内存的垃圾回收。

    11、为了可以挖掘数据库中的数据,我们要将 Weka 和 MySQL 进行连接

    (1)配置文件

    WEKA_HOME
    E:\environment\Weka-3-8-4
    1. 启动数据库运行,确保已建立名称为 weka 的数据库,并自行建表
    2. 修改以下目录中的 DatabaseUtils.props 文件(需要提前将 weka-3-8-4 文件夹下的 weka.jar 包解压才能找到)

    image.png

    以记事本打开该文件,文件内容如下:

    # General information on database access can be found here:
    # https://waikato.github.io/weka-wiki/databases/
    # Version: $Revision: 15255 $
    # The comma-separated list of jdbc drivers to use
    #jdbcDriver=RmiJdbc.RJDriver,jdbc.idbDriver
    #jdbcDriver=jdbc.idbDriver
    #jdbcDriver=RmiJdbc.RJDriver,jdbc.idbDriver,org.gjt.mm.mysql.Driver,com.mckoi.JDBCDriver,org.hsqldb.jdbcDriver
    jdbcDriver=com.mysql.jdbc.Driver
    # The url to the experiment database
    #jdbcURL=jdbc:rmi://expserver/jdbc:idb=experiments.prp
    jdbcURL=jdbc:mysql://localhost:3306/weka
    #jdbcURL=jdbc:mysql://mysqlserver/username
    # the method that is used to retrieve values from the db 
    # (java datatype + RecordSet.<method>)
    # string, getString() = 0;    --> nominal
    # boolean, getBoolean() = 1;  --> nominal
    # double, getDouble() = 2;    --> numeric
    # byte, getByte() = 3;        --> numeric
    # short, getByte()= 4;        --> numeric
    # int, getInteger() = 5;      --> numeric
    # long, getLong() = 6;        --> numeric
    # float, getFloat() = 7;      --> numeric
    # date, getDate() = 8;        --> date
    # text, getString() = 9;      --> string
    # time, getTime() = 10;       --> date
    # timestamp, getTime() = 11;  --> date
    # the original conversion: <column type>=<conversion>
    #char=0
    #varchar=0
    #longvarchar=0
    #binary=0
    #varbinary=0
    #longvarbinary=0
    #bit=1
    #numeric=2
    #decimal=2
    #tinyint=3
    #smallint=4
    #integer=5
    #bigint=6
    #real=7
    #float=2
    #double=2
    #date=8
    #time=10
    #timestamp=11
    #mysql-conversion
    CHAR=0
    TEXT=0
    VARCHAR=0
    LONGVARCHAR=9
    BINARY=0
    VARBINARY=0
    LONGVARBINARY=9
    BIT=1
    NUMERIC=2
    DECIMAL=2
    FLOAT=2
    DOUBLE=2
    TINYINT=3
    SMALLINT=4
    #SHORT=4
    SHORT=5
    INTEGER=5
    BIGINT=6
    LONG=6
    REAL=7
    DATE=8
    TIME=10
    TIMESTAMP=11
    #mappings for table creation
    CREATE_STRING=TEXT
    CREATE_INT=INT
    CREATE_DOUBLE=DOUBLE
    CREATE_DATE=DATETIME
    DateFormat=yyyy-MM-dd HH:mm:ss
    #database flags
    checkUpperCaseNames=false
    checkLowerCaseNames=false
    checkForTable=true
    setAutoCommit=true
    createIndex=false
    # All the reserved keywords for this database
    Keywords=\
      AND,\
      ASC,\
      DESC,\
      FROM,\
      GROUP,\
      INSERT,\
      ORDER,\
      SELECT,\
      UPDATE,\
      WHERE
    # The character to append to attribute names to avoid exceptions due to
    # clashes between keywords and attribute names
    KeywordsMaskChar=_
    #flags for loading and saving instances using DatabaseLoader/Saver
    nominalToStringLimit=50
    idColumn=auto_generated_id

    修改完之后,可将 DatabaseUtils.props 文件放在如下两个目录之一

    A. 当前目录即可,即不改变它的位置

    B. 若第一个目录不行,则把它放在用户目录中,若不知道自己的用户目录,在命 令 行 输 入 echo %USERPROFILE%, 即 可 找 到 用 户 目 录 路 径 , 将 DatabaseUtils.props 文件放在用户目录的下的 wekafiles\props 子目录中,并把原来路径中的 DatabaseUtils.props 删掉。

    (2)数据库设置

    image.png

    image.png

    (3)查询 Weka 数据库中 student 表中的数据

    image.png

    注意:如果连接不上数据库,可按如下顺序依次查找:数据库驱动程序是否正确;CLASSPATH 的设置是否正确(用户变量);配置文件中的 jdbcDriver 和 jdbcURL 两项配置的拼写是否正确;配置文件是否放到了正确的路径;数据库用户名和密码是否正确;该数据库用户是否拥有足够的权限;数据库是否已经启动等其他问题。

    12、使用 weka 进行数据预处理

    Preprocess 标签可用于从文件、URL 或数据库中加载数据集,并且根据应用要求或领域知识过滤掉不需要进行处理或不符合要求的数

    据。

    (1)加载数据

    image.png

    image.png

    (2)使用数据集编辑器修改数据

    加载天气数据集后,单击 Preprocess 标签页中的 Edit 按钮,弹出如下对话框,列出全部天气数据。

    image.png

    在这个界面可以手动删除一些属性或者实例,或者修改数据

    (3)使用过滤器删除属性

    image.png

    image.png

    image.png

    (4)使用过滤器添加属性

    image.png

    image.png

    image.png

    image.png

    image.png image.png

    image.png

    ➢ 我们可以看到上表中 mode 属性在最后一列,这个天气数据集的最后一列应该是类别属性 play,根据其他条件属性的取值,比如晴天,温度/湿度适宜,没风等条件来判断是否适合外出运动,所以这里我们需要将 mode 属性和 play 属性调换一下位置。继续选择unsupervised(无监督)—>attribute—>Reorder过滤器,再单击 choose 旁边的文本框,弹出如下图,设置参数为 1,2,3,4,6,5 相当于将第五列和四列调换位置。

    image.png

    image.png

    (5)使用过滤器删除实例

    A.选择

    image.png

    image.png

    B.选择
    C.选择

    应用:使用 weka 将数据离散化

    Weka 中数据类型有标称型(nominal),只能取预定义值列表中的一个;数值型(numeric),只能是实数或整数;字符串类型(String),由双引号引用的任意长度的字符列表;还有日期型(Date)和 关系型(Relational)。

    如果数据集包含数值型属性,所用的学习方案只能处理标称型属性的分类,则将数值型属性离散化是必要的。有两种类型的离散化技术-无监督离散和有监督离散化,前者不需要也不关注类别属性值,后者在创建间隔时考虑实例的类别属性值。离散化数值型属性的直观方法是将值域分隔为多个预先设定的间隔区间。

    1、无监督离散化有等宽和等频离散化。

    等宽离散化(等宽分箱) :将数值型属性从最小值到最大值平均分为十份,即将数值从最小值到最大值分成 10 个区间,这样每个区间所包含的实例数量就各不相等,从而造成实例分布不均匀,有的间隔区域内包含很多个实例,但有的却很少甚至没有。

    等频离散化 :按数值型属性的大小顺序将全部实例平均分成十份,如 200 条实例,先按取值大小排好顺序,再每 20 条一份,分成十份。

    下面以实例说明这两种方法的差异,首先,在 data 目录中找到玻璃数据集glass.arff 文件,如下图是玻璃数据集中各属性的含义。

    image.png

    将其加载至探索者界面,在 Preprocess标签页中查看 RI 属性直方图如下:

    image.png

    思考:RI 属性的直方图中各种颜色和各种数值代表什么?

    等宽离散化

    依次打开choose—>weka—>filters—>unsupervised—>attribute—>Discretize过滤器。保持默认参数不变,点击 Apply,出现如下图:

    image.png

    等频离散化

    设置 Discretize 中的 image.png 值为 true。得到等频离散化后的 RI 属性,如下图:

    image.png

    我们可能会产生错觉,等频离散化后形成的直方图似乎会等高,但是有兴趣的可以自行看看 Ba,Fe 属性的等频离散化,是否会等高,思考为什么会这样。

    image.png

    2、有监督离散化

    首先打开 data 数据集中的鸢尾花数据集,即 iris.arff 文件,数据集中各属性如下:

    image.png

    Weka 中打开 iris 数据集,显示如下图

    image.png

    依次点开choose—>weka—>filters—>supervised—>attribute—>Discretize,点击 Apply,,打开可视化窗口,发现各个属性的取值范围如下:

    image.png


    【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction 概念 | 项 Item 概念 | 项集 Item Set | 频繁项集 | 示例解析 )
    【数据挖掘】关联规则挖掘 Apriori 算法 ( 关联规则简介 | 数据集 与 事物 Transaction 概念 | 项 Item 概念 | 项集 Item Set | 频繁项集 | 示例解析 )