﻿1
00:00:16,670 --> 00:00:21,500
大家好！这是Weka在数据挖掘中的运用的第三部分，在这部分

2
00:00:21,500 --> 00:00:26,130
我们将学习些简单的机器学习方法，了解它们的工作原理。

3
00:00:26,130 --> 00:00:33,130
我们要再次强调简单的算法通常能取得很好的效果。

4
00:00:34,420 --> 00:00:38,210
在数据挖掘中，也如同在生活中，

5
00:00:38,210 --> 00:00:43,480
在试复杂的事之前，你应先试一试简单的。

6
00:00:43,480 --> 00:00:45,980
简单的形式有多种。

7
00:00:45,980 --> 00:00:49,930
例如，数据集中有一个起决定作用的属性，

8
00:00:49,930 --> 00:00:52,489
或有一个起决定作用的属性的值。

9
00:00:52,489 --> 00:00:57,989
或者，所有属性都起同样的，独立的作用。

10
00:00:57,989 --> 00:01:02,769
或者，简单的形式是一个只使用一小部分属性的决策树

11
00:01:02,769 --> 00:01:09,769
我们或许只用计算一个未知样本离最近的训练样本的距离。

12
00:01:10,460 --> 00:01:14,970
或者，分析结果取决于属性的线性组合。

13
00:01:14,970 --> 00:01:21,630
我们将在以后的几节课中学习这些简单的形式。

14
00:01:21,630 --> 00:01:23,850
世上没有完美的机器学习算法。

15
00:01:23,850 --> 00:01:27,469
机器学习算法的成功取决于适用的领域。

16
00:01:27,469 --> 00:01:33,700
数据挖掘是一门试验性的科学。

17
00:01:33,700 --> 00:01:37,259
我们来看一下OneR规则算法，

18
00:01:37,259 --> 00:01:39,950
这里一个属性决定一切。

19
00:01:39,950 --> 00:01:42,770
它实际上非常简单，琐细。

20
00:01:42,770 --> 00:01:47,570
但我们从简单的开始，再到复杂的。

21
00:01:47,570 --> 00:01:52,439
OneR创建所谓的一层决策树，

22
00:01:52,439 --> 00:01:56,509
或者一组只检测某个属性的规则

23
00:01:56,509 --> 00:02:03,170
一棵只在根节点根据某个属性值分叉的树，

24
00:02:03,170 --> 00:02:09,819
或者，同样的，一组只检测某个属性值的规则。

25
00:02:09,819 --> 00:02:11,230
OneR的基本版本是

26
00:02:11,230 --> 00:02:14,400
每个属性值都有一个分支

27
00:02:14,400 --> 00:02:17,680
我们选择从某个属性开始，

28
00:02:17,680 --> 00:02:20,900
然后为它的每个值建立一个分支。

29
00:02:20,900 --> 00:02:26,090
将这个分支所含最多的类作为它的分类。

30
00:02:26,090 --> 00:02:30,739
错误率是在这个分支中不属于多数分类的

31
00:02:30,739 --> 00:02:32,319
实例的比例。

32
00:02:32,319 --> 00:02:36,640
我们选择错误率最小的属性。

33
00:02:36,640 --> 00:02:39,190
我们来解释下它的原理。

34
00:02:39,190 --> 00:02:41,310
算法是这样的。
Here's the algorithm.

35
00:02:41,310 --> 00:02:46,150
我们为每个属性建立一组规则。

36
00:02:46,150 --> 00:02:47,870
为每个属性值，

37
00:02:47,870 --> 00:02:52,599
我们建立一个规则。 它累计每个分类出现的次数，

38
00:02:52,599 --> 00:02:54,560
找出最多的分类。

39
00:02:54,560 --> 00:02:59,090
这个规则由这个最多的分类和这个属性值组成。

40
00:02:59,090 --> 00:03:03,030
然后，我们来计算这个规则的错误率。

41
00:03:03,030 --> 00:03:07,439
我们对这个数据集的每一个属性重复这个过程，

42
00:03:07,439 --> 00:03:10,760
然后选择错误率最低的属性。

43
00:03:10,760 --> 00:03:15,049
这是天气（weather）数据集。

44
00:03:15,049 --> 00:03:18,099
OneR用以上的方法为天气数据集的每一个属性，

45
00:03:18,099 --> 00:03:23,409
展望（outlook）， 温度（temperature）， 湿度（humidity），和风速（wind）建立一组规则。

46
00:03:23,409 --> 00:03:30,409
展望（outlook）有三个分类值：晴（sunny），阴（overcast），和雨（rainy）

47
00:03:30,470 --> 00:03:35,000
我们计算在5个晴（sunny）的实例中，

48
00:03:35,000 --> 00:03:42,000
有2个是yes，有三个是no。

49
00:03:51,730 --> 00:03:53,469
我们来选一个规则，

50
00:03:53,469 --> 00:03:55,640
如果是晴（sunny）选no，

51
00:03:55,640 --> 00:03:58,459
在五个中有两个是错的。

52
00:03:58,459 --> 00:04:07,110
对于阴（overcast）来说，展望是阴的四个实例的分类play的值都是yes

53
00:04:07,110 --> 00:04:09,170
所以，我们选择这个规则，

54
00:04:09,170 --> 00:04:15,280
如果展望是阴，选yes。这样我们的错误率是零。

55
00:04:15,280 --> 00:04:17,269
最后，如果展望是雨（rainy），

56
00:04:17,269 --> 00:04:18,220
我们也选yes，

57
00:04:18,220 --> 00:04:22,490
这样在五个实例中两个是错的。

