相关文章推荐
英俊的毛衣  ·  [ npm ERR! code 1 ] ...·  4 月前    · 
瘦瘦的电池  ·  matplotlib ...·  9 月前    · 
睿智的玉米  ·  vscode / idea ...·  1 年前    · 
刚分手的花生  ·  sourcetreeapp.com ...·  1 年前    · 

Data Mining with Weka

1.1 Introduction

Data Mining with Weka MOOC - Material

Weka是新西兰特有的 物种,它是一种不会飞的小鸟

Waikato Environment for Knowledge Analysis (Weka)是数据挖掘的工具包
Weka是基于Java写出来的

要学习只听讲是不够的,还得动手去做

1.2 Exploring the Explorer

  • Preprocess 预处理面板
  • Classify 分类面板(用于对数据的分类)
  • Cluster 聚类面板(用于对数据的聚类)
  • Associate 关联规则
  • Select attributes 特征选择
  • Visualize 可视化面板

1.5 Using a filter

过滤器:
Filters can be very powerful 合适的过滤可以提高分类的准确度并且使分类结果更加清晰

Undo撤销
Save保存过滤的数据集

(1) 选择 unsupervised learning 中的Remove,选择下标3删除原来的Humidity属性

(2) 删除所有Humidity属性为high的实例
选择unsupervised learning/instance/RemoveWithValues

(3) 删除某些属性可能提高分类算法的分类准确率
例如glass数据集,我删除特征Fe和Si,再用分类算法J48,得到的分类准确率比原来要高

1.6 Visualizing your data

Visualize显示的是你当前文件给的数据的属性可视化图形,这是已知的数据,不同的颜色是根据已知不同数据所属的class来标记的(所以这个可视化图在你使用分类算法前已经有了)

对监督学习的理解:
我们已知的数据是取自无限总体的独立样本,那如果我根据这些有限的数据去预测未知数据,那必然会有一定误差,比如下图,你假设一个菱形区域(这其实就是分类算法得到的区域)把红色的实例全包起来,然后你说对于一个未知的数据只要是在这个菱形区域内的那我就认为它是红色的,这就是机器学习

而现实中可能所有红色的实例包起来是一个圆形或不规则区域,那我们在预测中势必有一定的误差

2.1 Be a classifier

用户分类器UserClassifier
根据可视化结果,尝试实例空间的不同区域,找纯度最高的区域来建立纯度最高的分支,这种是自底向上的做法
而J48分类器则不是基于这样一个策略的,它是每次将数据集一分为二,自顶向下,将每次剩下的一般数据建成最优化的树形,它所创建的树比我们刚刚用用户分类器所建的要好

2.2 Training and testing

使用不同的测试数据和训练数据是十分重要的,因为只有这样,你才能得到可信的评估结果

拿到一个数据集我们一般会把它分成两部分,训练集(Training)和测试集(Testing), 训练集和测试集都是分别取自无限总体的独立样本 ,并且他们是不同的数据

使用segment-test.arff测试集,并用J48分类器对这些数据进行预测,可以发现这个分类器的准确度为97.4074%

A 实例数 C
Correctly Classified Instances 789 97.4074 %
Incorrectly Classified Instances 21 2.5926 %

Test Options-Percentage Split 按比例划分当前打开的数据集,为训练集和测试集,这里是9比1

显示的结果是测试集的预测结果,测试集中有一个实例预测错误

相同的分隔比例会得到同样的结果,那是因为Weka初始化了随机生成器,这主要是为了保证你明天做这个实验时得到的还是相同的结果

注:一般不建议用training set去做测试,因为这会带来比较大的误差

2.3 Repeated training and testing

通过设置不同的seed,使同一个划分比例,能来生成多个结果,然后我们再取平均值,方差和标准差,使得实验结果更加可靠

平均值 Mean

2.5 Cross-validation

Cross-validation交叉验证可以降低评估误差

Repeated holdout 重复预留法(2.3)
选择9:1的训练集和测试集的比例,然后更改种子,重复10次

交叉验证原理
在交叉验证中,我们只分割一次,但是我们分成10份,然后用其中的9份作为训练集,剩余的一份作为测试集,接着还是用之前分隔好的数据,我们再选择另外的一组9份作为训练数据,剩余的一份作为测试集,我们这样重复10次,每次都是用分割出的不同的数据作为测试集。最后取这十次结果的平均,这就是10层交叉验证

