﻿1
00:00:17,560 --> 00:00:21,910
大家好！欢迎来到第三部分第三课，概率的应用。

2
00:00:21,910 --> 00:00:26,160
这是在使用Weka进行数据挖掘中需要点数学的部分。

3
00:00:26,160 --> 00:00:31,609
但是不用担心，我会帮助你的。

4
00:00:31,609 --> 00:00:36,879
我们刚刚学过的OneR方法假设只需要一个属性

5
00:00:36,879 --> 00:00:40,930
就可以完成所有工作，为决策负全责。

6
00:00:41,520 --> 00:00:43,120
这是一种简单的策略。

7
00:00:43,120 --> 00:00:48,420
另外一种简单的策略正好相反，假设所有的属性

8
00:00:48,420 --> 00:00:51,659
在决策过程中有平等的，独立的贡献。

9
00:00:51,659 --> 00:00:54,229
这就是Naive Bayes方法

10
00:00:54,229 --> 00:00:55,869
我一会儿会解释这个名字。

11
00:00:56,580 --> 00:01:02,159
Naive Bayes基于两个假设：所有属性都是同样的重要，

12
00:01:02,159 --> 00:01:05,070
且它们在统计上是独立的。

13
00:01:05,070 --> 00:01:09,909
独立指的是，根据已知属性的值不能推测出

14
00:01:09,909 --> 00:01:12,619
其他属性的值。

15
00:01:12,619 --> 00:01:17,780
独立条件假设实际上从来没有成立过，但是基于它

16
00:01:17,780 --> 00:01:23,509
的方法在实践中是十分有效的。

17
00:01:23,509 --> 00:01:30,159
在概率论中有一种定理叫做Bayes Theorem（贝叶斯定理），是由Tomas Bays

18
00:01:30,159 --> 00:01:33,030
在18世纪提出的。

19
00:01:33,030 --> 00:01:39,369
这是关于假设H基于证据E发生的概率。

20
00:01:39,369 --> 00:01:46,100
对我们来说，假设是实例的分类，

21
00:01:46,100 --> 00:01:48,899
证据是实例的属性值。

22
00:01:48,899 --> 00:01:55,319
依照定理，Pr[H|E]是基于证据E，该实例被归为某一类的概率，

23
00:01:55,319 --> 00:02:02,109
它等于Pr[E|H]乘以Pr[H]

24
00:02:02,109 --> 00:02:06,119
除以Pr[E]。

25
00:02:06,119 --> 00:02:13,119
Pr[H]叫做假设H的先验概率，

26
00:02:13,290 --> 00:02:18,480
就是知道证据前的概率。

27
00:02:18,480 --> 00:02:22,800
这是事件发生的基线概率。

28
00:02:22,800 --> 00:02:29,370
举个例子，在天气数据中，有9个yes和5个no，所以

29
00:02:29,370 --> 00:02:38,280
假设play是yes的概率是9/14，假设play是no的概率是5/14。

30
00:02:38,280 --> 00:02:44,920
用这个等式可以基于证据来校正Pr[H]，

31
00:02:44,920 --> 00:02:51,340
来得到所谓的H的后验概率，也就是知道了证据后的概率。

32
00:02:51,340 --> 00:02:58,340
对我们来说，证据是指未知的实例的属性值，就是E。

33
00:03:01,159 --> 00:03:02,129
这就是Bayes定理。

34
00:03:02,129 --> 00:03:08,430
为什么叫做naive呢？因为我们简单的假设是（我们之前提过的）

35
00:03:08,430 --> 00:03:13,140
证据由几个在统计意义上独立的部分组成。

36
00:03:13,140 --> 00:03:19,390
这些证据的组成部分，就我们而言是指天气数据集中

37
00:03:19,390 --> 00:03:20,950
四个不同的属性值。

38
00:03:20,950 --> 00:03:28,280
当事件彼此独立时，概率才能相乘，所以Pr[H|E]，

39
00:03:28,280 --> 00:03:33,719
按照上面公式，等于Pr[E|H]乘以先验概率

40
00:03:33,719 --> 00:03:37,379
Pr[H]除以Pr[E]。

