﻿1
00:00:18,109 --> 00:00:20,490
大家好！如果你做了上节课的练习，

2
00:00:20,490 --> 00:00:23,150
你可能已经对花有了更多的了解。

3
00:00:23,150 --> 00:00:26,509
本次课程，课程1.4， 我们要建立

4
00:00:26,509 --> 00:00:28,810
一个分类器。

5
00:00:28,810 --> 00:00:30,349
我们将使用一个叫J48的系统，

6
00:00:30,349 --> 00:00:35,730
稍后，我会给大家解释一下“J48”名字的由来

7
00:00:35,730 --> 00:00:38,450
来分析我们上节课用过的玻璃

8
00:00:38,450 --> 00:00:41,820
数据。

9
00:00:41,820 --> 00:00:44,990
我已读入了玻璃数据。

10
00:00:44,990 --> 00:00:49,180
然后，进入分类器面板

11
00:00:49,180 --> 00:00:52,590
选择一种分类器。

12
00:00:52,590 --> 00:00:56,750
Weka提供多种分类器，例如

13
00:00:56,750 --> 00:01:01,310
贝叶斯分类器，函数分类器，懒惰分类器，元分类器，等等。

14
00:01:02,000 --> 00:01:08,890
接下来，我们使用的是决策树分类器。 J48是一个决策树分类器。我们打开分类器菜单，

15
00:01:08,890 --> 00:01:10,700
单击J48。

16
00:01:10,700 --> 00:01:15,240
这就是J48分类器。

17
00:01:15,240 --> 00:01:19,590
让我们运行它。选定了数据集和分类器，点击“start”，

18
00:01:19,590 --> 00:01:21,040
等一会儿，

19
00:01:21,040 --> 00:01:22,430
我们就得到分类结果。

20
00:01:22,430 --> 00:01:24,290
这有点不可思议

21
00:01:24,290 --> 00:01:26,270
weka使得

22
00:01:26,270 --> 00:01:27,650
整个过程变得如此简单。

23
00:01:27,650 --> 00:01:30,130
关键是要理解你所得到的结果。

24
00:01:30,130 --> 00:01:32,190
我们来看一下。

25
00:01:32,190 --> 00:01:35,390
这里是玻璃数据的一些信息，

26
00:01:35,390 --> 00:01:38,890
实例和属性的数量。

27
00:01:38,890 --> 00:01:42,720
接下来是决策树的示意图。

28
00:01:43,860 --> 00:01:46,900
我们一会儿再仔细解释这个树，

29
00:01:46,900 --> 00:01:50,159
但是要留意下这个树有 

30
00:01:50,159 --> 00:01:54,880
30叶节点和59个节点。

31
00:01:54,880 --> 00:01:57,120
总的准确度是

32
00:01:57,120 --> 00:02:00,180
66.8%.

33
00:02:00,180 --> 00:02:01,330
这是一个不错的结果。

34
00:02:02,619 --> 00:02:05,410
在窗口最下面，

35
00:02:05,410 --> 00:02:08,929
我们看到一个混淆矩阵。是否还记得这里有7种不同的

36
00:02:08,929 --> 00:02:10,260
玻璃。

37
00:02:10,260 --> 00:02:11,320
这是

38
00:02:11,320 --> 00:02:15,329
由浮法玻璃制造的建筑用窗户的分类结果

39
00:02:15,329 --> 00:02:19,109
我们可以看到，其中有50个实例的类别为“a”，


40
00:02:19,109 --> 00:02:20,959
是正确的分类。

41
00:02:20,959 --> 00:02:23,369
其中有15个实例的类别为“b”，

42
00:02:23,369 --> 00:02:26,719
那时由非浮法玻璃制造的建筑用窗户，所以这是错误的分类。

43
00:02:26,719 --> 00:02:28,579
另外3个实例被分到“c”，

44
00:02:28,579 --> 00:02:29,649
等等。

45
00:02:29,649 --> 00:02:32,619
这是一个混淆矩阵。

46
00:02:32,619 --> 00:02:36,019
大部分的实例在对角线上，

47
00:02:36,019 --> 00:02:39,780
这正是我们期望看到的，因为这意味着正确的分类。

48
00:02:39,780 --> 00:02:41,549
每一个不在对角线上的实例

49
00:02:41,549 --> 00:02:46,049
代表一个错误的分类结果。

50
00:02:46,049 --> 00:02:50,360
这是一个混淆矩阵。

51
00:02:50,360 --> 00:02:52,260
让我们再深入研究它。

52
00:02:52,260 --> 00:02:55,950
我们打开J48的配置面板。

53
00:02:55,950 --> 00:02:57,689
上次，我们通过

54
00:02:57,689 --> 00:03:00,979
单击“choose”按钮选择分类器。

55
00:03:00,979 --> 00:03:03,099
现在，单击“choose”，

56
00:03:03,099 --> 00:03:05,489
弹出一个配置面板。

