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