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 再见!