当前课程知识点:R语言数据分析 >  下部:博术 >  第12章 既是世间法、自当有分别 >  12.2 近邻法(I)

返回《R语言数据分析》慕课在线视频课程列表

12.2 近邻法(I)在线视频

下一节:12.3 近邻法(II)

返回《R语言数据分析》慕课在线视频列表

12.2 近邻法(I)课程教案、知识点、字幕

大家好

欢迎来到《R语言数据分析》课程

今天和大家交流

分类算法里面的第一种

近邻法

先看一下我们这个算法模型的导航图

除了这个深度学习模型之外

我们基本上其他算法模型我们都会讲解

近邻法 树模型 随机森林

朴素贝叶斯 逻辑斯蒂回归 人工神经网络

以及支持向量机

在讲这些算法模型之前

我想先有一个最基本的概念

就是叫 有生于无

是没有模型的时候

我们是怎么办的

实际上我们发现

在后面建模的过程中

这个有生于无的概念会经常出现

有生于无什么概念

我们先看看

比如说我们现在有这么一个问题

艾新波 当然也是我自己

曾经就读的沙洲中学

这应该是20多年前的事情了

总共有6个班

请你预测一下他读中学的时候属于几班

毫无疑问碰到这种问题的时候

我们没有任何信息

假如没有任何模型的时候怎么办

那我只能就是听天由命了

也是怎么样

掷色子

当我们无从下手的时候基本上也就

一切只能什么

当然我们不能说是随缘吧

应该叫随机

这时候并不是有多佛性

而是什么

确实没有办法的时候

假如我非要预测一下他属于几班

那就是掷色子

色子哪一面朝上

我就说他属于几班

这个方法看似非常随意

但其实在机器学习很多算法模型里面

模型的起始点

就是随机

比如说我们后面会讲到的

要通过梯度下降法来训练一些神经网络也好

训练其他一些模型也好

我得找一个起始点

这个起始点怎么办

我们只能讲是 千里之行 始于随机

这是我们讲的有生于无的第一个概念

没有模型的时候先随机生成一个

我找不到这个参数的时候

我先随机生成一个

这是第一个概念

有生于无的第一概念

好 我们再看另外一个

比如说我们现在一张图片

大家看一下

就假定我们现在碰到好几个幼儿园的小朋友

这个时候我知道

已经知道有几个小朋友的年龄了

比如说这几个小朋友里面

有一个是三岁的

有另外四个是四岁的

那好我现在想问一下

中间这个小朋友他应该几岁

这时候其实我也不需要有任何模型

也没有任何模型来预测它

那这时候怎么办

我肯定是预测他四岁而不是三岁

为什么呢

少数服从多数是不是

所以当我们没有模型的时候

也就有生于无

没有模型怎么办

很多时候我们也通过

通过均值或者众数来进行预测

实际上 在后面的很多模型里面

其实我们都会发现

在很多模型的某一些步骤里面

都要仰仗这个均值和众数的预测的功能

这也就是我们讲的

当然没有模型的时候

在那些没有模型的岁月里面

要不就是随缘

要不就随机

要么采用这个最简单的

均值或者是众数

开展我们的数据分析

有这个有生于无的最基本概念铺垫之后

咱们就正式进入我们的

我们的算法模型的讲解

首先讲第一种

近邻法

说到近邻法

它其实和我们刚才那个幼儿园小朋友

这个年龄预测几乎没有本质的区别

它是什么

它其实也没有比刚才那个预测的方法高明多少

它什么样的

就我自己这个点在数据空间里面

它先找到自己的位置

然后再环顾我周边还有哪些点

比如说假如我现在找三个点

离我最近三个点

发现有两个点

比如说这个三角形

代表是我是文科那好

那我就把自己设为

自己也设成文科

假如我现在找周边的五个点

来看看最近的五个点

看大部分的同学里面

他们头上贴的标签是什么

1-2-3

5个里面有三个是理科的

那我把我自己贴上标签贴成那个理科

所以所谓的近邻法

就先找自己在数据空间里面定位

然后怎么样环顾四周

看看我周边的K个小伙伴

大多数他们头上贴的什么标签

然后就把我自己贴上相应的标签

贴完标签之后

其实也意味着

也就意味着我这个模型的预测功能就完成了对吧

这样说相对有那么点点抽象

我们给大家举一个具体的例子

比如说我们家现在养了很多家禽

有很多鸡 也有很多鸭

这个时候我们知道

假如我现在在一个二维的数据空间里面

从两个特征上来表征它们的话