Test option > Cross-validation Folds 10

  • Cross‐validation really is better than repeated holdout
  • It reduces the variance of the estimate

3.1 Simplicity first

There are many kinds of simple structure eg:

  • One attribute does all the work
  • Attribute contribute equally and independently
  • A decision tree that tests a few attributes
  • Calculate distance from training instances

rules.OneR:一个属性决定一切

OneR的基本原理:

  • 我们选择某个属性(如Outlook)开始,然后为它的每个值建立一个分支
  • 将这个分支(如Sunny)所含的最多的类(如No)作为它的分类
  • 错误率是在这个分支中不属于最多分类的实例的比例
  • 我们选择错误率(Total errors)最小的属性

我们建立一棵只在根结点根据某个属性分叉的树
例如天气数据集,我们将展望、温度、湿度、风速建立一组规则
Outlook有三个分类值 Sunny, Rainy, Overcast

任何机器学习算法都有可能过度拟合训练数据

当创建的分类器过度拟合训练数据时,就很难推广到独立的测试数据

Our model doesn’t generalize well from our training data to unseen data.

This is known as overfitting, and it’s a common problem in machine learning and data science.

过拟合(overfitting)与欠拟合(underfitting)是统计学中的一组现象。过拟合是在统计模型中,由于使用的 参数过多 而导致模型对观测数据(训练数据)过度拟合,以至于用该模型来预测其他测试样本输出的时候与实际输出或者期望值相差很大的现象。欠拟合则刚好相反,是由于统计模型使用的参数过少,以至于得到的模型难以拟合观测数据(训练数据)的现象。

我们总是希望在机器学习训练时,机器学习模型能在新样本上很好的表现。过拟合时,通常是因为模型过于复杂,学习器把训练样本学得“太好了”,很可能 把一些训练样本自身的特性当成了所有潜在样本的共性了 ,这样一来模型的泛化性能就下降了。欠拟合时,模型又过于简单,学习器没有很好地学到训练样本的一般性质,所以不论在训练数据还是测试数据中表现都很差。我们形象的打个比方吧, 你考试复习,复习题都搞懂了,但是一到考试就不会了,那是过拟合;如果你连复习题都还没搞懂,更不用说考试了,那就是欠拟合。所以,在机器学习中,这两种现象都是需要极力避免的

它对于训练数据非常准确,但是却很难适用于独立的测试数据。因为它规则过度(参数过多)拟合训练数据,它就很难推广到独立的测试数据——这就是一个过拟合的例子

3.3 Using probabilities

Naive Bayes: Use all the attributes
假设在决策过程中,所有属性是有平等的、独立的贡献。
独立指的是根据已知属性的值不能推测出其他属性的值。

Independence assumption is never correct!
But … often works well in practice

可以看到Weka对每个实例都加了个1,这是为了防止有些实例的概率是0,从而使最终结果为0

对于零次数问题 zero-frequency-problem, Weka的最常用的解决方案是在对每个数加1

3.4 Decision trees

J48是自上而下的归纳决策树(基于信息论去选择属性)
决策树算法原理:

Top‐down: recursive divide‐and‐conquer

  • Select attribute for root node
    Create branch for each possible attribute value
  • Split instances into subsets
    One for each branch extending from the node
  • Repeat recursively for each branch
    using only instances that reach the branch
  • Stop
    if all instances have the same class

每次选择信息增益做多的属性(你可以用很多标准来选择属性,这里使用的是信息增益)

需要修剪的情况是:原始的未修剪的决策树过度拟合训练数据集

如何剪枝How to prune?

  • Don’t continue splitting if the nodes get very small (J48 minNumObj parameter, default value 2)
  • Build full tree and then work back from the leaves, applying a statistical test at each stage
    (confidenceFactor parameter, default value 0.25)
  • Sometimes it’s good to prune an interior node, raising the subtree beneath it up one level
    (subtreeRaising, default true)
  • Messy … complicated … not particularly illuminating

修剪后决策树的结点变少,而且预测实例的准确率会更高,所以Weka默认是修剪的

修剪方法经常会大大简化决策树,就像乳腺癌 breast-cancer 例子

