1 00:00:16,309 --> 00:00:22,070 大家好!这是Weka在数据挖掘中的运用的第二部分第二节。我们将要继续学习 2 00:00:22,070 --> 00:00:27,710 训练和测试。 3 00:00:27,710 --> 00:00:29,369 下面是机器学习常见的场景: 4 00:00:29,369 --> 00:00:34,519 我们使用机器学习算法来处理训练数据,从而得到 5 00:00:34,519 --> 00:00:38,379 分类器。 6 00:00:38,379 --> 00:00:43,620 我们再用一些独立的测试数据来测试得到的分类器。 7 00:00:43,620 --> 00:00:49,820 我们可以把测试数据放入分类器,得到评估结果。 8 00:00:49,820 --> 00:00:55,159 我们还可以在现实中使用分类器对新的数据 9 00:00:55,159 --> 00:00:58,589 做预测。 10 00:00:58,589 --> 00:01:03,530 使用不同的测试数据和训练数据是十分重要的,因为只有这样, 11 00:01:03,530 --> 00:01:09,029 你才能得到可信的评估结果。 12 00:01:10,080 --> 00:01:14,250 这就是下面我们要讲解的内容。 13 00:01:14,250 --> 00:01:19,090 如果你只有一组数据,该怎么办呢?你可以把数据分成 14 00:01:19,090 --> 00:01:20,689 两部分。 15 00:01:20,689 --> 00:01:24,189 一部分用作训练,另一部分用作测试。 16 00:01:24,189 --> 00:01:27,549 比如,2/3用于训练,1/3用于测试。 17 00:01:27,549 --> 00:01:32,369 训练数据一定要不同于测试数据。 18 00:01:32,369 --> 00:01:38,759 训练和测试数据都是分别取自无限总体的独立样本。 19 00:01:38,759 --> 00:01:43,479 这是基本准则。两组数据都是不同的独立样本, 20 00:01:43,479 --> 00:01:44,950 不可以是同样的数据。 21 00:01:44,950 --> 00:01:49,479 如果一样,评估结果就会产生误导, 22 00:01:49,479 --> 00:01:56,479 无法反映出用分类器分析新数据的真实情况。 23 00:01:57,060 --> 00:02:02,600 下面,我们来看segment数据集。上节课我们也用到了这个数集。 24 00:02:02,600 --> 00:02:09,600 打开segment-challenge。 25 00:02:09,759 --> 00:02:12,640 我们打算使用提供的测试数据。 26 00:02:12,640 --> 00:02:19,110 先打开J48树分类器, 27 00:02:19,110 --> 00:02:21,530 再选择提供的测试数据, 28 00:02:21,530 --> 00:02:25,579 找到合适的测试数据文件,segment-test.arff, 29 00:02:32,879 --> 00:02:38,579 载入它。现在我们有了测试数据,来一起看看结果。 30 00:02:38,879 --> 00:02:45,510 上节课,我们使用用户分类器(the user classifier)来分析数据,准确率为79%。 31 00:02:45,510 --> 00:02:49,140 J48使用效果要好得多, 32 00:02:49,140 --> 00:02:55,989 同样的测试数据,准确率高达96%。 33 00:02:55,989 --> 00:03:00,670 假设我要用测试数据来检验训练数据。我可以选择 34 00:03:00,670 --> 00:03:03,049 Use training set测试选项。 35 00:03:03,049 --> 00:03:08,069 现在系统重新运行。你不要这么做, 36 00:03:08,069 --> 00:03:12,319 因为这会得到误导性的结果。 37 00:03:12,319 --> 00:03:17,739 看,准确率是99%。 38 00:03:17,739 --> 00:03:24,640 这并不能代表使用不同数据的准确率。 39 00:03:24,640 --> 00:03:30,540 如果我们只有一组数据。在没有测试数据的情况下, 我们可以按百分比分割数据。 40 00:03:30,540 --> 00:03:31,900 这就是percentage split。 41 00:03:31,900 --> 00:03:37,219 我们会得到66%的训练数据和34%的测试数据。 42 00:03:37,219 --> 00:03:40,200 数据分割是随机的。 43 00:03:40,200 --> 00:03:47,019 再次运行,得到95%的准确率。 44 00:03:47,019 --> 00:03:50,160 这个值和我们使用独立的测试数据得到的值基本一样, 45 00:03:50,160 --> 00:03:52,009 只是稍微低了一些。 46 00:03:54,109 --> 00:04:01,109 再次运行,不同的分割或许会带来些许不同的结果, 47 00:04:01,819 --> 00:04:08,640 但是,结果完全一样,95.098%。 48 00:04:08,640 --> 00:04:14,719 这是因为,在运行前Weka会初始化随机数生成器, 49 00:04:14,719 --> 00:04:18,220 以保证你能得到重复的结果。 50 00:04:18,220 --> 00:04:22,120 否则,会得到不同的结果。 51 00:04:22,120 --> 00:04:27,940 不过,如果你希望看到不同的运行结果, 52 00:04:27,940 --> 00:04:32,560 你可以重新设置随机数。 53 00:04:32,560 --> 00:04:37,880 我们下节课会学习这个问题。 54 00:04:37,880 --> 00:04:38,630 今天就讲到这里。 55 00:04:38,630 --> 00:04:42,440 机器学习的最基本原理是 训练数据和测试数据是从相同的无限总体中 56 00:04:42,440 --> 00:04:46,729 取出的独立的样本。 57 00:04:46,729 --> 00:04:52,750 如果你只有一个数据集,可以取部分做测试数据,例如33% 58 00:04:52,750 --> 00:04:56,009 或10%。 59 00:04:56,009 --> 00:05:00,550 不同的测试数据会带来些许不同的结果, 60 00:05:00,550 --> 00:05:05,669 但是Weka会通过重置随机数生成器 61 00:05:05,669 --> 00:05:09,449 来保证一样的结果, 62 00:05:09,449 --> 00:05:12,389 我们使用了J48分析segment-challenge数据集。 63 00:05:12,389 --> 00:05:16,080 你想深入学习,可以看课本5.1章: 64 00:05:16,080 --> 00:05:18,180 训练和测试。 65 00:05:18,180 --> 00:05:21,380 请做这节课的相关练习。 66 00:05:21,580 --> 00:05:23,180 再见!