一个是声音沙哑的程度

一个是走路这个摇摆的程度

我们发现

鸡的话相对来说

它应该是处于左下角这个位置

而鸭的话处于右上角的位置

也就是说它沙哑的程度比较高

同时走路摇摆程度也比较大

摇摆的幅度也比较大

那好 这个时候我就可以对每一只鸡每一只鸭

在我这个二维的数据空间里面找到一个位置

是不是

现在假如我听其言观其行

我发现什么

我发现有一个新的动物进来了

它在这个位置

大家看一看

假如我一个新的动物进来之后

它究竟是鸭子还是鸡

毫无疑问 它该是什么

它跟这个鸭子离得比较近那它就是鸭子

走路也像鸭子

叫起来也像鸭子

那怎么样

那它应该就是鸭子

当然这是一个相对比较形象的表达

我们在讲这个算法的时候

我们再看看具体从算法语言上来讲

它怎么描述的

这算法的话它输入就是近邻的数目

K近邻

我要找我究竟要找几个近邻

我要观察我周边几个小伙伴

把这个K先确定下来

这是一个输入

另外一个输入训练集

还有一个输入是测试集

一个训练集 一个测试集

输出是什么

对测试集里面的每一个测试样本

预测它的类标号

这就是我们这个算法的输入和输出

咱们来看看这个算法的具体过程

对于每一个测试样本

Z它是(X', y')∈T这个测试集

当然毫无疑问

前面这个X'

是一个特征向量

y'是我这个类标签

目前来讲这个类标签是不知道的

还是未知的

y'还是未知

其实我这个for循环之后结果

就想得到这个y'对吧

计算这个Z和每一个训练样本

大家注意了

是对这个测试集里面每一个需要打标签的那个样本

计算它和每个训练集的样本

(X, y)之间的距离

注意了这个距离是计算什么

是X和X'它的计算

就说y和y'毫无疑问是不用参与这个计算的

它只是这个头上标签而已

并不是在这个数据空间里面这个定位的功能

并没有这个定位的功能

要定位这个数据空间的位置的话

只有这个X和X'

所以我是计算这个X与X'就是特征之间的距离

我选择

再下一步 就选择离Z最近的

一旦这个距离计算出来之后

我就可以选出来

K个离Z最近的近邻

也就说在这个训练样本里面找出K个点

K个样本

找到他之后

我进行什么呢

多数表决

这时候用到这个argmax这么一个函数

这个函数就是一个表决函数

什么意思

就对于不同的类标签

比如我们这边有文科有理科

对咱们这个问题情境来讲 就有文科和理科

那好我看一下

这是一个指示函数

当这里面为真的时候 它就为1

为假时为0

K个近邻里面有多少个为文科

有多少个为理科

当为文科的时候

我可以算一下它总数多少

为理科总数有多少

比如这个五个小伙伴里面有三个是文科

有两个是理科

那毫无疑问我应该就选文科

假如有三个是理科两个是文科

我那有四个是理科一个是文科

那毫无疑问应该选理科

那我最后的结果

多数表决这个y'的结果就是多少

应该就是理科了

这就是我们整个这个近邻法的一个

最基本的一个算法的过程

其实相对是比较通俗易懂的

其实就是在计算这个距离

找到K个最近的小伙伴

然后再看看他头上的标签

贴得最多的是哪一个

然后把我自己贴上标签就可以了

这也实现了我这个算法的输出

我们刚才讲了要找这个近邻要计算这个距离

当然计算距离有很多方法

用得比较多的比如说欧式距离

这个欧几里得距离

或者说这个曼哈顿距离

也称之为街区距离

在R里面有这个dist()

这个函数可以计算这个距离

当然也有一些那个专门的包

比如说cluster包里面有个

daisy()这个函数还可以计算 混合距离

这是我们一些距离的计算的一个过程

前面是一个近邻法一个最基本的原理

但是我们需要提出的是

这里面其实有一个局限性

就是我找身边的K个小伙伴的时候

刚才我们在前面的图里面看到

当我选择三个小伙伴和选择五个小伙伴

它其实结果就明显不一样了

那这时候其实很容易

受我这个对这个K的取值不一样

它非常敏感

要减少这种敏感性的话怎么办

有一种方法叫加权的近邻法

也就是说尽管K个点

决定最后我头上贴的标签

但是当我这K个小伙伴它距离不一样的时候

那每一个小伙伴它对我最后

我应该贴什么标签

它影响力是不一样的对吧

离我越近的应该怎么样

