美文网首页
Weka在数据挖掘中的运用 04 Buiding a class

Weka在数据挖掘中的运用 04 Buiding a class

作者: jenye_ | 来源:发表于2020-10-02 11:29 被阅读0次

使用J48来分析数据集

  • 打开文件 glass,arff
  • 检查可用的分类器
  • 选择J48决策树学习器
  • 运行
  • 审查输出
  • 查看正确分类的实例和the confusion matrix

打开glass.arff 检查可用的分类器

选择合适的分类器


Weka内置了很多分类器,我们选择决策树分类器:




点击Start就开始运行了:



稍等一会儿就得到了分类的结果:

Weka把整个分类的过程都进行了封装,所以整个过程十分简单,关键在于现在要理解运行之后得到的结果。


运行结果的分析

运行结果如下:

第一部分是数据集的一些信息:

=== Run information ===

Scheme:weka.classifiers.trees.J48 -C 0.25 -M 2
Relation:     Glass
Instances:    214
Attributes:   10
              RI
              Na
              Mg
              Al
              Si
              K
              Ca
              Ba
              Fe
              Type
Test mode:10-fold cross-validation

实例和属性的数量

接下来是决策树的示意图:

=== Classifier model (full training set) ===

J48 pruned tree
------------------

Ba <= 0.27
|   Mg <= 2.41
|   |   K <= 0.03
|   |   |   Na <= 13.75: build wind non-float (3.0)
|   |   |   Na > 13.75: tableware (9.0)
|   |   K > 0.03
|   |   |   Na <= 13.49
|   |   |   |   RI <= 1.5241: containers (13.0/1.0)
|   |   |   |   RI > 1.5241: build wind non-float (3.0)
|   |   |   Na > 13.49: build wind non-float (7.0/1.0)
|   Mg > 2.41
|   |   Al <= 1.41
|   |   |   RI <= 1.51707
|   |   |   |   RI <= 1.51596: build wind float (3.0)
|   |   |   |   RI > 1.51596
|   |   |   |   |   Fe <= 0.12
|   |   |   |   |   |   Mg <= 3.54: vehic wind float (5.0)
|   |   |   |   |   |   Mg > 3.54
|   |   |   |   |   |   |   RI <= 1.51667: build wind non-float (2.0)
|   |   |   |   |   |   |   RI > 1.51667: vehic wind float (2.0)
|   |   |   |   |   Fe > 0.12: build wind non-float (2.0)
|   |   |   RI > 1.51707
|   |   |   |   K <= 0.23
|   |   |   |   |   Mg <= 3.34: build wind non-float (2.0)
|   |   |   |   |   Mg > 3.34
|   |   |   |   |   |   Si <= 72.64
|   |   |   |   |   |   |   Na <= 14.01: build wind float (14.0)
|   |   |   |   |   |   |   Na > 14.01
|   |   |   |   |   |   |   |   RI <= 1.52211
|   |   |   |   |   |   |   |   |   Na <= 14.32: vehic wind float (3.0)
|   |   |   |   |   |   |   |   |   Na > 14.32: build wind float (2.0)
|   |   |   |   |   |   |   |   RI > 1.52211: build wind float (3.0)
|   |   |   |   |   |   Si > 72.64: vehic wind float (3.0)
|   |   |   |   K > 0.23
|   |   |   |   |   Mg <= 3.75
|   |   |   |   |   |   Fe <= 0.14
|   |   |   |   |   |   |   RI <= 1.52043: build wind float (36.0)
|   |   |   |   |   |   |   RI > 1.52043: build wind non-float (2.0/1.0)
|   |   |   |   |   |   Fe > 0.14
|   |   |   |   |   |   |   Al <= 1.17: build wind non-float (5.0)
|   |   |   |   |   |   |   Al > 1.17: build wind float (6.0/1.0)
|   |   |   |   |   Mg > 3.75: build wind non-float (10.0)
|   |   Al > 1.41
|   |   |   Si <= 72.49
|   |   |   |   Ca <= 8.28: build wind non-float (6.0)
|   |   |   |   Ca > 8.28: vehic wind float (5.0/1.0)
|   |   |   Si > 72.49
|   |   |   |   RI <= 1.51732
|   |   |   |   |   Fe <= 0.22: build wind non-float (30.0/1.0)
|   |   |   |   |   Fe > 0.22
|   |   |   |   |   |   RI <= 1.51629: build wind float (2.0)
|   |   |   |   |   |   RI > 1.51629: build wind non-float (2.0)
|   |   |   |   RI > 1.51732
|   |   |   |   |   RI <= 1.51789: build wind float (3.0)
|   |   |   |   |   RI > 1.51789: build wind non-float (2.0)
Ba > 0.27
|   Si <= 70.16: build wind non-float (2.0/1.0)
|   Si > 70.16: headlamps (27.0/1.0)

Number of Leaves  :     30

Size of the tree :  59


Time taken to build model: 0.01 seconds

这个树之后再解释,我们可以看到这棵树有30个叶子节点,59个节点

Number of Leaves  :     30

Size of the tree :  59

接下来我们可以看到总结//:

=== Summary ===