修剪pruning实际上是防止过拟合的一个通用技术

一般来说,J48是一个常见的有效的数据挖掘算法

3.6 Nearest neighbor

最近邻机器学习方法(基于实例的学习方法)

这个算法只记忆训练实例,然后为了给新的实例分类,寻找训练数据集汇总与新实例最相似的实例

To classify a new instance, search training set for one that’s “most like” it

  • the instances themselves represent the “knowledge”
  • lazy learning: do nothing until you have to make predictions
  • “Instance‐based” learning = “nearest‐neighbor” learning

(最近邻算法)

如果是名词类属性,我们需要定义不同的属性之间的差异,通常人们认为属性值不同的距离是1,属性值相同的距离是0

怎么处理有噪音的数据集?
如果遇到了分类错误的训练实例作为测试实例最邻近的实例怎么办

Nearest-neighbor —> k-nearest-neighbors

k-nearest-neighbors
– choose majority class among several neighbors (k of them)

In Weka
Lazy.IBk (instance-based learning)
在Weka中k近邻算法叫做IBk,这是一种懒惰学习方法

Investigate effect of changing k

  • Glass dataset
  • lazy.LBk k = 1, 5, 20
  • 10-fold cross-validation
k=1 k=3 k=5 k=10
70.6% 72.0% 67.8% 66.4%

这应该不是一个有很多噪音的数据集,若果我们有一个充满噪音的数据,你会发现随着k的增大,准确率会提高,然后最后准确率总是会开始降低的

如果我们把k设为一个极值,接近整个数据集的大小
算出测试实例到所有训练实例的距离,并且求平均值,可以我们就可以得到这个数据集的基线准确率(可以用ZeroR验证)

4.1 Classification boundaries

显示分类算法的边界

(k=5时的图例)

IBK投票来决定:如果有三个红点、两个绿点,就会是红色区域,也就是说如果测试数据在这个位置那它就是属于红色属性

因此我们会得到一个模糊的边界,这就是分解的概率化的描述

可视化帮助我们像机器学习法一样思考

下图是Naive Bayes的边界可视化图

(Naive Bayes边界可视化)

(J48边界可视化)

注意:这种可视化仅限数值属性和二维视图
Visualization restricted to numeric attributes, and 2D plots

4.2-4.6 Linear Regression…

之前讨论的都是预测一个名词值(分类问题),现在开始讨论预测一个数字值(回归问题)

5.1 The data mining process

数据挖掘的过程

最大的问题是提出合适的问题,你需要做的是回答这个问题,而不是盲目地处理数据

然后你需要收集些你能收集到的,能用数据挖掘技术帮助你回答这个问题的数据

收集数据是很难的 ,你可能有一个初始数据集,但是你可能需要增加一些人口数据、气候数据等,你可以上网搜索一些信息来补充你的数据集,然后你把所有这些组合起来:创建一个数据集,它包括了你认为有必要(Weka需要的)的数据

接着你需要 清理数据 :坏消息是现实生活中的数据总是非常杂乱,研究数据、理解数据、找出异常、确定是否提出些数据是一个漫长而痛苦的过程,这会花费一些时间

然后你需要 定义一些新的特征 :这是特征工程的过程,是数据挖掘能够成功的关键步骤

最后使用Weka,你可能需要重复这个循环几次,才能得到好的分类算法,然后你需要在现实世界中使用算法

Ask a question

  • what do you want to know?
  • “tell me something cool about the data” is not enough!

Gather data

  • there’s soooo much around …
  • … but … we need (expert?) classifications
  • more data beats a clever algorithm

Clean the data

  • real data is very mucky

Define new features

  • feature engineering—the key to data mining

Deploy the result

  • technical implementation
  • convince your boss!

特征工程的一些过滤器:可以自定义特征或属性
(Selected) filters for feature engineering
AddExpression (MathExpression)

  • Apply a math expression to existing attributes to create new one (or modify existing one)

Center (Normalize) (Standardize)

  • Transform numeric attributes to have zero mean (or into a given numeric range) (or to have zero mean and unit variance)

Discretize (also supervised discretization)

  • Discretize numeric attributes to have nominal values

PrincipalComponents

  • Perform a principal components analysis/transformation of the data

RemoveUseless

  • Remove attributes that do not vary at all, or vary too much