41
00:03:37,379 --> 00:03:43,079
Pr[E|H]可分为以下几部分：Pr[E1|H]，

42
00:03:43,079 --> 00:03:48,030
第一个属性值的概率；Pr[E2|H]，第二个属性值的概率；

43
00:03:48,030 --> 00:03:51,030
等等，zhe可推广到所有的属性值。

44
00:03:51,030 --> 00:03:56,650
这也许有点抽象，让我们用天气数据解释一下。

45
00:03:56,650 --> 00:03:59,829
右手边是天气数据。

46
00:03:59,829 --> 00:04:03,930
在顶部的表格中，我们可以看到所有的属性。

47
00:04:03,930 --> 00:04:09,799
让我们从outlook开始。在play是yes和no的情况下，来看一下

48
00:04:09,799 --> 00:04:11,959
属性值sunny出现了多少次。

49
00:04:11,959 --> 00:04:14,849
play是yes的实例中，sunny出现了两次，play是no的实例中，sunny出现了三次。

50
00:04:14,849 --> 00:04:18,220
这些可以直接从数据表中得到。

51
00:04:18,220 --> 00:04:19,840
overcast。

52
00:04:19,840 --> 00:04:25,120
当outlook是overcast，play总是yes，所以共有四个yes的实例，

53
00:04:25,120 --> 00:04:26,950
没有no的实例。

54
00:04:26,950 --> 00:04:31,250
然后，rainy的实例，有三个是yes， 两个是no。

55
00:04:31,250 --> 00:04:35,979
这些数字都是直接从实例的数据表格中得到的。

56
00:04:35,979 --> 00:04:40,380
然后，我们用这些数子和下面的公式来计算概率。

57
00:04:40,380 --> 00:04:43,259
假如我们知道了假设（play）。

58
00:04:43,259 --> 00:04:46,160
我们已知它是yes。

59
00:04:46,160 --> 00:04:52,960
这时，sunny的概率是2/9，overcast的是4/9，rainy的是3/9，

60
00:04:52,960 --> 00:04:56,460
因为2加4加3等于9。

61
00:04:56,460 --> 00:04:59,400
这就是概率。

62
00:04:59,400 --> 00:05:06,860
如果我们知道play是no，sunny的概率是3/5，overcast的是0/9，

63
00:05:06,860 --> 00:05:08,340
rainy的是2/5。

64
00:05:08,340 --> 00:05:10,169
这些是针对outlook属性的。

65
00:05:11,740 --> 00:05:18,060
这就使我们想要的，基于假设H

66
00:05:18,060 --> 00:05:21,729
每个属性值的概率。

67
00:05:21,729 --> 00:05:25,889
下一个属性是temperature，我们可以重复以上的步骤得到

68
00:05:25,889 --> 00:05:30,729
三个属性值（hot，mild 和 cool）对于play

69
00:05:30,729 --> 00:05:32,199
是yes或no的概率

70
00:05:32,199 --> 00:05:39,960
humidity属性和windy属性也一样。 Play是先验概率（Pr[H]）。

71
00:05:39,960 --> 00:05:45,669
即使你不知道任何属性值的信息，它是yes的概率为9/14，

72
00:05:45,669 --> 00:05:47,810
no的概率为5/14。

73
00:05:47,810 --> 00:05:52,669
我们用到就是下面的公式，我们只需计算出结果。

74
00:05:52,669 --> 00:05:54,090
这是一个例子。

75
00:05:54,090 --> 00:05:56,970
这里有一个未知的，新的一天。

76
00:05:56,970 --> 00:06:03,970
我们不知道它的play的值，但是我们知道它的属性值分别是sunny，cool，high和windy。

77
00:06:05,280 --> 00:06:07,509
我们可以把它们的概率相乘。

78
00:06:07,509 --> 00:06:13,819
如果我们把yes的概率相乘，2/9乘以3/9乘以3/9乘以3/9

79
00:06:13,819 --> 00:06:22,300
（这些就是前一页的Pr[E1|H]，Pr[E2|H]，Pr[E3|H]，和Pr[E4|H]）