Correctly Classified Instances         143               66.8224 %
Incorrectly Classified Instances        71               33.1776 %
Kappa statistic                          0.55  
Mean absolute error                      0.1026
Root mean squared error                  0.2897
Relative absolute error                 48.4507 %
Root relative squared error             89.2727 %
Total Number of Instances              214     

可以准确率为66.8%。

在窗口的最下面是混淆矩阵

=== Confusion Matrix ===

  a  b  c  d  e  f  g   <-- classified as
 50 15  3  0  0  1  1 |  a = build wind float
 16 47  6  0  2  3  2 |  b = build wind non-float
  5  5  6  0  0  1  0 |  c = vehic wind float
  0  0  0  0  0  0  0 |  d = vehic wind non-float
  0  2  0  0 10  0  1 |  e = containers
  1  1  0  0  0  7  0 |  f = tableware
  3  2  0  0  0  1 23 |  g = headlamps

行坐标表示被分类的实例正确的类型,纵坐标表示分类的结果。
例如:我们有7种不同的玻璃
矩阵第一行也就是类型为a的玻璃,看到:

  a  b  c  d  e  f  g   <-- classified as
 50 15  3  0  0  1  1 |  a = build wind float

分类器的分类结果50个实例的类别为a,是正确的分类,15个实例为b( build wind non-float)这是错误的分类。

这就是混淆矩阵,大部分实例都在对角线上,这是我们希望看到的结果(大部分都正确分类)。每个不在对角线上的实例都表示一个错误的分类结果。


配置分类器


点击选择的分类器进入配置面板。

这里不介绍所有的参数,我们以unpruned(pruned:剪枝)为例。
unpruned的默认值为false,也就以为着我们刚刚建立的是经过剪枝的决策树,我们可以把参数改为True重新运行。
我们可以看到这次得到的准确率为:
Correctly Classified Instances         144               67.2897 %

查看之前的运行数据:


Correctly Classified Instances         143               66.8224 %

===
TODO:
这里我自己有些问题:1. 剪枝应该不影响分类结果为什么准确度会不同

  1. 查看了树的规模(节点的个数),剪枝和不剪枝的规模为什么
    ===

接下来我们看下一个参数,minNumObj,表示每个叶节点所含实例的最少数量。



我们把默认的2改成15以得到更大的叶子节点。
我们回到之前的输出



括号里面有两个数字表示了这个叶子节点包含了两个值,这个叶子包含1个错误的分类实例和5个正确分类实例。
可以看到这些叶子节点只包含很少的实例,有的只含2、3个实例。

现在我们设置了叶子节点包含的最小的实例个数,重新运行:

J48 unpruned tree
------------------

Ba <= 0.27
|   Mg <= 2.41
|   |   K <= 0.12: tableware (15.0/6.0)
|   |   K > 0.12: containers (20.0/8.0)
|   Mg > 2.41
|   |   Al <= 1.41
|   |   |   RI <= 1.51727: vehic wind float (16.0/9.0)
|   |   |   RI > 1.51727
|   |   |   |   K <= 0.23: build wind float (27.0/8.0)
|   |   |   |   K > 0.23
|   |   |   |   |   Mg <= 3.66: build wind float (41.0/5.0)
|   |   |   |   |   Mg > 3.66: build wind non-float (16.0/3.0)
|   |   Al > 1.41: build wind non-float (50.0/10.0)
Ba > 0.27: headlamps (29.0/3.0)

Number of Leaves  :     8

Size of the tree :  15


Time taken to build model: 0 seconds

=== Stratified cross-validation ===
=== Summary ===

Correctly Classified Instances         131               61.215  %

现在我们得到了一个61%的准确率和一个更小的决策树。

可视化决策树


右击输出结果,选择Visualize tree,得到一个可视化的决策树:


窗口太小,决策树的结构看不清,把窗口拉大 然后右击窗口,点击Fit to Screen:



这个可视化决策树和我们输出窗口中的是同一棵树,只是另外一种表示形式:

J48 unpruned tree
------------------

Ba <= 0.27
|   Mg <= 2.41
|   |   K <= 0.12: tableware (15.0/6.0)
|   |   K > 0.12: containers (20.0/8.0)
|   Mg > 2.41
|   |   Al <= 1.41
|   |   |   RI <= 1.51727: vehic wind float (16.0/9.0)
|   |   |   RI > 1.51727
|   |   |   |   K <= 0.23: build wind float (27.0/8.0)
|   |   |   |   K > 0.23
|   |   |   |   |   Mg <= 3.66: build wind float (41.0/5.0)
|   |   |   |   |   Mg > 3.66: build wind non-float (16.0/3.0)
|   |   Al > 1.41: build wind non-float (50.0/10.0)
Ba > 0.27: headlamps (29.0/3.0)

Number of Leaves  :     8

Size of the tree :  15


在分类器配置面板当中的More,可以让你了解更多关于该分类器的信息,这对于你使用分类器是很有帮助的:




J48


决策树算法从ID3开始发展,在C4.8之后就商业化了,之前是开源的。
在Weka中使用了C4.5的最后一个版本(也就是C4.8),用JAVA重写了算法,所以称为J48



C4.5算法 详细内容 TODO:待补充


相关文章

网友评论

      本文标题:Weka在数据挖掘中的运用 04 Buiding a class

      本文链接:https://www.haomeiwen.com/subject/hscfuktx.html