﻿1
00:00:16,539 --> 00:00:18,380
大家好！很高兴又见面了。

2
00:00:18,380 --> 00:00:23,949
我的业余爱好之一是演奏音乐，大家在课程开始前听到的

3
00:00:23,949 --> 00:00:26,249
那一小段莫扎特的曲子

4
00:00:26,249 --> 00:00:31,019
就是我和三个朋友演奏的单簧管弦乐四重奏。

5
00:00:31,019 --> 00:00:35,589
我在一个交响乐团演奏的，昨天晚上我演奏了一些爵士三重奏。

6
00:00:35,589 --> 00:00:39,680
如果你想听，可以在Google搜到我的个人主页。

7
00:00:39,680 --> 00:00:43,399
输入我的名字，Ian Witten。

8
00:00:43,399 --> 00:00:50,399
你会看到我的个人主页，而且每次你访问的时候，我都会为你演奏一段。

9
00:00:58,519 --> 00:01:04,170
如果你刷新页面，我会演奏另一段。

10
00:01:08,770 --> 00:01:11,090
这就是我。

11
00:01:11,090 --> 00:01:13,290
不管怎样，这不是我们课程的内容。

12
00:01:13,290 --> 00:01:20,290
我们开始学习2.6，关于交叉验证结果。

13
00:01:20,290 --> 00:01:24,610
我们上节课，学习了交叉验证的原理。

14
00:01:24,610 --> 00:01:29,590
我说过交叉验证是一种比重复预留法更好的

15
00:01:29,590 --> 00:01:35,640
评估机器学习算法的方法。

16
00:01:35,640 --> 00:01:37,360
交叉验证会评估10次。

17
00:01:37,360 --> 00:01:39,670
你可以运行10次预留法，

18
00:01:39,870 --> 00:01:43,970
但是交叉验证更好。

19
00:01:43,970 --> 00:01:45,720
让我们做一个简单的实验。

20
00:01:45,720 --> 00:01:52,720
打开Weka，载入diabetes数据集。

21
00:01:56,000 --> 00:02:02,000
基线精确度，即ZeroR的精确度

22
00:02:02,000 --> 00:02:05,510
（顺便提一下，rules/ZeroR是默认的分类器）

23
00:02:05,510 --> 00:02:11,540
如果我们运行它，它用交叉验证法进行评估。

24
00:02:11,540 --> 00:02:15,600
实际上，为了得到真实的基线，我们应该用训练数据集。

25
00:02:15,600 --> 00:02:22,570
那就是我们简单猜测最有可能的分类所能达到的

26
00:02:22,570 --> 00:02:27,060
正确率，在这个例子中是65.1%。

27
00:02:27,060 --> 00:02:28,790
这就是基线精确度。

28
00:02:28,790 --> 00:02:32,110
对于任何数据集，这是你要做的第一件事情。

29
00:02:32,110 --> 00:02:36,130
我们在树分类器的目录下寻找J48。

30
00:02:38,550 --> 00:02:39,280
在这里。

31
00:02:39,280 --> 00:02:44,150
用10层交叉验证评估J48。

32
00:02:44,150 --> 00:02:47,290
做这些只用了一秒钟。

33
00:02:47,290 --> 00:02:57,650
结果是73.8%，我们可以像之前一样改变随机种子。

34
00:02:57,650 --> 00:03:00,790
默认值是1，改为2。

35
00:03:00,790 --> 00:03:02,370
再次运行。

36
00:03:02,370 --> 00:03:04,680
结果是75%。

37
00:03:04,680 --> 00:03:06,000
再试一次。

38
00:03:06,000 --> 00:03:09,210
随机种子改为3，当然，我们可以输入任何值。

39
00:03:09,210 --> 00:03:14,930
再运行，结果是75.5%。

40
00:03:14,930 --> 00:03:21,930
幻灯片上这些数值是10个不同的随机种子的结果。

41
00:03:22,040 --> 00:03:28,720
幻灯片上右手边那些是我得到的10个精确度，

42
00:03:28,720 --> 00:03:32,290
73.8%，75.0%，75.5%，等等。

43
00:03:32,290 --> 00:03:39,290
我们计算这些精确度的均值，得到74.5%，

44
00:03:39,290 --> 00:03:41,290
计算样本标准差，