因为物以类聚人以群分嘛

离我越近的话它的影响应该是越大

那离我越远的话

即便可能个数多一点

但因为他那几个点离我都很远

那有可能我还是要按照我这个

离我最近的这个标签来贴对不对

这时候有一个所谓的

距离的加权表决

他其实还是这么一个表决函数

但是这个时候就

不仅计算个数了

还要算什么

把他的什么距离的因素考虑进来进行加权

这个加权的函数其实可以有不同的核函数

有不同的核比如说可以通过这个高斯核

或者通过其他一些核函数

比如求这个倒数都可以

它所表征的意思

都是距离越远

那我的相应的这个权值就越小了

距离越小的时候这个权值越大

最终是看

后面的值

哪一个值每一个标签是最大的

最大的一个标签我就设为

我就将我自己贴成y'

贴上相应的标签就可以

这就是所谓的加权的这个近邻法

一个最基本的原理

好 那最终这个K究竟该如何确定

或者我相应的核函数究竟该如何确定

我们说一下就是K的值的确定

一般来讲我们没有一个明确的算法原理

或者明确的一个最基本的原理能告诉我们

在某一组数据里面

你应该把K设为哪个值

应该怎么办

一般都是直接通过实验的方法

我拿过来试一试

我从K等于1开始我来不断的尝试

究竟K等于几的时候

最后的模型性能指标表现最好

说白了就是

要确定这个K的话

其实没有什么特别的一个理论上的方法

更多通过实验的办法来解决它

就通过实验表明

确实哪个K取值最好的话

那个误差最小

那我就设定相应的K

包括我们刚才讲的这个权值确定那个核函数

其实也是一样的

就是K和核的确定

它其实最终都通过实验的方法

而非这个纯理论的方法推导出来的

好以上就是我们关于这个近邻法的一个

原理的最基本的介绍

至于具体在R里面如何实现

我们下次课再讲

本次课到此结束

谢谢大家

R语言数据分析课程列表:

上部:问道

-第1章 气象万千、数以等观

--第1章 气象万千、数以等观

--第1章 作业

-第2章 所谓学习、归类而已

--2.1 所谓学习、归类而已(I)

--2.2 所谓学习、归类而已(II)

--2.3 所谓学习、归类而已(III)

--2.4 所谓学习、归类而已(IV)

--第2章 作业

-第3章 格言联璧话学习

--第3章 格言联璧话学习

--第3章 作业

-第4章 源于数学、归于工程

--第4章 源于数学、归于工程

--第4章 作业

-讨论题

--如何发挥人工智能的头雁效应

中部:执具

-第5章 工欲善其事、必先利其器

--第5章 工欲善其事、必先利其器

--第5章 作业

-第6章 基础编程——用别人的包和函数讲述自己的故事

--6.1 编程环境

--6.2Mini案例

--6.3 站在巨人的肩膀上

--6.4 控制流

--6.5 函数(I)

--6.6 函数(II)

--第6章 作业

-第7章 数据对象——面向数据对象学习R语言

--7.1 向量与因子(I)

--7.2 向量与因子(II)

--7.3 矩阵与数组(I)

--7.4 矩阵与数组(II)

--7.5 列表与数据框(I)

--7.6 列表与数据框(II)

--第7章 作业

-第8章 人人都爱tidyverse

--第8章 人人都爱tidyverse

--第8章 作业

-第9章 最美不过数据框

--第9章 最美不过数据框

--第9章 作业

下部:博术

-第10章 观数以形

--10.1 一维数据空间(I)

--10.2 一维数据空间(II)

--10.3 二维数据空间

--10.4 高维数据空间

--第10章 作业

-第11章 相随相伴、谓之关联

--11.1 导引

--11.2 关联规则(I)

--11.3 关联规则(II)

--11.4 关联规则(III)

--第11章 作业

-第12章 既是世间法、自当有分别

--12.1 导引

--12.2 近邻法(I)

--12.3 近邻法(II)

--12.4 决策树(I)

--12.5 决策树(II)

--12.6 随机森林

--12.7 朴素贝叶斯

--12.8 逻辑斯蒂回归

--12.9 人工神经网络(I)

--12.10 人工神经网络(II)

--12.11 支持向量机

--第12章 作业

-第13章 方以类聚、物以群分

--13.1 导引

--13.2 划分方法

--13.3 层次方法

--第13章 作业

-第14章 庐山烟雨浙江潮

--第14章 庐山烟雨浙江潮

--第14章 作业

12.2 近邻法(I)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。