﻿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
再见！

