当前课程知识点:机器学习概论 > 第六章 基于实例的学习 > 6.6 距离加权的K近邻算法 > 距离加权的K近邻算法
然后给大家看几个例子 我们刚才已经给大家看过这个图了
原来是红色的这个分布 有这些点用1NN得到了这个是蓝色的这条线
5NN是这个点 这个 然后呢开始有神奇的事情发生了
我们如果加一个核函数 加一个距离 这个距离呢
我们是用距离的平方分之一
你会发现我现在学到的这个是蓝色的这条线
比刚才的5NN要好很多 也平滑很多 而且接近很多
但还不够好 对吧 我换一个核函数 这个核函数
就把它加了一个smoothing 把刚才的D前面加一个D0的smoothing
我们把它叫做平滑化 然后你会看到这个比刚才那个
看起来确实更平滑一些了 好吧 请期待下一个结果 高斯核函数
你还是用的一样的这个 对你加上一个高斯核函数
还是用的近邻的方法
然后我们可以学到非常接近它真实分布的这个状态了
这个高斯核大家应该已经反复的被知道 就是它是一个指数
就是E的负D 底下除以它的那个参数 它的标准差
所以呢 当这个方法出来了之后 我们又会看到
我们现在就可以总结一下了
今天跟大家讲的就是KNN 就是基于实例的学习
我们其实从1NN讲起 到KNN 然后到距离加权的近邻的方法
其实你就要涉及四个factor 四个因素
第一个因素是你要确定一个距离的度量
第二个因素是你打算采用多少个neighbor多少个邻居
第三个呢 是你要不要用一个加权函数
这个加权函数就是我们刚才说的那个核函数
要不要对距离做加权 第四就是你怎么样来输出你的最终的这个
local point 你这个点是什么 在1NN里面
我们刚才给大家介绍的是用了欧式距离 然后呢 我们只看一个
我们不用 也不需要加权 因为你就一个样例 然后呢
你怎么费的这个漏扣的点 就是它离哪个最近就把它输出成哪个
这个就是我们的1NN 对于KNN来说还是欧式距离
只是我们这里看了K个点 还有呢 我们也不用距离加权
然后我们最后的做法是做 做这个投票 然后呢
关于距离加权的KNN呢 我们其实在这里面我们用的就不是欧式距离了
我们是一个scaled的欧式距离 对距离做了放缩
然后要看多少个邻居呢 两种做法 要么是所有的邻居
要么是只看K个邻居也可以
所以刚才课间的时候曾经有同学来问我说 可不可以看
就是看几个邻居可不可以看所有的 可以
我们在距离加权的这个时候
因为你已经天然的把不同邻居的影响考虑进来了
你就可以看多个邻居了 如果你不做加权的话
我不建议你看所有邻居 那就是属于对所有的结果
你都大锅饭的去投票 那是不可以的
但你考虑了距离加权你就可以看所有的邻居
当然你也可以只看K个邻居 然后还有你用什么样的
要不要选择距离加权函数呢 要呀
然后这个时候你可以用很多种不同的和
其中我们刚才给了一个高斯和 请大家留意这里有一个高斯和
这里是一个 我们刚才说它是高斯和的参数 这个除以一个
就是标准差的那个参数 就是这个高斯
高斯曲线的这个高斯分布的标准差 这个我们把它叫做KW
这个KW是描述了这个 的宽度 它很重要 它很影响结果
我们一会儿会给大家用实际的例子 就是用数据的例子来看一看
然后那么你得到了 而且高斯和只是其中之一哈
你还有其他的核函数 我们刚才都写 都说过
其实理论上来讲什么样的核函数都可以 有可能可以使用
要针对你的问题来去分析
唯一的要求就是它必须得是一个距离的倒数
就是和距离是反向的倒数的关系
然后那怎么样去 去拟合最近的那个呢 你就把这个权重加上
就是把距离权重加上 做一个加权的投票
或者加权的距离的计算平均就可以了
这是我们要做的所有的事情 但是呢
我们在这里给大家再讲一些更新的topic叫做
locally weighted regression 这个事实上给大家做一个示意图
大家就知道什么叫做locally weighted regression了
大家在此呢 我们先看它其实 你看这个名字
你就知道它是什么算法了 首先它是一个regression
什么是regression 就是它是一个拟合
它其实就是要拟合出一个你最终的连续值的这种输出的目标函数
就是它不是离散的输出 而是连续输出的时候 我们会给它一个
把它这个问题不是一个分类任务 而是一个回归任务
是一个拟合regression 然后呢 local是什么意思呀
local的意思是说 我们只用你这个点附近的局部点就可以了
也就意味着你可以不用所有的点 你这个是取K
K用一些局部的点 我们这个就叫local 然后weighted的呢
事实上是说每一个点对这个当前这个点的贡献 是是有限
就是是加了权的 这么听起来大家觉得这个好像跟
刚才的距离加权的K近邻好像没什么区别嘛 的确
它可以看作是距离加权K近邻的一个特例 这个特例呢
就是因为我们是在做regression 是在做拟合 而刚才的那个
那个距离加权的KNN 你其实我们是拿离散点来去 来去举例的
这个呢 会有一个问题 就是regression的时候
你到底怎么样去做 在局部的时候怎么样做拟合
我们在这个举一个例子 假设这个是我们的 是这个样子
你其实会觉得它是一个这样的一批点
那么如果你要用一个线型的函数去拟合 你可能学到的是这种
这种样子 那其实效果会很糟糕 对吧 那么接下来呢
我们其实想有没有什么办法能改变这个呢
我们其实如果基于simple regression的做法
你这种线型回归你找到的这个 它的误差就会非常大了
我们在这儿主要指的是线型回归 那事实上我们如果用绿色来描述
用这种局部的我们加权的线型回归 可以做到什么样的事情
我们在这儿主要是做线型回归 你用几个点去求一条
做一个线型回归 然后这是你的第一个
然后这个就是你能够预测出来 你会发现它跟这个很接近
然后呢 下一个点 比如说在这个位置的点呢 你用这个位置的点
就是这个你要预测的这个点 附近的点去做线型回归
距离加权的线型回归 然后得到了这样的曲线 然后关于这个点
它应该是什么 应该是用它附近的点去做locally的regression
然后关于这个点 你也是用它附近的点去做regression
最后你会发现 你其实对于每一个数据点
你是用了一个局部的线型回归的模型 去做了一个拟合
线型模型去做了拟合 而且这个可以有距离加权
拟合出来的时候 每一个点其实最终它可以拟合的非常的接近
它的原始的分布 它有一个好处 就是你用的其实本质上
你是用的线型模型 线型模型非常的简单方便 易于计算
有特别多的好处 而且不容易过拟合
但是 因为你用了locally weighted 的这种方式 你
就可以最终让它呈现它事实上能够表达和描述的是一个复杂的规律
所以这个也是我们在这里要做一些介绍的
因此呢 对于locally weighted regression来说
这个是用locally weighted regression可以得到的结果其实也是很平滑的
也是用scaled的欧式距离 也是用这个 也是用核函数
唯一不同的是 它跟那个前面的distance weighted KNN相比
它唯一不同的是怎么样去fit你当前的这个点呢
你其实是去找一个local局部的线型模型
然后去找优化的是你局部线型 局部的这个线型模型它的
它的那个均方误差 然后使得均方误差最小的那个
就作为我当前这个局部的线型模型的这个输出
所以这个就是我们跟大家介绍的 应该是第五个
今天这个课里面介绍的第四个 还是五个 1NN KNN
然后还有distance加权的 那第四个locally weighted regression
第四个方法
然后最后给大家看一些例子 可能会有一些感受
你看这个是一些数据三种类型的数据点 我们如果就用线型回归
看到的是得到的这样的结果
你会发现对最左边的这个其实误差非常大
就基本上我们肉眼可见它其实应该是这样的一个 一个曲线
但是基本上损失了所有的信息
这个就是模型的上面的bias 这个模型呢
你看起来的fit得挺好了 但是它其实跟我刚才举的例子是很像的
它其实本质上我们肉眼 人看起来觉得它应该不是一个线型模型
然后这个呢 我们看不出什么规律来
倒反而觉得这个线型模型可能看起来还OK 好
然后还有一种做法就是 你就把点连到一起 等连到一起呢
你其实会发现这种情况 你就把噪声全都fit上了 但这种情况呢
你连了这个点 因为它数据本身也比较干净 你连了这个点感觉
哇 这个描述的很好呀 然后但这个办法你也一样是有这个噪声的
把噪声也fit的非常明显 最近邻的办法
会发现和直接连接点差不了太多 跟刚才的直接连接点非常像
它只是把那些抖动变成的阶梯状 显得略微平滑了一点
K近邻 我们这里用了9近邻 然后K近邻的时候
你会发现这个还是smoothing做的很好的 就是对噪声的 比如说这样的点啊
这种的例外的点 其实还是可以做得挺好的 但是呢
你的这个 就是它在一些有特别
特别陡的这些地方你损失的一些信息
这里其实也损失掉了不少的信息 然后第二个这个情况
除了两头之外 看起来也还行吧 但是还是不令人满意
然后对于第三个这种情况呢 你会觉得它的
它大概 trance到了它的趋势 但是仍然是在这种前后的
这种效果跟线型拟合相比效果还是要差很多 这是9NN
然后呢 这个是kernel regression
就是distance weighted regression 那个kernel regression
大家不知道是不是能看得清楚
我们在这里面的窗口取乘三十二分之一
然后就是x 这个x轴的32分之一 因为kernel决定了
你影响它的这个每一个已有的这些点 对你的距离的影响范围
然后所以你会看到这个就平滑很多了
然后但是事实上如果你把kernel变得更高一些的话
不是 把这个KW 把这个窗口变得更高一些的话
效果会变差 就是fit就不是特别好了
然后这个非常好 这个基本上是目前看到的最好的结果
然后这个呢 就平滑很多
但是我们确实也不知道这种变化它到底是噪声
还是说它其实会比那个linear regression好一点但是
然后所以其实特别值得提醒的是
如果你要用这种distance weighted这种
kernel regression的话
特别重要的是kernel的宽度其实是很有影响的
就是这个KW 特别需要去考虑一下
好 然后我们这个是给了一个locally weighted regression
就是locally weighted regression就是在局部线型regression
它跟刚才的那个kernel number的distance weighted kernel
是不完全一样的 就是最主要是它在输出的时候 在这里用了线性
然后线性你会发现 这个拟合的非常好
但这个的宽度我们取了十六分之一 然后这个宽度是三十二分之一
这个宽度是八分之一 总之目前为止 我们觉得这一批结果是最好的
但你也一定体会到了 你瞧对不同的数据点 那个KW都得不一样啊
那它到底哪个好呢 看来也只能训练一下
就是我们虽然说它是非参数的方法 但是呢
其实仍然需要有一些参数去训练 只是模型本身不是固定的
最后跟大家总结一下一个概念叫做lazy learning和eager learning
就是懒惰的学习和eager learning
热情的学习
对 和热情的学习 好 这个翻译不错
好 反了 那么eager learning是说我先去设定一个假设和模型
比如说 你看到这种随机的运动 你觉得就是一个老鼠
然后现在来了一个random movement 你就说我看到一个老鼠了
这是我们以前的那些model之前讲的
lazy learning呢 是我们instance base learning属于lazy learning的部分
lazy learning说 我先什么都不干先存下来
来了新的之后说它跟哪个很像 它就是哪个
那我们今天学的就是lazy learning的一类方法
lazy learning它的你的查询来了之后 就是你要分的样例来了之后
它才会去做泛化 然后它的 所以它训练时间很短
但它测试时间太长了 然后相反的eager learning呢
我在看到这个之前 我先把模型泛化好了
所以它的训练需要比较长的训练时间 测试基本上瞬间就可以完成
然后lazy learner呢 你是可以去做到局部优化
但是这种eager learner 大多数情况下
我们更多情况它往往能够达到全局的去实现全局优化的
如果它们的假设空间一样的话 那么比如说它们都是线性函数的话
lazy learner往往能够描述更复杂的问题
有更复杂的表达更复杂的函数
好 这个是我们今天跟大家介绍的所有的内容
希望大家呢 能够一步一步的能够follow这一类非常很神奇的办法
然后以后也许还能够用得到 好 今天的课程就到这里 大家下课
-1.1 课程介绍
--课程介绍(1)
--课程介绍(2)
-1.2 机器学习的背景
--机器学习的背景
-1.3 什么是机器学习
--什么是机器学习
-1.4 机器学习系统设计
-第一章作业
-2.1 决策树的基本概念
--决策树的基本概念
-2.2 决策树的实例和发展历史
-2.3 经典决策树算法ID3
-2.4 过拟合和前剪枝
--过拟合和前剪枝
-第二章作业
-3.1 下午茶时间:勒索软件
-3.2 后剪枝
--后剪枝
-3.3 决策树的改进和归纳学习假设
-3.4 贝叶斯学习的背景
--贝叶斯学习的背景
-3.5 极大似然假设、朴素贝叶斯和最小描述长度
-第三章作业
-4.1 下午茶时间:微博的垃圾检测
-4.2 马尔可夫模型
--马尔可夫模型
-4.3 隐马尔可夫模型
--隐马尔可夫模型
-4.4 评估问题
--评估问题(1)
--评估问题(2)
-4.5 解码问题
--解码问题
-4.6 隐马尔可夫模型的应用
-第四章作业
-5.1 下午茶时间:图灵奖
-5.2 假设评估
--假设评估(1)
--假设评估(2)
--假设评估(3)
-5.3 置信度和置信区间
-5.4 有限数据下的比较
--有限数据下的比较
-第五章作业
-6.1 下午茶时间:黑洞照片
-6.2 基于实例的学习的基本概念
-6.3 最近邻算法
--最近邻算法
-6.4 K邻近算法
--K近邻算法
-6.5 KD树
--KD树
-6.6 距离加权的K近邻算法
-第六章考试
-7.1 支持向量机的背景
--支持向量机的背景
-7.2 线性支持向量机
-第七章作业
-8.1 核函数支持向量机
-8.4 支持向量机总结
--支持向量机总结
-8.5 无监督学习简介
-8.6 层次聚类
--层次聚类
-8.7 K-means聚类和K-medoids聚类
-第八章作业






