大家好！
在大多数的课程，都会有一个难点。
前几节课，你接触了些你大概不愿意接触的数学知识，
你可能认识到你可能永远都无法完全理解
这些机器学习方法的工作细节。
我希望你知道我想传达的是现代机器学习法的要领，
而不是细节。
重要的是，你可以使用它们，并且了解点
它们主要工作原理。
我们不再涉及数学了。
所以，坚持；事情开始变得容易。无论如何，快了：
还有几节课。
我之前告诉过你我演奏音乐。
昨天有人来到我家，带来了一个低音巴松管。
它是管弦乐队中最低沉的乐器。
你不常见到或者听到它。
所以，这里，我试着第一次演奏低音巴松管。
我认为这会是我们课程的最低点，数据挖掘和Weka！
今天，我想要谈一下支持向量机，另一种先进的机器学习的
技术。
我们上节课学习了logistic回归，我们发现
它在实例空间产生线性分界线。
事实上，我们用Weka的分界可视化工具演示了logistic回归
产生的分界（使用的是二维的鸢尾花数据，花瓣宽相对于花瓣长的）。
这条黑线是红色的和绿色的类之间的分界线。
它可能是更合理的，如果我们在这两个类之间划一条分界线，
尽量让它通过两个类之间最宽的通道，尽可能地将
每一类区别开来。
这是一个示意图，黑色的线正好在
两个类的通道的中间。
实际上，数学上，我们可以通过两个关键成员找到这条线，
每个类产生一个关键成员（它们叫做支持向量；这些是确定通道
的关键点），采用两个支持向量的连接线的
垂直平分线。
这就是支持向量机的理念。
在两个类之间划一条线，但是并不是像以前那样为了把它们分开。
我们试着在两个类之间最宽的通道间划线。
这是另一幅图。
我们有两组点，用线沿着每一组的边缘把它们圈起来
（绿色的一组和棕色的一组）。
显然，内部的点不会影响这个超平面，这个平面，
这个分界线。
我把它叫做线，但是在多维的空间它可能是一个平面，或者一个
四维甚至更多维的超平面。
每个组只有几个点会限定分界线的位置：
它们是支持向量。
在这个例子中，有三个点。
支持向量决定边界。
训练数据集的其他全部实例都可以删除，而不会
改变这个分割超平面的位置。
这里有一个简单的方程，这是这部分课程最后一个方程了。
这个简单的方程以支持向量的和的形式给出了
最大边缘超平面的公式。
这些是每一个支持向量的向量积的总和。
计算最大边缘超平面会变得非常简单，只要你知道
支持向量。
这是一个简单的求和，就像我说的，它只取决于支持向量。
其他的点都不会参与计算。
现在，在现实生活中，你也许无法在类之间划出一条直线。
如果两个类之间存在一条可以将它们分开的直线，
它们称为“线形可分离”的，
这幅图里，这两个类就不是线形可分离的。
这也许不太好看出来，但是线这边绿色的区域有一些蓝色的点，
线那边蓝色的区域有一些绿色的点。
这不可能得出一条直线作为分界线。
这使得支持向量机（的数学知识）有点复杂。
但是，在这种条件下找到最大边缘超平面还是可能的。
这就是支持向量机。
这是一个线形的决策分界。
实际上，有一种更聪明的技术可以让你得到更复杂的分界。
它叫做“Kernel trick”（核技巧）。
使用不同的"kernel"公式（Weka中你只需从
提供的kernels中选择），你会得到不同形状的分界线，而不仅仅是直线。
支持向量机很神奇，因为可以避免过度拟合。
分界取决于数据集中数量极少的几个点。
所以，它不会过度拟合数据集，因为它与大多数
数据集中的点没有关系，只取决于几个关键点（支持向量）。
所以它不会发生过度拟合，即使有非常多的属性。
Weka有一些支持向量机的实现。
我们可以看functions目录下的SMO。
让我们去看看。
看一下functions目录下的SMO，它实现了一种
用于训练支持向量机分类器的，叫做序列最小优化算法（Sequential Minimal Optimization）。
这里有几个参数，例如包括，核的不同选择。
你可以选择不同的核：你可以尝试不同的东西。
还有一些其他的参数。
实际上，SMO算法只能用于二类的问题，所以只能用于
二类的数据集。
Weka还有一些更加复杂的支持向量机的实现方法。
有一个叫做LibSVM的库，是一个外部库，Weka与这个库之间有一个接口。
这是LibSVM工具的包装类。
你需要分别从Weka下载这些，并把它们放在正确的Java classpath。
你可以看到这里有许多不同的参数，事实上，
许多关于这个支持向量机工具包的信息。
这就是支持向量机。
你可以阅读课本的6.4节了解更多内容。
请完成本课的相关练习。
这部分的最后一节课再见！
再见！