58
00:04:22,490 --> 00:04:26,890
我们将得到4个错的如果我们用展望（outlook）分支，

59
00:04:26,890 --> 00:04:32,970
我们可以用温度（temperature）分支，重复同样的过程。

60
00:04:32,970 --> 00:04:34,220
如果温度（temperature）是热（hot），

61
00:04:34,220 --> 00:04:36,220
有两个no和两个yes。

62
00:04:36,220 --> 00:04:38,300
如果是平手，我们任选其一。

63
00:04:38,300 --> 00:04:40,020
如果是热（hot），

64
00:04:40,020 --> 00:04:43,410
我们来选no，有两个错误。

65
00:04:43,410 --> 00:04:44,720
如果温度（temperature）是温和（mild），

66
00:04:44,720 --> 00:04:47,660
我们选yes，六个中有两个错误，

67
00:04:47,660 --> 00:04:49,760
如果温度（temperature）是冷（cool），

68
00:04:49,760 --> 00:04:54,990
我们选yes，四个中有一个错误

69
00:04:54,990 --> 00:04:58,260
对湿度（humidity）和风速（wind）重复同样的过程。

70
00:04:58,260 --> 00:05:04,100
我们来看一下总错误率；我们选一个总错误率最低的，

71
00:05:04,100 --> 00:05:05,970
要么是展望（outlook），要么是湿度（humdity）。

72
00:05:05,970 --> 00:05:07,860
这是个平手，所以我们任选其一，

73
00:05:07,860 --> 00:05:09,150
选展望（outlook）。

74
00:05:09,150 --> 00:05:11,370
这就是OneR的原理。

75
00:05:11,370 --> 00:05:14,300
就那么简单。

76
00:05:14,300 --> 00:05:15,100
来试一下。

77
00:05:15,100 --> 00:05:15,760
打开Weka。

78
00:05:15,760 --> 00:05:22,760
载入名词性的天气数据。

79
00:05:24,590 --> 00:05:26,520
选择分类器。

80
00:05:26,520 --> 00:05:32,480
这是个非常简单的数据集，结果可能没多大意义。

81
00:05:32,480 --> 00:05:36,000
如果我就以ZeroR开始，

82
00:05:36,000 --> 00:05:39,860
我得到的错误率是64%。

83
00:05:39,860 --> 00:05:43,620
我来选OneR，

84
00:05:45,450 --> 00:05:47,370
运行一下。

85
00:05:47,370 --> 00:05:51,320
我得到一个用展望（outlook）分支的规则

86
00:05:51,320 --> 00:05:53,070
如果是晴（sunny）就选no，

87
00:05:53,070 --> 00:05:56,460
阴（overcast）选no，雨（rainy）选yes。

88
00:05:56,460 --> 00:06:01,370
用训练数据集，我们得到的结果是十四个实例中有十个正确。

89
00:06:01,370 --> 00:06:03,780
我们用交叉验证法评估一下。

90
00:06:03,780 --> 00:06:06,210
这对这么小的数据集不是太合理。

91
00:06:06,210 --> 00:06:09,160
有意思的是，我们得到的正确率是42%，

92
00:06:09,160 --> 00:06:12,100
非常糟糕，比ZeroR的差。

93
00:06:12,100 --> 00:06:14,440
事实上，对二分类问题，

94
00:06:14,440 --> 00:06:19,700
我们期望的正确率至少应该是50%。

95
00:06:19,700 --> 00:06:22,110
抛硬币也能得到50%的正确率。

96
00:06:22,110 --> 00:06:27,440
OneR算法在这个简单的数据集上的效果不是很好。

97
00:06:27,440 --> 00:06:34,290
请注意，规则终于输出了，由于我们使用了10层交叉验证，

98
00:06:34,290 --> 00:06:38,940
它共运行了10次，第十一次用整个数据集

99
00:06:38,940 --> 00:06:43,710
来计算规则，这就是输出。

100
00:06:43,710 --> 00:06:48,000
这就是这个规则如何生成的。

101
00:06:48,000 --> 00:06:51,170
OneR，一个属性决定一切。

102
00:06:51,170 --> 00:06:55,730
这是在1993年发表的一个简单的机器学习方法，

103
00:06:55,730 --> 00:07:02,420
二十年前，它出现在一篇叫“一个非常简单的分类规则在多数常见的数据上取得好效果”

104
00:07:02,420 --> 00:07:04,390
的文章中， 它由一个生活在

105
00:07:04,390 --> 00:07:10,300
加拿大的叫Rob Holte的人提出。

106
00:07:10,300 --> 00:07:15,880
他在16组常用的数据集上用OneR进行试验。

107
00:07:15,880 --> 00:07:20,850
他用了我们教过你的交叉验证法，

108
00:07:20,850 --> 00:07:26,440
他发现一些OneR产生的规则要比为这些数据集

109
00:07:26,440 --> 00:07:30,910
专门设计的复杂得多的算法更有效。

110
00:07:30,910 --> 00:07:34,410
为什么这么简单的方法会那么好呢？

111
00:07:34,410 --> 00:07:37,230
有些数据集真的很简单，

112
00:07:37,230 --> 00:07:39,950
其它的很小，杂乱，或复杂，

113
00:07:39,950 --> 00:07:42,010
以至于很难从中找到规律。

114
00:07:42,010 --> 00:07:46,200
所以，应该先试试最简单的。

115
00:07:46,200 --> 00:07:50,850
课本的第4.1节介绍了OneR。

116
00:07:50,850 --> 00:07:55,190
现在做一下课后的练习。

117
00:07:55,190 --> 00:07:56,770
再见！