57
00:03:05,489 --> 00:03:10,559
单击菜单中的“J48”，然后得到

58
00:03:10,559 --> 00:03:12,969
一组配置参数

59
00:03:12,969 --> 00:03:14,359
这里我们

60
00:03:14,359 --> 00:03:18,659
不介绍所有的参数。仅以“unpruned”参数为例，

61
00:03:18,659 --> 00:03:20,849
它的默认值是off。

62
00:03:20,849 --> 00:03:22,730
我们刚刚建立的是

63
00:03:22,730 --> 00:03:26,659
一个经过修剪的决策树，因为“unpruned”的值是off。

64
00:03:26,659 --> 00:03:28,709
我们可以将“unpruned”

65
00:03:28,709 --> 00:03:31,949
设置为on，之后将得到一个未修剪的决策树。

66
00:03:31,949 --> 00:03:33,499
我们已经改变了配置。

67
00:03:33,499 --> 00:03:36,059
重新运行一下。

68
00:03:36,059 --> 00:03:38,999
我们可能得到

69
00:03:38,999 --> 00:03:43,209
一个不同的结果。

70
00:03:43,209 --> 00:03:48,149
让我们看一下。这次分类的准确率是67%。

71
00:03:48,149 --> 00:03:49,739
我们之前的准确度是多少？

72
00:03:49,739 --> 00:03:52,579
这些是当前的运行记录。这一条是之前的记录。

73
00:03:52,579 --> 00:03:54,040
之前的准确度是

74
00:03:54,040 --> 00:03:57,139
66.8%.

75
00:03:57,139 --> 00:04:01,109
这次我们通过

76
00:04:01,109 --> 00:04:06,939
未修剪的决策树得到的准确度是67%。

77
00:04:06,939 --> 00:04:11,559
两次的决策树一样大小。

78
00:04:11,559 --> 00:04:14,619
这是一种参数，

79
00:04:14,619 --> 00:04:18,239
我们也可以使下其他的参数，现在我们来看一下其他的决策树。

80
00:04:18,239 --> 00:04:20,430
再一次单击配置面板，

81
00:04:20,430 --> 00:04:24,930
我将更改

82
00:04:26,330 --> 00:04:30,439
参数“minNumObj”。

83
00:04:30,439 --> 00:04:32,229
这代表什么？

84
00:04:32,229 --> 00:04:36,470
参数“minNumObj”是每个叶节点所含实例的最少数量。

85
00:04:36,470 --> 00:04:38,969
我将参数“minNumObj”的值从2

86
00:04:38,969 --> 00:04:41,169
增加到15

87
00:04:41,169 --> 00:04:44,599
以便得到更大的叶节点。

88
00:04:44,599 --> 00:04:47,090
（回到之前的运行结果）这里这些是树的叶节点，

89
00:04:47,090 --> 00:04:49,610
这些括号里的数字是

90
00:04:49,610 --> 00:04:53,419
叶节点所含实例的数量。当括号里有两个值的时候，意味着

91
00:04:53,419 --> 00:04:56,699
这个叶节点包含一个错误的分类实例和

92
00:04:56,699 --> 00:04:59,159
五个正确的分类实例。

93
00:04:59,159 --> 00:05:00,000
可以看出，

94
00:05:00,000 --> 00:05:01,730
这些叶节点都只包含很少的实例，

95
00:05:01,730 --> 00:05:03,810
有的只含有2个或3个实例

96
00:05:03,810 --> 00:05:05,530
然而，这里有一个叶节点含有31个实例。

97
00:05:05,530 --> 00:05:09,630
我们现在来看一下如何设置叶节点所含最小实例数，

98
00:05:09,630 --> 00:05:12,730
这次运行的产生的树的叶节点将含有

99
00:05:12,730 --> 00:05:16,670
不少于15个实例。再次运行。

100
00:05:16,670 --> 00:05:17,630
现在我们得到

101
00:05:17,630 --> 00:05:22,080
一个比较糟糕的准确度，61%，

102
00:05:22,080 --> 00:05:25,920
和一个小得多的

103
00:05:25,920 --> 00:05:30,920
只有8个叶节点的决策树。

104
00:05:32,470 --> 00:05:35,630
现在，我们来构建一个决策树可视化模型。

105
00:05:35,630 --> 00:05:37,660
右击

106
00:05:37,660 --> 00:05:41,910
我们之前的运行记录，

107
00:05:41,910 --> 00:05:45,360
得到一个小菜单。

108
00:05:45,360 --> 00:05:49,220
单击“visualize tree”，

109
00:05:49,220 --> 00:05:53,660
弹出了可视化窗口。如果右击空白处，可以选择使树符合窗口大小。

110
00:05:54,880 --> 00:05:57,940
这是一个决策树。首先，我们要看的是

111
00:05:57,940 --> 00:05:59,850
钡（Ba）的含量。

