﻿1
00:00:17,789 --> 00:00:20,869
大家好！欢迎回到Weka与数据挖掘。

2
00:00:20,869 --> 00:00:26,449
上节课中，我们学习了如何利用回归技术分类，如何使用线性回归

3
00:00:26,449 --> 00:00:33,079
完成分类任务。这节课我们将学习使用同样技术但更有效的

4
00:00:33,079 --> 00:00:37,059
的方法，即logistic回归。这是数学的知识，

5
00:00:37,059 --> 00:00:43,399
我们不打算深入学习它是如何工作的，但是我会介绍

6
00:00:43,399 --> 00:00:48,879
一个大致的概念和logistic回归的基本原理。

7
00:00:48,879 --> 00:00:53,629
然后你可以毫无问题的在Weka里使用logistic回归。

8
00:00:55,560 --> 00:00:59,750
数据挖掘的一个观点是有时你可以通过预测概率

9
00:00:59,750 --> 00:01:05,970
而不是实际分类得到更好的结果。不做yes或no的预测，

10
00:01:05,970 --> 00:01:10,820
而是作是yes或no的概率的预测

11
00:01:10,820 --> 00:01:15,790
会是“是”或“否”的概率。例如，明天下雨的可能性是95%，

12
00:01:15,790 --> 00:01:21,420
或者晴天的可能性是72%，而不是说一定会

13
00:01:21,420 --> 00:01:26,080
下雨或者一定会晴天。

14
00:01:26,080 --> 00:01:32,110
在数据挖掘时，概率是非常有用的。NaiveBayes输出概率；

15
00:01:32,110 --> 00:01:36,360
它基于概率工作。我们之前的课程已经介绍过这点了。

16
00:01:36,360 --> 00:01:43,360
载入diabetes数据集，运行NaiveBayes。

17
00:01:49,640 --> 00:01:55,660
把数据划分的比例设为90%，

18
00:01:55,660 --> 00:02:07,280
这样留出10%作为测试数据。然后，确保输出的是

19
00:02:07,280 --> 00:02:14,280
测试数据的预测结果。运行。我们想看输出的预测。

20
00:02:14,960 --> 00:02:20,840
这数据集有两个类别，分别是tested_negative和tested_positive，

21
00:02:20,840 --> 00:02:25,569
包含实例（编号1，编号2，编号3，等等）。这是真实的类别tested_negative，

22
00:02:25,569 --> 00:02:29,959
tested_positive，tested_negative等。这是预测的类别tested_negative，tested_negative，

23
00:02:29,959 --> 00:02:34,819
tested_negative，等。误差列下面的加号说明

24
00:02:34,819 --> 00:02:41,459
那里有一个误差，所以，实例2有一个误差。这些是

25
00:02:41,459 --> 00:02:43,019
NaiveBays输出的概率。

26
00:02:43,019 --> 00:02:51,020
所以对于实例1，negative的概率是99%，positive的概率是1%。

27
00:02:51,029 --> 00:02:56,340
所以，我们预测它是negative的；这就是为什么是tested_negative。

28
00:02:56,340 --> 00:03:02,489
事实上，我们是正确的；它是tested_negative。这个

29
00:03:02,489 --> 00:03:07,909
实例的预测是不正确的，我们预测67%的可能是negative，33%的可能是positive，

30
00:03:07,909 --> 00:03:14,549
所以它是negative的，但是我们错了。这里，我们最好说

31
00:03:14,549 --> 00:03:18,760
它肯定是negative的，而且我们是对的；这里，我们认为它会是negative的，

32
00:03:18,760 --> 00:03:24,260
但是，我们并不确定，结果证明我们错了。

33
00:03:24,260 --> 00:03:31,150
有时，以概率为输出要比非要得到一个二元的

34
00:03:31,150 --> 00:03:34,620
非黑即白的分类要好。

35
00:03:34,620 --> 00:03:41,620
其他的数据挖掘方法也能产生概率。如果我们使用ZeroR，

36
00:03:46,689 --> 00:03:53,689
这些是概率（65%比35%）。它们都一样。

37
00:03:55,000 --> 00:04:00,650
当然，它是ZeroR！（它总是做出相同的预测）。在这里，它的结果总是tested_negative

38
00:04:00,650 --> 00:04:05,699
并且所有的概率都一样。这样的原因是，

39
00:04:05,699 --> 00:04:11,650
如果你看幻灯片，我们选择90%作为训练数据，10%作为测试数据，

40
00:04:11,650 --> 00:04:18,650
训练数据集包含448个negative的实例和243个positive的实例。

41
00:04:18,650 --> 00:04:28,180
记得3.2节的"拉普拉斯修正"？我们在每个数目上加1，得到449和244。

42
00:04:29,560 --> 00:04:37,620
这样我们得到了是negative实例的概率为65%。这就是这些数字的来源。

43
00:04:40,150 --> 00:04:50,800
如果我们运行J48，我们会得到一个更有趣的概率

44
00:04:51,920 --> 00:04:56,560
分别是negative的和positive的概率。

45
00:04:56,560 --> 00:04:58,200
你可以看到误差在哪里。

46
00:04:58,200 --> 00:05:00,430
这些概率都是不一样的。

47
00:05:00,430 --> 00:05:06,110
本质上，J48利用概率做修剪操作

48
00:05:06,110 --> 00:05:11,820
当我们讨论J48的修剪操作时，我们提到过这一点，虽然，我没有明确说明

49
00:05:11,820 --> 00:05:15,400
这些概率是如何得到的。

50
00:05:15,400 --> 00:05:21,380
logistic回归的想法是让线性回归也生成概率。

51
00:05:21,380 --> 00:05:23,990
这变得有点吓人。