45
00:03:41,290 --> 00:03:46,630
用以前用过的公式，得到0.9%，。

46
00:03:46,630 --> 00:03:49,330
在我们计算预留法的均值和标准差之前，

47
00:03:49,330 --> 00:03:52,830
我们先重复使用预留法10次。

48
00:03:52,830 --> 00:03:59,340
这些是运行结果，如果你重复预留，即用90%的数据做

49
00:03:59,340 --> 00:04:04,680
训练和10%的数据做测试，就像我们在10层交叉验证中做的一样。

50
00:04:04,680 --> 00:04:11,090
我们将得到这些结果，求均值，会得到74.8%，

51
00:04:11,090 --> 00:04:18,090
这和74.5%足够接近，但是我得到了一个更大的标准差。

52
00:04:18,090 --> 00:04:25,090
相比较交叉验证的0.9%，4.6%大多了。

53
00:04:26,000 --> 00:04:32,680
现在，你也许会问自己为什么用10层交叉验证。

54
00:04:32,680 --> 00:04:38,950
使用Weka，我们可以用20层交叉验证或者其他值，我们只需在

55
00:04:38,950 --> 00:04:43,950
cross-validation旁输入我们想要的份数。

56
00:04:43,950 --> 00:04:46,450
所以，我们是可以用20层交叉验证的。

57
00:04:46,450 --> 00:04:50,330
那样会将数据集分为20等份

58
00:04:50,930 --> 00:04:52,570
并且重复20次。

59
00:04:52,570 --> 00:04:58,370
拿出一份（做测试），用剩余95%的数据做训练，然后第21次

60
00:04:58,370 --> 00:04:59,750
使用整个数据集。

61
00:05:01,200 --> 00:05:03,030
所以，为什么是10，不是20呢？

62
00:05:03,030 --> 00:05:04,810
这是一个很好的问题，

63
00:05:04,810 --> 00:05:08,040
但没有太好的答案。

64
00:05:08,040 --> 00:05:14,000
我们想要用大部分数据做训练，因为最终我们

65
00:05:14,000 --> 00:05:19,960
将用整个数据集做训练。

66
00:05:19,960 --> 00:05:23,720
如果我们采用10层交叉验证，那么我们用的是90%的数据做训练。

67
00:05:23,720 --> 00:05:28,100
也许用95%的数据会更好一些，

68
00:05:28,100 --> 00:05:30,500
采用20层交叉验证。

69
00:05:31,400 --> 00:05:33,300
另一方面，我们想要确保

70
00:05:33,300 --> 00:05:37,250
我们使用的是有效的统计样本。

71
00:05:37,250 --> 00:05:43,870
所以，一般来说，分割较多份数进行交叉验证并不一定是好主意。

72
00:05:43,870 --> 00:05:50,720
同时，当然20层交叉验证需要两倍的10层交叉验证时间。

73
00:05:50,720 --> 00:05:54,210
结论是这个问题并没有一个好的答案，但标准的

74
00:05:54,210 --> 00:06:00,620
做法是采用10层交叉验证，这就是为什么Weka的默认值是10。

75
00:06:00,620 --> 00:06:05,350
本节课我们演示了交叉验证优越于重复预留法。

76
00:06:05,350 --> 00:06:11,180
记住，在最后一页幻灯片上，我们看到交叉验证和重复预留法

77
00:06:11,180 --> 00:06:18,180
有相同的的均值，但是交叉验证的误差要小得多。

78
00:06:18,350 --> 00:06:25,350
我们知道了机器学习方法J48在数据集diabetes上达到的精确度

79
00:06:26,440 --> 00:06:33,440
是74.5%，大约在73.5%和75.5%之间。

80
00:06:33,810 --> 00:06:38,580
这远大于基线精确度。

81
00:06:38,580 --> 00:06:43,360
所以，J48分类器比基线分类器更好。

82
00:06:43,900 --> 00:06:48,660
交叉验证减少了估计的误差。

83
00:06:48,660 --> 00:06:50,240
这节课就到这里，

84
00:06:51,240 --> 00:06:54,300
请完成课后练习。

85
00:06:54,300 --> 00:06:56,850
我们下节课见。

86
00:06:56,850 --> 00:06:58,450
再见！