112
00:05:59,850 --> 00:06:02,910
如果钡的含量高，那么分类为“headlamps”。

113
00:06:02,910 --> 00:06:05,700
如果钡的含量低，那么我们继续看镁（Mg）的含量。

114
00:06:05,700 --> 00:06:11,280
如果镁的含量低，那么继续判定钾的含量（K）。如果钾的含量低，我们即可得到餐具。

115
00:06:11,280 --> 00:06:16,320
这是件好事，因为我不希望在我的餐具中含有过多的钾。

116
00:06:16,320 --> 00:06:18,560
这是一个可视化的决策树。

117
00:06:18,560 --> 00:06:24,470
（回到原输出窗口）这里的决策树和可视化的决策树是同一个决策树。

118
00:06:24,470 --> 00:06:30,580
这是决策树的另一种表现形式。

119
00:06:30,580 --> 00:06:33,540
关于配置面板，接下来再提一点，

120
00:06:33,540 --> 00:06:36,930
“More”按钮。点击这个按钮，你可以了解更多

121
00:06:36,930 --> 00:06:39,350
关于J48

122
00:06:39,350 --> 00:06:41,190
分类器

123
00:06:41,190 --> 00:06:44,230
了解分类器的来源，（对于使用分类器）总是很有帮助的。

124
00:06:47,970 --> 00:06:49,000
现在，

125
00:06:49,000 --> 00:06:52,910
我来解释为什么这个分类器叫做“J48”。这个名字来源于

126
00:06:52,910 --> 00:06:56,070
这本书里著名的C4.5系统。

127
00:06:56,070 --> 00:06:57,880
这里我们引用了这本书。

128
00:06:57,880 --> 00:06:59,260
事实上，我书架上有这本书。

129
00:06:59,260 --> 00:07:01,290
在这里，

130
00:07:01,290 --> 00:07:05,830
“C4.5: Programs for Machine Learning”，作者是

131
00:07:05,830 --> 00:07:09,250
澳大利亚的计算机学家，Ross Quinlan。

132
00:07:09,250 --> 00:07:12,460
他开发了ID3系统，

133
00:07:12,460 --> 00:07:14,740
我想应该是发表在他的博士论文中。

134
00:07:14,740 --> 00:07:18,630
之后，C4.5就变得非常流行。各种版本最终演变

135
00:07:18,630 --> 00:07:20,750
为C4.5。

136
00:07:20,750 --> 00:07:25,080
C4.5出名了，书也出版了。接着，他继续发展这个系统,

137
00:07:25,080 --> 00:07:26,880
升级为C4.8。

138
00:07:26,880 --> 00:07:30,950
在此之后，系统商业化了。在那之前，都是开源

139
00:07:30,950 --> 00:07:32,070
系统。

140
00:07:32,070 --> 00:07:33,890
当我们创建Weka时，

141
00:07:33,890 --> 00:07:37,420
我们借鉴了C4.5的最后一个

142
00:07:37,420 --> 00:07:39,900
版本，

143
00:07:39,900 --> 00:07:41,380
也就是C4.8，

144
00:07:41,380 --> 00:07:45,500
我们重写了它。Weka是用Java语言编写的，所以我们叫它J48。

145
00:07:45,500 --> 00:07:47,410
也许这不是

146
00:07:47,410 --> 00:07:48,810
一个非常好的名字，

147
00:07:48,810 --> 00:07:50,500
但一直沿用至今。

148
00:07:50,500 --> 00:07:54,240
这是这个分类器的来源。

149
00:07:54,240 --> 00:07:57,950
我们已经介绍了Weka中的分类器，

150
00:07:57,950 --> 00:08:00,380
以及如何找到分类器。我们对玻璃数据

151
00:08:00,380 --> 00:08:04,260
进行了分类。我们学习了如何理解J48的输出，

152
00:08:04,260 --> 00:08:09,170
特别是混淆矩阵。我们看了J48的配置面板。

153
00:08:09,170 --> 00:08:12,810
我们试用了两个参数：已修剪与未修剪的决策树，

154
00:08:12,810 --> 00:08:14,330
和如何避免小的叶节点。

155
00:08:14,330 --> 00:08:15,530
我向大家介绍了

156
00:08:15,530 --> 00:08:18,850
J48实际上来自于大家熟知的

157
00:08:18,850 --> 00:08:24,670
机器学习系统C4.5。C4.5和C4.8非常的相近。

158
00:08:24,670 --> 00:08:26,030
所以我们介绍J48

159
00:08:26,030 --> 00:08:30,450
就好像它是C4.5的同义词。

160
00:08:30,450 --> 00:08:32,220
你可以阅读教材的

161
00:08:32,220 --> 00:08:35,930
11.1节，（这一节）介绍了如何创建和检验决策树。

162
00:08:35,930 --> 00:08:40,520
就到这里，请大家运用本课的知识，完成课后练习。

163
00:08:40,520 --> 00:08:47,520
再见！