80
00:06:22,300 --> 00:06:28,400
最后乘以Pr[H]，也就是9/14。

81
00:06:28,400 --> 00:06:36,560
用它们相乘，得到了是yes的可能性是0.0053。

82
00:06:36,560 --> 00:06:43,560
然后，对于no，用同样的方法，得到的可能性为0.0206。

83
00:06:44,120 --> 00:06:46,720
但这些数字不是概率。

84
00:06:46,720 --> 00:06:48,129
概率的和必须等于1。

85
00:06:48,129 --> 00:06:49,639
它们只是可能性。

86
00:06:49,639 --> 00:06:55,610
但是，通过使用简单的归一化技术，我们可以从中得到概率。

87
00:06:55,610 --> 00:06:56,500
把yes和no的可能性，

88
00:06:56,500 --> 00:07:02,440
用下面的方法归一化，使得它们的和等于1。

89
00:07:02,440 --> 00:07:09,440
这就是我们如何用不同的属性值计算出新的一天的play的概率。

90
00:07:10,030 --> 00:07:11,380
再来做一遍。

91
00:07:11,380 --> 00:07:17,340
我们知道的是outlook为sunny，temperature为cool，humidity为high，

92
00:07:17,340 --> 00:07:19,550
windy为true（我们不知道play的值）。

93
00:07:19,550 --> 00:07:26,990
基于我们知道的，yes的可能性等于这4个概率的乘积

94
00:07:26,990 --> 00:07:33,000
（outlook的，temperature的，humidity的和windy的）乘以先验概率，

95
00:07:33,000 --> 00:07:37,000
也就是yes的基线概率。

96
00:07:37,000 --> 00:07:40,650
这些分数的乘积再除以Pr[E]。

97
00:07:40,650 --> 00:07:45,160
我们不知道Pr[E]是多少，但是没关系，因为我们能够算出

98
00:07:45,160 --> 00:07:52,240
Pr[E]对于no的概率，这样得到一个像这样的等式，然后

99
00:07:52,240 --> 00:07:56,870
通过归一化让这两个概率的和等于1，我们就计算出实际的概率。

100
00:07:56,870 --> 00:08:01,560
Pr[E]对于yes的概率加上Pr[E]对于no的概率等于1。

101
00:08:02,220 --> 00:08:07,850
当从数字的角度看，这实际上十分简单。使用Weka时，

102
00:08:07,850 --> 00:08:09,660
这也很简单。

103
00:08:09,660 --> 00:08:15,490
打开Weka，载入

104
00:08:15,490 --> 00:08:19,920
名词性天气数据，

105
00:08:19,920 --> 00:08:22,540
我们之前见过这个数据集许多次了。

106
00:08:22,540 --> 00:08:25,590
切换到分类面板。

107
00:08:25,590 --> 00:08:29,150
应用NaiveBayes方法。

108
00:08:29,150 --> 00:08:30,800
它在bays目录下面。

109
00:08:30,800 --> 00:08:34,280
这里有许多bays的变体的实现。   

110
00:08:34,280 --> 00:08:38,240
这里，我们使用简单的NaiveBayes方法。

111
00:08:38,650 --> 00:08:42,480
运行它。

112
00:08:42,480 --> 00:08:43,960
这是结果。

113
00:08:44,870 --> 00:08:48,170
通过交叉验证得到成功的概率。

114
00:08:48,170 --> 00:08:51,570
更有趣的是，我们得到了一个模型。

115
00:08:51,570 --> 00:08:56,900
这个模型就像之前我给你们看到的划分成yes

116
00:08:56,900 --> 00:08:58,320
和no的表格。

117
00:08:58,320 --> 00:09:04,600
我们得到四个属性（outlook，temperature，humidity和windy）

118
00:09:04,600 --> 00:09:10,020
对于每一个属性值，我们得到了属性值出现的次数。

119
00:09:10,630 --> 00:09:15,400
这里，这个表格和我们之前看到的表格有一很小但很重要的不同。

120
00:09:15,400 --> 00:09:15,420
让我们回到幻灯片，看一下先前的这些数字。

