大家好！我现在坐这里，在新西兰。
新西兰在我后面的地球仪上。
这里是新西兰，在世界的顶端，被大海环绕。
但是，以前我不在这里。
我20年前来到这里。
在地图上，这里当然是新西兰，Google地图把北半球放在上面
你用的那个应该也是这样。
我从工作多年的 Calgary大学来到这里。
我以前是 Calgary大学计算机科学的系主任。
但是，最初，我来自Belfast，北爱尔兰，就在（大不列颠）联合王国的这里。
所以，我的口音实际是北爱尔兰口音而不是新西兰口音。
这不是新西兰口音。
在第三部分的最后一节课，我们要介绍的是另一种机器学习的
方法，叫做最邻近（nearest neighbor）或者基于实例的（instance-based）机器学习方法。
当人们谈论机械式学习，他们只谈论记住的东西，
而没有真正的思考。
这是最简单的学习。
nearest neighbor就是一种机械式学习。
它只记忆训练实例，然后，为了给新的实例分类，寻找
训练数据集中与新实例最相似的的实例。
这里的知识表现为实例的集合。
这是一种懒惰学习。
学习者在预测之前不用做任何事情。
令人费解的是，它也被称为基于实例的（instance-based）学习。
nearest neighbor learning和instance-based learning是一样的。
这是一张二维的实例空间示意图。
蓝色的点和白色的点代表两种不同的类别，例如，yes和no。
然后，我们有一个未知分类的点，一个红色的点。
我们想知道它的分类。
所以，我们简单地去找每个分类中最接近的实例，比较哪个更近。
在这里，是这个蓝色的点。
所以，我们将这个红色的点归为蓝色的点所在的分类。
如果你想想看，在两个点之间划一条辅助线。
这里是一条直线，最近的两个点的连线的中垂线。
nearest neighbor 方法产生一个线性的决策边界。
实际上，要比这复杂一点。
它产生一个分段的线性的决策边界，有时是由一组短小的线性线段
组成的决策边界。
当然，关键是如何理解“最相似的”。
我们需要一个相似性函数，通常，人们用常规的距离函数，
欧氏距离（Euclidean distance），即属性值的差异的平方和。
实际上，是平方和的平方根，但是我们只是比较
两个实例，我们不需要开平方。
或者，你可以使用曼哈顿距离（Manhattan 或 city block distance），
即属性值之间的绝对差值总和。
当然，我这里说的是数值属性。
如果是名词类属性，我们需要定义不同的属性值之间的差异。
通常，人们认为属性值不同的距离是1，
属性值相同的距离是0。
对于nearest neighbor learning，这也许是一个归一化属性的好主意，
这样距离都在0和1之间，距离就不会被
一些比例巨大的属性扭曲。
怎样处理噪音实例。
如果我们有一个有噪音的数据集，我们偶尔会找到一个
分类错误的训练实例作为测试实例最邻近的实例。
你可以通过使用k-nearest-neighbors避免这种情况。
k可以是3或者5，你寻找最近的3到5个实例，
其中的大多数属于某一个分类，则该实例也属于这个分类。
这就是k-nearest-neighbor方法。
在Weka中，这叫做IBk，这是一种懒惰学习法。
让我们栽入glass数据集。
切换到分类面板，选择懒惰分类器IBk。
直接运行它。
准确率是70.6%。
模型并没有真正的显示出来，因为就没有模型。
只有训练实例集。
当然，我们用的是十折交叉验证。
让我们改变k的值，这个kNN表示k的值。
默认设置是1。
（使用的临近的实例数）。我们将改为5，运行。
k等于5时，我们得到了稍差一些的结果，67.8%。
我认为这不是一个含有很多噪音的数据集。
如果我们把k变为20，再次运行。
我们得到65%的准确率，更加差一些。
如果我们用一个充满噪音的数据集，我们会发现随着k刚开始增大时，
准确率会提高。
然后，（随着k增大）准确率总是会开始降低的。
如果我们把k设为一个极值，接近整个数据集的大小，然后
我们算出测试实例到所有训练实例的距离，并且求平均值
我们大概会得到一个的接近基线的准确率。
这里，如果我把k定到极大的值，例如100。
找出最近的100个实例，求它们的类别的平均值。
我们得到的准确率是35%，这个数，我想已经非常接近
这个数据集的基线准确率了。
让我们用ZeroR验证一下，基线准确率准确的是35%。
nearest neighbor是一个很好的方法。
通常都很准确。
它可能有点慢。
每一个预测都需要扫描整个训练数据集，
因为我们需要计算未知的测试实例到所有训练实例的距离
以便找到最邻近的实例。
一些复杂的数据结构可以加速这个过程加速，所以，
你不需要每次都扫描整个数据集。
（IBk）假设所有的实例都是一样重要的。
如果不是这样，你可以使用根据属性的重要性
来选择或加权属性的方案。
如果我们有噪音实例，那么我们采纳k个近邻实例中的占大多数的分类，
或者我们根据实例的预测准确率给它们加权。
再或者，我们可以试着找到每个分类别中可靠的原型，
这是一个非常老的方法了。
统计人员从二十世纪五十年代开始使用k-nearest-neighbor。
这里有一个有趣的理论结果。
如果训练实例的数量趋于无穷大，k也增大，以致于
k/n接近0，但k也趋于无穷大，k-nearest-neighbor的错误率
趋于这个数据集的理论最小错误率。
这从理论上保证了，对于较大的训练数据集和较大的k值，
使用nearest neighbor 方法，可以得到较好的分类结果。
课本的第四章第七节介绍了基于实例的学习。
这是第三部分的最后一课。
请大家完成课后练习，我们第四部分见。
再见！