52
00:05:23,990 --> 00:05:29,380
记得，当我们使用线性回归分类时，我们利用回归

53
00:05:29,380 --> 00:05:36,380
计算一个线性函数，然后使用阈值来决定是0还是1。

54
00:05:36,650 --> 00:05:41,200
这很诱人去想象，你可以把这些数字理解成概率，

55
00:05:41,200 --> 00:05:43,660
而不是阈值，但这是一个错误。

56
00:05:43,660 --> 00:05:45,690
它们不是概率。

57
00:05:45,690 --> 00:05:48,960
这些回归线得出的数字有时会是负数，有时

58
00:05:48,960 --> 00:05:50,100
会大于1。

59
00:05:50,100 --> 00:05:54,710
它们不可能是概率，因为概率不能为负或大于1。

60
00:05:54,710 --> 00:06:01,660
为了得到更好的概率估计，要用到一个稍微复杂的技术。

61
00:06:01,660 --> 00:06:04,350
在回归分析中，我们有一个线性的总和。

62
00:06:04,350 --> 00:06:10,020
在logistic回归中，我们有相同的线性和（和我们之前看到的线性和一样）

63
00:06:10,020 --> 00:06:13,540
但是我们把它嵌入在这样的公式中。

64
00:06:13,540 --> 00:06:16,120
这就叫做“对数变换”。

65
00:06:16,120 --> 00:06:21,460
对数变换（这是多维的，有很多不同变量a）。

66
00:06:21,460 --> 00:06:27,340
如果我们只有一维，一个变量a1，然后如果这是

67
00:06:27,340 --> 00:06:32,360
对数变换的输入，输出看上去像这样：取值区间从0到1。

68
00:06:32,360 --> 00:06:36,090
它是由一个更温和的函数产生的近似S型的曲线。

69
00:06:36,090 --> 00:06:42,540
而不是0，然后是一个阶梯函数，它是一个阶梯函数的温和版本，

70
00:06:42,540 --> 00:06:49,800
不会小于0，不会大于1，在0和1之间是平滑的变换。

71
00:06:49,800 --> 00:06:54,930
当你使用对数变换，而不是最小化平方误差时（记住，

72
00:06:54,930 --> 00:07:00,460
当我们做线性回归时，我们最小化平方误差），最好选择加权

73
00:07:00,460 --> 00:07:05,860
来最大化一个叫做“对数似然函数”的概率函数，

74
00:07:05,860 --> 00:07:10,210
就是这个在底部的，相当吓人的公式。

75
00:07:10,210 --> 00:07:12,620
这是logistic回归的基础。

76
00:07:12,620 --> 00:07:15,889
我们不再介绍详细的内容，我们开始试着用它。

77
00:07:15,889 --> 00:07:19,139
我们打算载入diabetes数据集。

78
00:07:19,139 --> 00:07:23,360
上节课，我们通过回归分类得到了76.8%的准确率。

79
00:07:23,360 --> 00:07:29,370
让我告诉你，如果使用ZeroR,NaiveBayes和J48，你会得到这些准确率。

80
00:07:29,370 --> 00:07:35,460
找到logistic回归方法。

81
00:07:35,460 --> 00:07:38,310
它在functions目录下，叫做Logistic。

82
00:07:38,310 --> 00:07:41,620
使用10-折交叉验证。

83
00:07:41,620 --> 00:07:43,540
我不输出预测结果。

84
00:07:45,360 --> 00:07:50,540
运行。准确率是77.2%。

85
00:07:52,080 --> 00:07:59,290
这是这一列中最高的了，尽管并不比NaiveBayes好很多，

86
00:07:59,290 --> 00:08:02,070
也许你会对它是否真的好有一点怀疑。

87
00:08:02,070 --> 00:08:07,639
重复了10次，算出平均值，我们得到了10次运行

88
00:08:07,639 --> 00:08:08,930
的均值。

89
00:08:08,930 --> 00:08:15,480
当然，ZeroR的结果都是一样的，65.1%;它每次产生的准确率都一样。

90
00:08:15,480 --> 00:08:21,910
NaiveBayes和J48是不同的，这里logistic回归的平均准确率是77.5%,

91
00:08:21,910 --> 00:08:27,970
这个结果优于该列中的其他结果。

92
00:08:27,970 --> 00:08:30,880
你可以把这个思路推广到多个类。

93
00:08:30,880 --> 00:08:37,880
上一课中，我们对于每一类进行回归，

94
00:08:37,880 --> 00:08:38,810
一个多响应回归。

95
00:08:38,810 --> 00:08:44,209
实际上，在那种情况下，logistic回归工作的并不好，因为你需要

96
00:08:44,209 --> 00:08:48,149
各种不同类的概率的和等于1。

97
00:08:48,149 --> 00:08:50,700
这使得计算更加复杂，

98
00:08:50,700 --> 00:08:55,000
并需要作为联合优化问题来解决。

99
00:08:57,040 --> 00:09:02,850
logistic回归是一种常用的强大的机器学习方法，

100
00:09:02,850 --> 00:09:07,009
它利用对数变换直接预测概率。

101
00:09:07,009 --> 00:09:12,749
它就像NaiveBayes一样，利用概率工作。

102
00:09:12,749 --> 00:09:17,250
我们这节课还学习了，其他分类方法也可以得出预测概率，

103
00:09:17,250 --> 00:09:21,699
和如何计算ZeroR的概率。

104
00:09:21,699 --> 00:09:26,520
你可以阅读课本4.6节关于logistic回归的内容。

105
00:09:26,520 --> 00:09:30,500
现在你应该去完成本课的课后练习了。

106
00:09:30,500 --> 00:09:31,500
回头见！

107
00:09:31,500 --> 00:09:33,000
再见！