121
00:09:15,420 --> 00:09:18,490
让我们回到幻灯片，看一下这些数字。

122
00:09:18,490 --> 00:09:26,670
在幻灯片上，在play是yes，outlook的值，我们得到的是2，4和3，

123
00:09:26,670 --> 00:09:29,410
而Weka得到的是3，5和4。

124
00:09:29,410 --> 00:09:35,960
每个都大了一个，总数是12，而不是9。

125
00:09:35,960 --> 00:09:39,410
Weka在所有的数上加一。

126
00:09:39,410 --> 00:09:42,990
这么做的是为了避免出现零次数。

127
00:09:42,990 --> 00:09:50,580
在原始的表格里，在play是no，outlook为overcast的概率是

128
00:09:50,580 --> 00:09:53,670
零，我们将用它乘以其他的概率。

129
00:09:53,670 --> 00:09:58,200
这就意味着什么，如果我们从表面意义看零概率，

130
00:09:58,200 --> 00:10:06,050
也就是无论哪天，只要outlook是overcast，play是no的概率为零。

131
00:10:06,050 --> 00:10:09,230
任何数乘以零等于零。

132
00:10:09,230 --> 00:10:13,970
在概率的术语里这些零具有否决其他数字的能力。

133
00:10:13,970 --> 00:10:14,940
这不是我们想要的。

134
00:10:14,940 --> 00:10:21,010
我们不想断然推定，只要是overcast，play就是no，

135
00:10:21,010 --> 00:10:25,590
我们也没有见过outlook是overcast， play是no的实例。

136
00:10:26,270 --> 00:10:30,800
这就叫做零次数问题（zero-frequency problem），Weka的解决方案是（也是最常用的方案）

137
00:10:30,800 --> 00:10:34,650
简单地在每个数上加一。

138
00:10:34,650 --> 00:10:39,690
这就是为什么Weka表格中的数字

139
00:10:39,690 --> 00:10:41,290
比幻灯片中的数字大一。

140
00:10:42,030 --> 00:10:45,540
除了这点，两者是完全一样的。

141
00:10:45,540 --> 00:10:50,780
通过从1而不是0开始计数，我们有效地避免了零次数的出现。

142
00:10:50,780 --> 00:10:56,480
这样，它们就不会等于0了。

143
00:10:57,090 --> 00:10:59,480
这就是Naive Bayes方法。

144
00:10:59,480 --> 00:11:04,210
它的前提是，对于要预测的，所有的属性的同等重要且彼此独立。

145
00:11:04,210 --> 00:11:09,710
Naive Bayes方法效果很好，即使在独立假设显然不成立的情况下。

146
00:11:11,040 --> 00:11:13,520
为什么在假设错误的情况下，还能有效？

147
00:11:13,520 --> 00:11:15,450
这是一个很好的问题。

148
00:11:15,450 --> 00:11:19,170
事实上，分类不需要精确的概率估计。

149
00:11:19,170 --> 00:11:25,110
我们只需选择分类为概率最大的。

150
00:11:25,110 --> 00:11:29,600
只要最大的概率分配给了正确的分类，概率估计是否

151
00:11:29,600 --> 00:11:33,540
精确不是很重要。

152
00:11:33,540 --> 00:11:38,330
这就实际意味着如果增加冗余的属性，Naive Bayes就会出现问题。

153
00:11:38,330 --> 00:11:44,630
极端的相互依赖的例子是两个属性有同样的值，两个完全相同的

154
00:11:44,630 --> 00:11:46,160
属性。

155
00:11:46,160 --> 00:11:49,780
这将给Naive Bayes方法造成很大的影响。

156
00:11:49,780 --> 00:11:54,550
Weka提供的属性选择方法可用来挑选部分

157
00:11:54,550 --> 00:12:00,100
相对独立的属性，在这之后，你就可以安全地使用Naive Bayes了。

158
00:12:01,610 --> 00:12:07,100
课本的第四章第二节是有关于统计建模的内容。

159
00:12:07,890 --> 00:12:12,530
现在大家可以去完成课后练习了。

160
00:12:12,530 --> 00:12:14,070
再见！
