-
2016-03-10 15:37:52
加载完毕数据集后,还是不能直接进行数据挖掘模型的训练和学习,必须要进行数据预处理,数据预处理一般指的是以下四个方面:数据清理,数据集成,数据变换,数据归约等。
- 什么是数据预处理
①数据清理
数据清理例程通过填写缺失的值、光滑噪声数据、识别或删除离群点并解决不一致性来“清理”数据。主要是达到如下目标:格式标准化,异常数据清除,错误纠正,重复数据的清除。
②数据集成
数据集成例程将多个数据源中的数据结合起来并统一存储,建立数据仓库的过程实际上就是数据集成。
③数据变换
通过平滑聚集,数据概化,规范化等方式将数据转换成适用于数据挖掘的形式。
④数据归约
数据挖掘时往往数据量非常大,在少量数据上进行挖掘分析需要很长的时间,数据归约技术可以用来得到数据集的归约表示,它小得多,但仍然接近于保持原数据的完整性,并结果与归约前结果相同或几乎相同。
这些预处理都可以使用Weka的Filter来实现。Weka的Filter作用是将一个Instances输入后,通过特定的数据清洗过程,将清洗好的Instances输出,也就是说,Filter处理的维度是在Instances层面上进行的。你也可以通过Filter的组合来实现复杂的数据处理。- Filter提供的功能
FIlter功能还是比较强大的,但是Filter分为非监督学习和监督学习两种过滤器,分别属于weka.filters.unsupervised.attribute和weka.filters.unsupervised.attribute,至于监督学习和非监督学习,简单理解就是看输入数据是否有标签(label)。输入数据有标签,则为有监督学习,没标签则为无监督学习。这两种方式下的过滤器是不一样的,使用时一定要注意。
非监督学习包下的方法比较多,先讲解一下weka.filters.unsupervised.attribute主要方法的含义:
1.Add
为数据库添加一个新的属性,新的属性将会包含所有缺失值。
2.AddExpression
新增一个属性,该属性由现有属性通过设定的表达式计算得出。支持+, -, *, /, ^, log, abs, cos, exp, sqrt, floor, ceil, rint, tan, sin。现有属性由a+索引值构成。
3.AddNoise
只对名义属性有效,依照一定比例修改值。
4.Center
将数值化属性的平均化为0。
5.ChangeDateFormat
修改数据格式
6.Discretize
简单划分的离散化处理。参数:
7.MathExpression
功能和AddExpression类似,不过支持的运算更多,特别是MAX和MIN的支持特别有用。所有支持运算符如下:+, -, *, /, pow, log,abs, cos, exp, sqrt, tan, sin, ceil, floor, rint, (, ),A,MEAN, MAX, MIN, SD, COUNT, SUM, SUMSQUARED, ifelse
8.Reorder
重新排列属性,输入2-last,1可以让第一项排到最后,如果输入1,3,5的话…其他项就没有了
9.Standardize
这个和Center功能大致相同,多了一个标准化单位变异数
10.StringToNominal
将String型转化为Nominal型然后再讲一下weka.filters.unsupervised.instance包下的主要方法和含义:
1.NonSparseToSparse
将所有输入转为稀疏格式
2.Normalize
规范化整个实例集
3.RemoveFolds
交叉验证,不支持分层,如果需要的话使用监督学习中的方法
4.RemoveRange
移除制定范围的实例,化为NaN
5.Resample
随机抽样,从现有样本产生新的小样本
6.SubsetByExpression
根据规则进行过滤,支持逻辑运算,向上取值,取绝对值等等监督学习下虽然方法比较少,但是思路有所不同,主要是在有标签的情况下,很多方法诸如抽样就必须考虑不同数据分类的比例,因此会更加复杂一些,常用方法下次博客介绍。
- 如何使用Filter
下面讲解下如何使用Filter来进行数据预处理:
为了更加清楚,选一个比较简单的方法:规范化数据normalize作为例子,代码如下://假设已经有一个数据集tempData Normalize normalize = new Normalize(); String[] normalOptions = new String[]{"-S","2.0","-T","-1.0"}; normalize.setOptions(normalOptions); normalize.setInputFormat(tempData); newData = Filter.useFilter(tempData,normalize);
从以上代码可以看出,要使用Filter,必须要指定使用哪种Filter,然后要实例化Filter对象,在这之后要为这个特定的Filter指定好参数,参数在API里可以找到。具体参数不在赘述。然后调用Filter的useFilter()方法就可以返回处理好的Instances。
特别需要注意的是,一定要为Filter指定输入数据格式,setInputFormat(tempData),否则会报错。Filter功能很强大,你可以通过继承和实现Filter父类对象来实现自己的专属过滤器,通过重载方法,你可以做出你想要的功能。
更多相关内容 -
Weka数据预处理
2019-04-08 09:01:44Weka数据预处理(一) 对于数据挖掘而言,我们往往仅关注实质性的挖掘算法,如分类、聚类、关联规则等,而忽视待挖掘数据的质量,但是高质量的数据才能产生高质量的挖掘结果,否则只有"Garbage in garbage out"了。...Weka数据预处理(一)
对于数据挖掘而言,我们往往仅关注实质性的挖掘算法,如分类、聚类、关联规则等,而忽视待挖掘数据的质量,但是高质量的数据才能产生高质量的挖掘结果,否则只有"Garbage in garbage out"了。保证待数据数据质量的重要一步就是数据预处理(Data Pre-Processing),在实际操作中,数据准备阶段往往能占用整个挖掘过程6~8成的时间。本文就weka工具中的数据预处理方法作一下介绍。
Weka 主要支持一种ARFF格式的数据,含有很多数据过滤方法。关于ARFF格式文件,可以在此处了解详情。
Weka的数据预处理又叫数据过滤,他们可以在weka.filters中找到。根据过滤算法的性质,可以分为有监督的(SupervisedFilter)和无监督的(UnsupervisedFilter)。对于前者,过滤器需要设置一个类属性,要考虑数据集中类的属性及其分布,以确定最佳的容器的数量和规模;而后者类的属性可以不存在。同时,这些过滤算法又可归结为基于属性的(attribute)和基于实例的(instance)。基于属性的方法主要是用于处理列,例如,添加或删除列;而基于实例的方法主要是用于处理行,例如,添加或删除行。
数据过滤主要解决以下问题(老生常谈的):
数据的缺失值处理、标准化、规范化和离散化处理。
数据的缺失值处理:weka.filters.unsupervised.attribute.ReplaceMissingValues。对于数值属性,用平均值代替缺失值,对于nominal属性,用它的mode(出现最多的值)来代替缺失值。
标准化(standardize):类weka.filters.unsupervised.attribute.Standardize。标准化给定数据集中所有数值属性的值到一个0均值和单位方差的正态分布。
规范化(Nomalize):类weka.filters.unsupervised.attribute.Normalize。规范化给定数据集中的所有数值属性值,类属性除外。结果值默认在区间[0,1],但是利用缩放和平移参数,我们能将数值属性值规范到任何区间。如:但scale=2.0,translation=-1.0时,你能将属性值规范到区间[-1,+1]。
离散化(discretize):类weka.filters.supervised.attribute.Discretize和weka.filters.unsupervised.attribute.Discretize。分别进行监督和无监督的数值属性的离散化,用来离散数据集中的一些数值属性到分类属性。
下文将详细介绍一下Weka数据过滤类。
Weka数据预处理(二)
首先来看一下,有关属性—有监督过滤器。
AddClassification
该过滤器使用给定的分类器对原始数据添加分类标签,并给出类的分布以及关于原始数据集的错误分类标记。
其实就是利用分类算法对原始数据集进行预分类,其结果与在classify阶段得到的结果基本一致,同样包括分类的正确率等信息。
AttributeSelection
该过滤器,用于进行属性选择。根据给定的挖掘任务,利用合适的评估器,选择最有利于当前挖掘任务的属性。
ClassOrder
该过滤器用于改变的数据对象顺序,适用于binary对象和nominal对象。
Discretize
离散化过滤器,用于将连续属性离散化。使用频率非常高的一个过滤器,在实际应用当中,离散化也是很常见的数据预处理步骤。
NorminalToBinary
标称值转化为二分值。举个例子吧,看官请看下图,一目了然。
Nominal value
Binary value
下面谈到的是实例—有监督过滤器
Resample
让人又爱又恨的抽样过滤器。利用放回或者不放回方法抽取特定大小的随机样本。
抽样方法有很多种,基于水库的、链式抽样、分层抽样等等。
SMOTE
同样是抽样过滤器,叫综合少数过采样技术。他要求被采样的原始数据集必须全部存储在内存中。详细内容可以参考Synthetic Minority Over-sampling Technique。
SpreadSubsamp
该分类器需要得知类标是属性中的哪一个.当获得了类标之后,他会计算出类标属性的分布,同时,按照参数M,指定类标分布的最大差距,比如当给出参数W时,调整数据实例的权重。
注意,M参数设定值为l时,那么就认为是均匀分布,当设定为0的时候,那么不进行类标分布的拓展(SPread);如果设定大于l,那么这个值就表示了分布最大的类标属性(类标属性最为常见的值)和分布最小的属性(类标属性最为稀少的值)的分布的比例。
StratfiedRemoveFold
该过滤器简单的使用n重交叉验证的方法,将数据集进行分割,并返回按照参数指定的子集。
关于无监督方法的过滤器,可以参考:http://www.cnblogs.com/htynkn/archive/2012/04/02/weka_3.html
参考:
输入数据与ARFF文件--数据挖掘学习和weka使用(二)
数据预处理和weka.filters的使用--数据挖掘学习和weka使用(三)
weka数据预处理的更多相关文章
- 借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率
原文链接 简介 为发挥 SIMD1 的最大作用,除了对其进行矢量化处理2外,我们还需作出其他努力.可以尝试为循环添加 #pragma omp simd3,查看编译器是否成功进行矢量化,如果性能有所提升 ...
- R语言进行数据预处理wranging
R语言进行数据预处理wranging li_volleyball 2016年3月22日 data wrangling with R packages:tidyr dplyr Ground rules ...
- Scikit-Learn模块学习笔记——数据预处理模块preprocessing
preprocessing 模块提供了数据预处理函数和预处理类,预处理类主要是为了方便添加到 pipeline 过程中. 数据标准化 标准化预处理函数: preprocessing.scale(X, ...
- Deep Learning 11_深度学习UFLDL教程:数据预处理(斯坦福大学深度学习教程)
理论知识:UFLDL数据预处理和http://www.cnblogs.com/tornadomeet/archive/2013/04/20/3033149.html 数据预处理是深度学习中非常重要的一 ...
- R语言--数据预处理
一.日期时间.字符串的处理 日期 Date: 日期类,年与日 POSIXct: 日期时间类,精确到秒,用数字表示 POSIXlt: 日期时间类,精确到秒,用列表表示 Sys.date(), date( ...
- 对数据预处理的一点理解[ZZ]
数据预处理没有统一的标准,只能说是根据不同类型的分析数据和业务需求,在对数据特性做了充分的理解之后,再选择相关的数据预处理技术,一般会用到多种预处理技术,而且对每种处理之后的效果做些分析对比,这里面经 ...
- Python数据预处理—归一化,标准化,正则化
关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...
- sklearn数据预处理-scale
对数据按列属性进行scale处理后,每列的数据均值变成0,标准差变为1.可通过下面的例子加深理解: from sklearn import preprocessing import numpy as ...
- 第七篇:数据预处理(四) - 数据归约(PCA/EFA为例)
前言 这部分也许是数据预处理最为关键的一个阶段. 如何对数据降维是一个很有挑战,很有深度的话题,很多理论书本均有详细深入的讲解分析. 本文仅介绍主成分分析法(PCA)和探索性因子分析法(EFA),并给 ...
- 借助 SIMD 数据布局模板和数据预处理提高 SIMD 在动画中的使用效率
-
学习weka(7):weka数据预处理方法
2021-04-11 09:30:58weka 数据预处理阶段全部在 filter 上: 下面把一些常见的机器学习数据与处理方法处理说一下(下面所有实例都是在 Explorer 模块上进行的)。 2、数据预处理方法 可以看到其 filters 可以分为五类,重点是画红框的...1、前言
weka 数据预处理阶段全部在 filter 上:
下面把一些常见的机器学习数据与处理方法处理说一下(下面所有实例都是在 Explorer 模块上进行的)。
2、数据预处理方法
可以看到其 filters 可以分为五类,重点是画红框的部分:supervised 是有监督的,unsupervised 是无监督的;每一种往下分,又分为基于 attribute(属性列)和 instance(实例),基于属性列是按照列来进行操作的,基于实例是按照数据行进行操作的。
2.1 常见机器学习预处理方法
常见的机器学习预处理方法一般有缺失值处理、标准化、规范化、正则化和离散化,下面针对这几项一一记录一下。
2.1.1 缺失值处理
缺失值处理函数:weka.filters.unsupervised.attribute.ReplaceMissingValues,按照顺序可以在 filters 中找到,具体如下图:
其参数如下:
三个参数重点在 ignoreClass 上,这个是判断是否要对标签进行缺失值处理的参数。
实例
加载 weka 自带数据集:weather.nominal.arff,将其两个属性外加标签(默认最后一列为标签)编辑(在菜单中寻找 Edit…)为缺失值:
对其进行缺失值处理(使用默认参数):
可以看到,第 2 和 3 列属性缺失值都被填充完毕,而第 5 列则没有,这是为什么呢,来看一下官方解释:
Replaces all missing values for nominal and numeric attributes in a dataset with the modes and means from the training data. The class attribute is skipped by default.
翻译过来:是使用均值(数值型)和模式(我认为对于非数值则是数量最多的属性值填充)填充缺失值,默认跳过标签列(其中 ignoreClass 参数默认为 False)。
OK 了,将 ignoreClass 设置为 True,再进行一下缺失值处理:
2.1.2 标准化(standardize)
weka 中的类:weka.filters.unsupervised.attribute.Standardize
标准化给定数据集中所有数值属性的值到一个 0 均值和单位方差的正态分布。根据类包依赖顺序,在 filters 中找到其位置,查看一下参数:
和缺失值处理参数一样,不再细说。
实例
加载 weka 自带数据集:cpu.arff,处理之前原数据(参数为默认,一般标签数据是不会被标准化的):
处理之后:
2.1.3 规范化(normalize)
规范化所在类:weka.filters.unsupervised.attribute.Normalize。
数据规范化,可以将所有数据通过数据变换,转换到指定范围内。来看一下其参数:
除了 ignoreClass,重要参数为 scale 和 translation,这两个参数指定了转换范围,转换公式为:[translation,translation+scale]。比如,scale=2,translation 为-1,那么转换后的数据范围为:[-1,1]
需要注意的是:无论是规范化还是标准化都是以列为单位。
实例
加载 weka 自带数据集:cpu.arff,处理前数据集为:
规范化处理之后(默认参数):
2.1.4 离散化处理(discretize)
离散化所在类:weka.filters.supervised.attribute.Discretize 和 weka.filters.unsupervised.attribute.Discretize
分别是监督和无监督的数值属性的离散化,用来离散数据集中的一些数值属性到分类属性。
无监督离散化处理参数:
这里参数比较多,简要叙述一下:
- attributeIndices:属性索引,指定要执行的属性的范围,默认参数为“first-last”,表示所有列中离散列都会被选中,如果只是想选择某一列,直接输入数字即可,多列用逗号隔开。
- binRangePrecision:在生成 bin 标签时用于切割点的小数位数;
- bins:分段数,离散化后会将连续数据分为多段;
- debug:调试,如果设置为真,过滤器可以输出附加信息到控制台
- desiredWeightOfInstancesPerInterval:在每个间隔中等频绑定设置所需的实例权重
- doNotCheckCapabilities:如果设置为 true,则过滤器的功能在构建之前不会被检查(小心使用,以减少运行时间)
- findNumBins:使用 leave-one-out 优化等宽容器的数量,不适合于等频
- ignoreClass:是否忽略类标签索引
- invertSelection:反向选择,设置属性选择模式,如果是 false 则在范围内仅选择数值属性离散,如果是 true 则只有非选择的属性将被离散化
- makeBinary:生成二进制属性
- spreadAttributeWeight:生成二进制属性时,将旧属性的权重分散到新属性中。 不要为每个新属性赋予旧的权重。
- useBinNumbers:使用 bin 编号(如 BXofY),而不是使用范围
- useEqualFrequency:等频离散化,如果设置为真,则将使用等频而不是等宽
上面标黑的是需要注意的参数。
实例
加载 weka 自带数据集 weather.numeric.arff,原数据如下:
可以看到其连续属性只有两列,下面修改参数如下:
只修改了一项 bins,将其改为了 3,其他都是默认项,看一下离散化结果:
可以看到,两列连续性数据已经被离散化了(注意 attributeIndices 参数为所有,但是离散化只会选择连续性数据列),而且离散结果是 3 个——对应 bins
通过这个结果,可以看到离散化原理就是将连续数据分段,以分段范围定义为离散属性值,而连续值在哪个分段内就赋予那个分段范围值,比如 72,在 71-78 内,则其离散化后就成了 71-78。
我们更改一下 useBinNumbers 参数,再运行一遍(注意要加载原数据,当前数据已经不存在连续属性列,即便更参数运行,当前数据集也不会再发生变化):
可以看到其更改了名称,但是本质还是一样的,这个有一点不好的就是两列离散值是重复的,都是 B1of3,B2of3 和 B3of3。
OK,今天就到这里,更多精彩内容关注我的个人网站:蓝亚之舟博客。
-
数据挖掘—Weka 的数据库挖掘及数据预处理
2021-11-13 19:53:11基于 Weka 的数据库挖掘及数据预处理 ❤️大家好,我是java厂长,今天带你们了走进数据挖掘的世界????????!❤️ 关于作者 作者介绍 ???? 博客主页:作者主页 ???? 简介:JAVA领域优质创作者????、一名在校...基于 Weka 的数据库挖掘及数据预处理
❤️ 大家好,我是java厂长,今天带你们了走进数据挖掘的世界🚜🚜!❤️关于作者
- 作者介绍
🍓 博客主页:作者主页
🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉🏆。
🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻。
文章目录
1、双击下面的 exe 程序进行安装
网盘链接:https://pan.baidu.com/s/1pTNWBHq5qdL1GaeZUh4uSQ 提取码:wpzr
2、出现欢迎窗口
3、单击 next 按钮进入下一步
同意 GNU GPL 协议,选择 I Agree 按钮
4、进入选择安装组件,默认选择 FULL,再单击 next
5、 选择安装路径
6、选择开始菜单文件夹名称
这里是 weka 3.8.4,没有特殊要求不需更改,单击 Install 安装完成即可。
7、安装完成后,可生成如下文件
8、data 文件夹
这里需要看一下 data 文件夹,里面是 weka 自带 25个arff 文件作为测试数据集。
9、weka 的初步使用
在电脑的开始菜单里找到 Weka3.8.4 的子菜单,下面有三个菜单项,如下图,第一个菜单项:Documentation,提供weka 的参考资料,包括 Weka 手册、Java 包 API 文档及一些线资源。下面两个菜单项都可以启动Weka 界面,不同的是后者带有一个控制台的输出,而前者没有。
10、单击 weka3.8.4启动 weka 界面,并选择探索者界面 Explorer
进入探索者界面如下:
根据不同的功能把这个界面分成 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目录
-
查看自己数据库所兼容的jar包,这里我用的是5.1.49
-
配置环境变量
WEKA_HOME E:\environment\Weka-3-8-4
-
修改系统变量CLASSPATH
%WEKA_HOME%\lib\mysql-connector-java-5.1.49.jar
-
启动数据库运行,确保已建立名称为 weka 的数据库,并自行建表
-
修改以下目录中的 DatabaseUtils.props 文件(需要提前将 weka-3-8-4 文件夹下的 weka.jar 包解压才能找到)
以记事本打开该文件,文件内容如下:
# 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 值。
- 单击如下按钮,连接数据库,如果前面设置无误,会在 SQL 查看器下,出现数据库连接成功的提示
(3)查询 Weka 数据库中 student 表中的数据
注意:如果连接不上数据库,可按如下顺序依次查找:数据库驱动程序是否正确;CLASSPATH 的设置是否正确(用户变量);配置文件中的 jdbcDriver 和 jdbcURL 两项配置的拼写是否正确;配置文件是否放到了正确的路径;数据库用户名和密码是否正确;该数据库用户是否拥有足够的权限;数据库是否已经启动等其他问题。
12、使用 weka 进行数据预处理
Preprocess 标签可用于从文件、URL 或数据库中加载数据集,并且根据应用要求或领域知识过滤掉不需要进行处理或不符合要求的数
据。
(1)加载数据
- 单击 open file ,在 weka 的安装目录下选择 data 文件,打开 data 文件,选择 weather.nominal.arff 数据集。
- 加载数据后,出现如下数据信息:
(2)使用数据集编辑器修改数据
加载天气数据集后,单击 Preprocess 标签页中的 Edit 按钮,弹出如下对话框,列出全部天气数据。
在这个界面可以手动删除一些属性或者实例,或者修改数据
(3)使用过滤器删除属性
-
加载天气数据后,在 Filter 下单击 Choose 按钮
-
打开过滤器分层列表,如下图,有两种过滤算法,一种有监督,一种无监督,前者使用类别属性,后者不使用,继续往下是属性和实例,前者主要处理有关属性的过滤,后者处理有关实例的过滤。
-
适合删除属性的的过滤器是 Remove,我们在unsupervised(无监督)—>attribute—> Remove 条目,单击选择该过滤器,Choose 右侧文本框就会显示。Remove,如下图
- 再单击该文本框,打开通用对象编辑器对话框以设置参数,如下图
- 设置完参数,点击 Ok,回到以下界面,文本框显示:remove -R 2,含义是删除数据集中的第二个属性。单击右边的 Apply 过滤器生效。
- 可单击 edit 按钮,查看删除属性后的结果,但这种方法只能改变内存中的数据,不会影响数据集文件中的内容,要想保存该文件,可通过 save 按钮保存删除属性后的文件。
(4)使用过滤器添加属性
- 仍然是单击 Choose 按钮,依次 weka—>filter—>unsupervised(无监督)—>attribute—>AddUserFiledss过滤器
- 单击 Choose 旁边的文本框,打开通用对象编辑器对话框以设置参数,单击 New 按钮,设置属性名称为 mode,属性类型为 Nominal,其他不设置,单击 Ok
- 单击 Ok,出现如下,再单击 Apply,会发现属性选项组的属性表格中多了一个 mode 属性。
- 单击 Edit,打开 Vierwer 对话框,可以看到新增的属性并没有值
- 继续单击 Choose 按钮,选择unsupervised(无监督)—>attribute—>AddValues过滤器,单击该文本框,出现如下对话框,在 labels 标签设置 mode 的取值。
- 再次单击 Edit 按钮,打开 Viewer 对话框,如下图,可以看到新增的属性下拉列表框有取值了。
➢ 我们可以看到上表中 mode 属性在最后一列,这个天气数据集的最后一列应该是类别属性 play,根据其他条件属性的取值,比如晴天,温度/湿度适宜,没风等条件来判断是否适合外出运动,所以这里我们需要将 mode 属性和 play 属性调换一下位置。继续选择unsupervised(无监督)—>attribute—>Reorder过滤器,再单击 choose 旁边的文本框,弹出如下图,设置参数为 1,2,3,4,6,5 相当于将第五列和四列调换位置。
- 最后再单击 Edit 按钮,打开 Viewer 对话框,如下图,可以看到 mode 和 play 交换了位置。
(5)使用过滤器删除实例
A.选择
- choose—>weka—>filter—>unsupervised—>instance—>RemoveFolds过滤器
-
过滤器将数据集分割为给定的交叉验证折数,并指定输出第几折。点击Choose 旁边的文本框,弹出如下对话框
-
单击 ok-Apply,然后查看数据会发现,14 条数据只剩两条了
B.选择
-
choose—>weka—>filter—>unsupervised—>instance—>RemovePercentage过滤器
-
过滤器删除数据集中给定百分比的实例,点击 Choose 旁边的文本框,弹出如下对话框
-
单击 ok-Apply,然后查看数据会发现,14 条数据只剩 7 条了。
C.选择
-
choose—>weka—>filter—>unsupervised—>instance—>RemoveRange过滤器
-
过滤器删除数据集中给定范围的实例,点击 Choose 旁边的文本框, 弹出如下:
-
单击 ok-Apply,然后查看数据会发现,14 条数据只剩 11 条了,第 3-5条数据被删掉了。
应用:使用 weka 将数据离散化
Weka 中数据类型有标称型(nominal),只能取预定义值列表中的一个;数值型(numeric),只能是实数或整数;字符串类型(String),由双引号引用的任意长度的字符列表;还有日期型(Date)和 关系型(Relational)。
如果数据集包含数值型属性,所用的学习方案只能处理标称型属性的分类,则将数值型属性离散化是必要的。有两种类型的离散化技术-无监督离散和有监督离散化,前者不需要也不关注类别属性值,后者在创建间隔时考虑实例的类别属性值。离散化数值型属性的直观方法是将值域分隔为多个预先设定的间隔区间。
1、无监督离散化有等宽和等频离散化。
等宽离散化(等宽分箱):将数值型属性从最小值到最大值平均分为十份,即将数值从最小值到最大值分成 10 个区间,这样每个区间所包含的实例数量就各不相等,从而造成实例分布不均匀,有的间隔区域内包含很多个实例,但有的却很少甚至没有。
等频离散化:按数值型属性的大小顺序将全部实例平均分成十份,如 200 条实例,先按取值大小排好顺序,再每 20 条一份,分成十份。
下面以实例说明这两种方法的差异,首先,在 data 目录中找到玻璃数据集glass.arff 文件,如下图是玻璃数据集中各属性的含义。
将其加载至探索者界面,在 Preprocess标签页中查看 RI 属性直方图如下:
思考:RI 属性的直方图中各种颜色和各种数值代表什么?
等宽离散化
依次打开choose—>weka—>filters—>unsupervised—>attribute—>Discretize过滤器。保持默认参数不变,点击 Apply,出现如下图:
等频离散化
设置 Discretize 中的
值为 true。得到等频离散化后的 RI 属性,如下图:
我们可能会产生错觉,等频离散化后形成的直方图似乎会等高,但是有兴趣的可以自行看看 Ba,Fe 属性的等频离散化,是否会等高,思考为什么会这样。
2、有监督离散化
首先打开 data 数据集中的鸢尾花数据集,即 iris.arff 文件,数据集中各属性如下:
Weka 中打开 iris 数据集,显示如下图
依次点开choose—>weka—>filters—>supervised—>attribute—>Discretize,点击 Apply,,打开可视化窗口,发现各个属性的取值范围如下:
-
weka进行数据预处理
2015-04-06 14:27:09Weka同时也具有读入“.csv”格式文件的能力,在做数据挖掘中,很多时候数据是存储在excel的电子表格中,打开Excel文件,从File(文件)下拉菜单下选择Save As(另存为),在弹出的对话框中,最下边会有Save As type... -
Weka之预处理(preprocess)的使用
2019-10-10 23:42:071、打开Weka。 2、打开Explorer。 主要面板介绍: 3、点击左上方Open file,在数据集中选择weather.nominal.arff文件,再点击Edit。 打开文件后: 右下角为不同属性的Value的实例数量柱状图可视化,点击图... -
如何使用Weka对数据集colic.ORIG.arff进行数据预处理?
2018-10-17 08:39:44 共有28个属性 -
weka数据预处理
2014-04-03 23:09:00Weka数据预处理(一) 对于数据挖掘而言,我们往往仅关注实质性的挖掘算法,如分类、聚类、关联规则等,而忽视待挖掘数据的质量,但是高质量的数据才能产生高质量的挖掘结果,否则只有"Garbage in garbage out"了。... -
Weka平台设计的研究和其数据预处理功能的改进
2012-11-28 15:07:10分祈了weka的框架(architecture),剖析了、weka的各个包...逐就weka来源、功能、使用、输入输出、可视化、二次开发、扩展领域进行了简要介绍,指出了weka存在的主要问题,并对weka数据预处理的增强提出了改进的措施。 -
数据预处理和weka.filters的使用--数据挖掘学习和weka使用(三)
2021-03-13 15:23:20上一篇介绍了arff格式,这是weka专有格式,一般情况需要我们从其他数据源抽取或者获得。weka支持从cvs转化,也可以从数据库...数据预处理(data preprocessing)数据预处理(data preprocessing)是指在主要的处理以前对... -
weka之数据预处理
2014-08-13 16:27:27weka在做数据预处理的时候针对attribute提供了多种方式,包括值的各种转换,常用的如下: 1.缺失值处理 weka.filters.unsupervised.attribute.ReplaceMissingValues。 对于数值属性,用平均值代替缺失值,对于... -
weka机器学习-03-探索者(Explorer)界面及数据预处理
2020-11-04 20:52:37(1)Preprocess(预处理):选择数据集,以不同方式对其进行修改。 (2)Classify(分类):训练用于分类或回归的学习方案,并对其进行评估。 (3)Cluster(聚类):学习数据集聚类方案。 (4)Associate(关联)... -
weka数据预处理:使用weka将excel数据转换为arff格式数据
2014-07-28 16:03:04将.csv格式的数据转化成.arff格式数据: -
数据预处理和weka.filters的使用
2015-05-30 20:14:51来源: ...数据预处理(data preprocessing)是指在主要的处理以前对数据进行的一些处理。 现实世界中数据大体上都是不完整,不一致的脏数据,无法直接进行数据挖掘,或挖掘结果差强人意。 为了提高数 -
Weka中数据预处理的技术方法
2019-07-16 14:49:37目录 1 聚集 2 抽样 3 维度归约 4 属性选择 5 属性创建 ...如果处理全部数据的开销太大,数据预处理可以使用抽样,只选择数据对象的子集进行分析。抽样方法有很多种,例如简单随机抽样和分层抽样。... -
weka---数据预处理
2015-05-10 18:14:55数据预处理包括数据的缺失值处理、标准化、规范化和离散化处理。 1、数据的缺失值处理:weka.filters.unsupervised.attribute.ReplaceMissingValues。 对于数值属性,用平均值代替缺失值,对于nominal属性,用它... -
weka数据集预处理
2016-09-27 17:52:581. 利用有监督的离散算法对数据集的属性进行离散,并保存离散后的数据集; import java.io.File; import weka.filters.SupervisedFilter; import java.io.IOException; import weka.core.Instances; import ... -
在JAVA中使用weka:预处理使用过滤器
2015-04-09 14:18:29NumericToNominal filter=new NumericToNominal(); String options[]=new String[2]; options[0]="-R"; options[1]="3,10";filter.setOptions(options); DataSource dataSource=new DataSource(trainFile[0].getAbso -
数据挖掘实验——认识数据与进行数据预处理
2021-03-21 19:38:37认识数据与进行数据预处理的实验 实验内容和目的: 根据老师给出的代码进行复现和运行,实现——对一个数据集进行分析,包括归一化操作、缺失值处理、特征筛选,从而达到认识数据并进行数据预处理的目的。 实验数据... -
个人推荐的Weka教程,包含了数据格式、数据准备、分类和聚类Demo
2011-12-13 21:11:20WEKA的全名是怀卡托智能分析环境(Waikato Environment for Knowledge Analysis),它的源代码可通过http://www.cs.waikato.ac.nz/ml/weka得到 ... WEKA作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖... -
weka-实现数值数据的离散化
2018-12-04 22:06:21weka-实现数值数据的离散化 -
数据预处理和weka.filters的使用--数据挖掘学习和weka使用
2016-04-19 17:32:38http://www.cnblogs.com/htynkn/archive/2012/04/02/weka_3.html -
通过weka.jar包来进行数据预处理
2015-07-03 12:48:23程序中的数据也是用的weka自带的数据。 扩展:eclipse添加jar包的操作方法: 打开eclipse ,在对应的工程下右击,选择Build Path ->选择Configure Build Path ->选择Libraries ->点击Add External JARs ->然后到你... -
weka数据挖掘之预处理
2016-11-24 20:58:58weka数据挖掘之预处理数据挖掘是在大量的、潜在有用的数据中挖掘出有用模式的过程,因此,源数据的质量直接影响到挖掘的效果,高质量的数据是有效挖掘的前提。但是,肯定是,不是所有的数据都是那么理想。由于无法在... -
Java编程实现WEKA数据文件的生成
2021-03-09 04:16:28WEKA(WaikatoEnvironmentforKnowledgeAnalysis)是Waikato大学研究的开放源码的免费使用的一款流行的数据挖掘平台,作为一个公开的数据挖掘工作平台,其中集成了大量能承担关联规则挖掘、分类、聚类等数据挖掘任务的... -
How-to-install-Weka:如何安装Weka进行数据挖掘任务?
2021-03-08 11:49:4375用于数据预处理 25个辅助功能选择 20个用于聚类,查找关联规则等 两种版本的Weka Weka有两个版本:Weka 3.8是最新的稳定版本,而Weka 3.9是开发版本。 这两个版本的新版本通常每年发布一次或两次。 对于前沿技术...