数据挖掘—Weka 的数据库挖掘及数据预处理

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 数据挖掘—Weka 的数据库挖掘及数据预处理

基于 Weka 的数据库挖掘及数据预处理

❤️‍  大家好,我是java厂长,今天带你们了走进数据挖掘的世界🚜🚜!❤️‍

文章目录

  • 基于 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 手册、JavaAPI 文档及一些线资源。下面两个菜单项都可以启动Weka 界面,不同的是后者带有一个控制台的输出,而前者没有。

    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 正在运行,先关闭 weka
    • 在Weka下新建lib目录
      image.png
    • 查看自己数据库所兼容的jar包,这里我用的是5.1.49
      image.png
    • 配置环境变量
      image.png
    WEKA_HOME
    E:\environment\Weka-3-8-4
    • 修改系统变量CLASSPATHimage.png
    %WEKA_HOME%\lib\mysql-connector-java-5.1.49.jar
    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,\
      BY,\
      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)数据库设置

    • 进入 weka 的探索者界面,单击 OPEN DB,进入 SQL 查看器,可以看到 URL 文本框的内容已变成前文修改的配置文件中的 jdbcURL 值。

    image.png

    • 单击如下按钮,连接数据库,如果前面设置无误,会在 SQL 查看器下,出现数据库连接成功的提示

    image.png

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

    image.png

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

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

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

    据。

    (1)加载数据

    • 单击 open file ,在 weka 的安装目录下选择 data 文件,打开 data 文件,选择 weather.nominal.arff 数据集。

    image.png

    • 加载数据后,出现如下数据信息:

    image.png

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

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

    image.png

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

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

    • 加载天气数据后,在 Filter 下单击 Choose 按钮
      image.png
    • 打开过滤器分层列表,如下图,有两种过滤算法,一种有监督,一种无监督,前者使用类别属性,后者不使用,继续往下是属性和实例,前者主要处理有关属性的过滤,后者处理有关实例的过滤。
      image.png
    • 适合删除属性的的过滤器是 Remove,我们在unsupervised(无监督)—>attribute—> Remove 条目,单击选择该过滤器,Choose 右侧文本框就会显示。Remove,如下图

    image.png

    • 再单击该文本框,打开通用对象编辑器对话框以设置参数,如下图

    image.png

    • 设置完参数,点击 Ok,回到以下界面,文本框显示:remove -R 2,含义是删除数据集中的第二个属性。单击右边的 Apply 过滤器生效。

    image.png

    • 可单击 edit 按钮,查看删除属性后的结果,但这种方法只能改变内存中的数据,不会影响数据集文件中的内容,要想保存该文件,可通过 save 按钮保存删除属性后的文件。

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

    • 仍然是单击 Choose 按钮,依次 weka—>filter—>unsupervised(无监督)—>attribute—>AddUserFiledss过滤器

    image.png

    • 单击 Choose 旁边的文本框,打开通用对象编辑器对话框以设置参数,单击 New 按钮,设置属性名称为 mode,属性类型为 Nominal,其他不设置,单击 Ok

    image.png

    • 单击 Ok,出现如下,再单击 Apply,会发现属性选项组的属性表格中多了一个 mode 属性。

    image.png

    • 单击 Edit,打开 Vierwer 对话框,可以看到新增的属性并没有值

    image.png

    • 继续单击 Choose 按钮,选择unsupervised(无监督)—>attribute—>AddValues过滤器,单击该文本框,出现如下对话框,在 labels 标签设置 mode 的取值。

    image.pngimage.png

    • 再次单击 Edit 按钮,打开 Viewer 对话框,如下图,可以看到新增的属性下拉列表框有取值了。

    image.png

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

    image.png

    • 最后再单击 Edit 按钮,打开 Viewer 对话框,如下图,可以看到 mode 和 play 交换了位置。

    image.png

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

    A.选择
    • choose—>weka—>filter—>unsupervised—>instance—>RemoveFolds过滤器

    image.png

    • 过滤器将数据集分割为给定的交叉验证折数,并指定输出第几折。点击Choose 旁边的文本框,弹出如下对话框 image.png
    • 单击 ok-Apply,然后查看数据会发现,14 条数据只剩两条了

    image.png

    B.选择
    • choose—>weka—>filter—>unsupervised—>instance—>RemovePercentage过滤器
      image.png
    • 过滤器删除数据集中给定百分比的实例,点击 Choose 旁边的文本框,弹出如下对话框
      image.png
    • 单击 ok-Apply,然后查看数据会发现,14 条数据只剩 7 条了。
    C.选择
    • choose—>weka—>filter—>unsupervised—>instance—>RemoveRange过滤器
      image.png
    • 过滤器删除数据集中给定范围的实例,点击 Choose 旁边的文本框, 弹出如下:
      image.png
    • 单击 ok-Apply,然后查看数据会发现,14 条数据只剩 11 条了,第 3-5条数据被删掉了。

    应用:使用 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


    相关实践学习
    如何快速连接云数据库RDS MySQL
    本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    目录
    相关文章
    |
    人工智能 算法 数据挖掘
    数据挖掘(3.1)--频繁项集挖掘方法
    关联规则挖掘是数据挖掘领域中研究最为广泛的也最为活跃的方法之一 关联规则反应了一个事物和其他事物之间的相互依存性和关联性 如果存在一定的关联关系,其中一个事物就可以通过其他事物预测到 最小支持度:就是说当支持度达到一定的阈值后,某种数据才有被挖掘的潜力这个阈值就是最小支持度计数(min_sup)。
    186 0
    |
    4月前
    |
    存储 监控 数据挖掘
    【计算机三级数据库技术】第14章 数据仓库与数据挖掘-
    文章概述了数据仓库和数据挖掘技术的基本概念、决策支持系统的发展、数据仓库的设计与建造、运行与维护,以及联机分析处理(OLAP)与多维数据模型和数据挖掘技术的步骤及常见任务。
    50 3
    |
    4月前
    |
    SQL 开发框架 大数据
    【数据挖掘】顺丰科技2022年秋招大数据挖掘与分析工程师笔试题
    顺丰科技2022年秋招大数据挖掘与分析工程师笔试题解析,涵盖了多领域选择题和编程题,包括动态规划、数据库封锁协议、概率论、SQL、排序算法等知识点。
    99 0
    |
    7月前
    |
    算法 数据挖掘 数据库
    【数据挖掘】频繁项集挖掘方法中Apriori、FP-Growth算法详解(图文解释 超详细)
    【数据挖掘】频繁项集挖掘方法中Apriori、FP-Growth算法详解(图文解释 超详细)
    782 0
    |
    7月前
    |
    数据可视化 搜索推荐 数据挖掘
    数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(一)
    数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(一)
    |
    7月前
    |
    算法 搜索推荐 数据挖掘
    数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(续)
    数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(续)
    |
    7月前
    |
    机器学习/深度学习 数据采集 算法
    数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(二)
    数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(二)
    |
    7月前
    |
    数据采集 存储 算法
    数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
    数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
    |
    7月前
    |
    SQL 存储 Apache
    银联商务:阿里云数据库 SelectDB 版内核 Apache Doris 赋能“科技银商”,助力金融机构挖掘增长新机遇
    银联商务基于 Apache Doris 构建了新一代实时数据仓库架构,使数据导入性能提升 2-5 倍、ETL 场景性能提升 3-12 倍、查询分析响应速度提升 10-15 倍。
    |
    7月前
    |
    机器学习/深度学习 人工智能 Kubernetes
    如何拥抱大模型时代?向量数据库公司 Zilliz 从挖掘海量数据规律谈起
    极客公园创新大会 2024 在北京闭幕。百度李彦宏、美国国家工程院院士张宏江、Google DeepMind 卢一峰、百川智能王小川、小鹏汽车何小鹏、向量数据库公司 Zilliz 栾小凡、钉钉叶军等 16 位创新者先后登台。