TimeSeriesDelta, TimeSeriesTranslate

  • Replace attribute values with successive differences between this instance and the next

(自定义属性)

Weka is only a small part (unfortunately)

“may all your problems be technical ones” – old programmer’s blessing

5.2-5.4 Summary…

Future Work

  • Learn 4.2-4.6 and 5.2-5.4
  • Learn Advanced Data Mining with Weka
  • Learn More Data Mining with Weka
文章目录1.1 Introduction1.2 Exploring the Explorer1.3 Exploring datasets1.4 Building a classifier1.5 Using a filter1.6 Visualizing your data2.1 Be a classifier2.2 Training and testing2.3 Repeated training...
NumericToNominal 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
本文 使用的 weka 版本为3.6版本,参阅的API也是3.6的 相关的包( weka .jar, weka - src.jar,libsvm.jar.wlsvm.jar)可以在以下链接下载: http://pan.baidu.com/s/1kTHW3un 在Eclipse项目 导入 weka 包,本文 使用BP神经网络的算法,只用添加 weka .jar即可,若要使用libsvm的算法,还需要添加libs
1、注意待预测数据集和训练用数据集各个属性的设置必须是一致的。即使你没有待预测数据集的Class属性的值,你也要添加这个属性,可以将该属性在各实例上的值均设成缺失值。比如你可以将欲预测的类别设为?即缺失值。 2、在“Test Opion” 选择“Supplied test set”,并且“Set”成你要 应用 模型的数据集。 3、右键点击“Result list” 刚产生的那一项,选择“...
训练数据经过机器 学习 算法(ML Algorithm)可以得到分类器,再将测试数据放入分类器,则可得到评估结果。 训练集和测试集应来源于同一个数据集,但为两个不相交的集合。比如:将一个数据集的1/3作为测试集,2/3作为训练集。 接下来通过一个简单的实验进一步理解训练与测试数据: 1、打开Explorer界面,选择数据集segment - challenge.arff。
### 回答1: weka - 3 - 8 - 6 - azul - zulu - windows.exe是一款用于 数据挖掘 和机器 学习 的免费开源软件 Weka 的安装程序。它采用了Azul Zulu OpenJDK平台,可在Windows系统上运行。 Weka 可以处理各种数据,并提供大量 数据挖掘 和机器 学习 算法,以帮助用户发现数据 的规律和模式。它还具有图形用户界面和命令行界面,使其易于使用。 Weka 被广泛用于学术界和工业界,它的 应用 包括医疗、金融、商业和社交媒体等领域。对于那些对 数据挖掘 和机器 学习 感兴趣的人来说, Weka 是一个强大的工具,可以帮助他们分析和理解数据。 ### 回答2: weka - 3 - 8 - 6 - azul - zulu - windows.exe 是一款开源的机器 学习 软件 WeKa 的安装包,适用于Windows操作系统。 WeKa 是由新西兰Waikato大学开发的一款 数据挖掘 工具,它提供了一系列的机器 学习 算法和数据预处理工具,包括分类、聚类、回归等常见的算法。azul - zulu是一款Java运行时环境,用于运行基于Java编写的 应用 程序。因此, weka - 3 - 8 - 6 - azul - zulu - windows.exe 包含了 WeKa 软件及其所需的Java运行时环境。 下载 weka - 3 - 8 - 6 - azul - zulu - windows.exe后,用户可以通过简单的安装流程将 WeKa 软件及其依赖的Java环境安装到自己的电脑上。安装完成后,用户可以通过 WeKa 提供的图形界面或者命令行界面进行 数据挖掘 和机器 学习 任务的分析和建模。 WeKa 被广泛 应用 数据挖掘 和机器 学习 领域,可以帮助用户处理和分析各种类型和规模的数据集。同时, WeKa 还提供了丰富的文档和示例,方便用户 学习 和使用。总之, weka - 3 - 8 - 6 - azul - zulu - windows.exe是一款非常实用的 数据挖掘 工具软件,可以帮助用户掌握和 应用 机器 学习 技术,从而更好地处理和分析数据。
Pytorch踩坑记:赋值、浅拷贝、深拷贝三者的区别以及model.state_dict()和model.load_state_dict()的坑点 weixin_45695267: 所以我在联邦学习时要聚合的参数是从statedict里面找吗