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

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

12.3 近邻法(II)在线视频

下一节:12.4 决策树(I)

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

12.3 近邻法(II)课程教案、知识点、字幕

大家好

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

在前面讲完近邻法的基本原理之后

咱们今天看一看

在R里面是如何实现近邻法的

当然R里面对近邻法有很多包来实现它

咱们这边选用的是kknn这么一个包

它实现了我们前面讲的加权近邻法

具体来讲

它是调用这个kknn这个函数

进行模型的训练

这个函数里面要进行模型训练的话

至少得包含这么三个参数

第一个参数就是这么个公式

指定y和X

第二个参数是什么

就是我们的训练集

通过我们前面的这个算法原理可以知道

它至少是包含什么

包含一个训练集还有一个测试集

我们这一课首先想看看这个kknn

这个加权的近邻法

对于我们这个成绩表cjb这个数据

对于文理分科这个问题

它的拟合效果怎么样

这个时候我先把什么 先把这个测试集

也设为什么

也设为我这个相同的那个训练集

好 我们看看它的拟合效果

这个时候拟合出一个什么

拟合出一个imodel

在R里面所谓训练出来模型

它其实很多模型训练出来之后

本质上还是什么还是一个列表

具体训练结果是什么

所拟合的结果就是这个imodel的这个列表里面

fit这个组成部分

我们将这个组成部分存储下来

假如我们想衡量它的具体的

模型训练的指标的话

或者说拟合的效果的话怎么办

我们可以计算一下它的这个分类的错误率

分类错误率可以自己通过这个table

(得到的)这个混淆矩阵来构建

也可以调用这个Metrics这个包

里面专门有个ce()这个函数

它接受两个参数

一个是什么

一个是我们这个实际的这个数据

一个是预测的数据

经过比较这两个数据

我们发现它的拟合的

拟合的效果怎么样 还可以

它分类错误率只有11%

就是十有八九他能预测对

大概这么一个性能

但是这个时候我们不能高兴太早

为什么

因为这只是什么

这只是训练集上面的拟合的效果

现在还不能代表他的泛化的误差

我们来看看

当我们有一份训练集

同时有另外一份测试集的时候

它的测试效果怎么样

我们通过这个测试的误差

来近似表达我们的泛化的性能

这时候我们就在做一个测试集的一个

相应的模型性能的一个(测试)

模型训练的过程

这个时候我们同时还要调用什么

还要调这个kknn对吧

因为作为一个惰性学习法

它训练和测试过程同时进行的

也就是说有了一个新的测试样本之后

我再临时看一下我对那个训练集而言

在训练集里面找一个小伙伴

然后看看他头上最多的标签是什么

所以它是一个惰性的过程

这里面和前面这个代码其实唯一的区别是什么

就这个test

我这里边改成什么了

改成了我的测试集

我们再看看测试集

它这个fit的效果

它的预测的效果是什么

它的分类错误率就高达0.25了

将近有25%的类别是分错的

就文理分科这一块

和实际的情况相比确实有一些错误

但也有十之七八的可能性

他能预测对

这是我们没有经过参数调优

它目前达到一个性能指标

当然我们可以通过相应的实验

我们来怎么样

我来找究竟哪个K是最好的

哪个核是最好的

我们来看看能不能把

这个模型性能指标提高一些

当然我们可以自己写一个循环

来枚举不同的K和不同的核

然后来训练它

看看哪个K和哪个核组合的效果最好

当然这里面也有一个

这个包里面有一个专门有这么一个

选优的一个函数

同样我们也是什么

也是这么一个公式

然后相应的数据交给他

然后我设定什么

kmax也表示从1到100

这个K值我枚举一下

然后同时我再设定一下

我究竟想从哪些核里面进行比较

我们目前列了这么几个核

好 我们看一下训练的结果

这个训练结果

我们在这个控制台里面敲完之后一回车

发现这个时候最小的分类错误率多少

21%

这个时候是针对什么

是针对测试集来讲

相应的核是什么

是高斯核

最好的K是多少

最好的K是25

这就是直接将我们什么

将我们的参数进行了调优了

这个时候我们就找到了我们

最好的核和最好的什么

最好的K值

当然这个最好的核和最好的K值

并不是说我现在还需要什么

还需要人工的来通过ctrl c加ctrl v复制粘贴

不需要这样怎么办

我们这个训练的结果是什么

它其实本身也是一个列表

它列表里面专门就有一个这个best parameters

就是最好的参数

这个组成部分依旧是一个什么

依旧是一个列表

它又包含两部分

一个是K一个什么

一个是这个核对吧

所以我们通过这个美元符号

$符号将它取出来就可以

这个最好的K是25

最好的核是高斯核

当然除了这个最好的K和最好的核之外

我们还想知道其它的K值和

不同的核他的组合结果是什么样的

我们可以绘制一个图

通过ggplot2绘这个图得到相应的结果

直观展示一下

我们先看看这个具体的过程

我们可以先什么

先把这个训练的结果

这个误分率先取出来

我们View一下

发现它是什么

它是一个数据框

最小错误率

我直接用这个min这个函数就可以得到

假如我们想通过ggplot2

将这个不同的K 不同的核

进行组合进行显示的话

我们还是需要做一个数据长宽变换

先把这个K先得一列

是K

然后新增加什么

我们进行长宽变换的话

设定一列是什么

核kernel

然后对不同的核怎么样

它相应的分类错误率进行记录

这个时候相当于什么

把现有的一行变成多少

123456

把它现有的行变成六行

做一个数据的长

由宽数据变成长的数据

变换完之后

我们再进一步交给ggplot2进行绘图

咱们看看代码的实现

前面这一部分其实都是什么呢

这一部分都是我们刚才讲到这个

数据变换的过程

数据一个长宽变化的过程

先将这个数据转化成什么

data.frame

然后先增加这个K这一列

再之后

我将这个数据由宽数据变成长数据

只是这个K这一列不参与这个什么

宽数据变长数据这么一个变换过程

进行长宽变换之后

我就交给什么ggplot2

这么一个函数

将X轴映射为K的值就是1到100

我们刚才设了 kmax = 100

1到100

然后Y就是相应的什么

我这个分类的错误率

colour我不同的颜色用不断核来进行映射

这一部分其实相当于什么

相当于进行了分组

不同的核就分成了不同的 绘制成不同的曲线了

好 具体的映射的过程

我把它映射成这个line

就是映射着一条条曲线

同时叠加上 point

映射成相应的那个点

除了对每一个K 每一个核进行绘制相应的

折线以及相应的点之外

还做什么

我们增加了两条线

一条什么一条垂直线

这个垂直线在这个最好的K这一块画一条竖线

然后再什么

在最小的分类错误率里面画一条水平线

这是我们整个这个代码

一个最基本的一个简单的解释

咱们看一看具体的效果

具体最后绘制的图形

X轴就是从1到100的什么这个不同的核

然后Y轴就是分类的什么错误率

分类错误率

然后这里面不同的什么不同的颜色

就是代表了什么不同的核在不同的K上面

它分别的一个分类的错误率

好 我们看得出来

这两条线相交的地方是什么

K值取的是25

相应的核是什么核

是应该是一个高斯核

这就是我们那个通过ggplot2

将所有的不同的核不同的K的组合

它真正的分类错误率的一个变化情况

我们进行了直观地展示

在进行这个模型的这个K值

以及核的选优之后

我们可以进行进一步的什么

K折交叉检验

通过多次的训练测试

看看模型最终它的性能指标

能稳定到哪个水平之上

咱们看看R里面如何实现这个

K折交叉检验的

当然同样还是我们还是采用这个包

kknn对吧

我们先什么

先记录一下这个模型

进行K折交叉检验之前

记录下当前的系统时间

就调用这个Sys.time

并且我输出一下

在控制栏里面输出一下目前的时间是多少

进行K折交叉检验的时候就是要循环K次对吧

因为k交叉检验

每一次当前这一折作为测试集

其余的K-1折作为训练集

好 我先将当前这一折取出来

当前这一次取出来就是

kfolds当前这一折i等于1的时候

就是第一折i等于2的第二折

然后下标取完之后 训练集是什么

注意了 训练集是减掉当前这一折

因为是其余的K-1折

所以这个是减掉当前这一折

而测试集就当前这一折

然后进行模型的构建

我们先看训练集上的表现

训练集上的拟合的性能表现

这和我们前面讲的那个代码是一样的

还是调用kknn()这个函数

这个时候训练集和测试集都是什么

都是设置为什么

都是设置为我这个训练集

好 训练完之后

我调用这个imetrics

就是我们前面讲到的这个模型的

所有模型的性能指标的一个什么

一个存储

就是一个记录

当前是kknn这个方法

是训练集上面的一个表现

它预测的结果以及它什么

它实际的一个结果

这就是将我们目前kknn

它经过这个当前这一折的时候

把这个性能指标写到

global_perfomence这个变量里面去了

接下来我们再做一个测试

这个时候其实kknn还是一样的调用

然后唯一不同的就是这个test

这个测试集不一样了

当然这个时候我们相应的K用的最好的k

相应的核也用的最好的核对吧

同样是调用我们前面所定义的imetrics

这么一个函数

把当前的性能指标写入到全局变量里面去

也是kknn这个方法

但是目前使用的什么

目前是test

测试集的结果

最后我们记录一下

这个训练模型所结束的时候系统时间

把结束的时候的时间在控制台进行显示

最后我们计算一下

通过difftime

计算一下我们这个模型

开始和结束的时候一个时间差

也就是整个这个模型训练

经过K折交叉检验

究竟花了多长时间

我们看一下当前这个global_perfomence

它的一个具体的那个数值

它其实分成这个方法 类别

正确率 错误率这么四列

因为我们十折交叉检验

然后每一折的话

既计算这个训练集 也计算这个测试集

所以当前得到结果总共应该是有多少

应该是20行

每一折它相应的在训练集上的正确率和错误率

我们都进行记录了

这个值我们在后面

在不同的模型进行对比的时候需要用到

这就是我们在R语言里面

如何实现近邻法一些最基本的一个实现的过程

咱们总结一下

所谓的近邻法究竟是一个什么样的关系

我们说到

前面课程里面讲到了

所谓机器学习最核心的都是什么

都是寻找关系结构

那我们看完了近邻法的一个最基本的原理

也看完了近邻法的一个实现

应该有一个直观的认识了

那我们总结一下

既然我们机器所学到的规律

都是关系 都是结构

那近邻法究竟代表一种什么样的关系

它表现形式是什么

同学们思考一下这个问题

其实我们可以通过下面这个图一个直观的展示

假如我们这个K近邻法里面

这个K值我取为1的时候

也就是所谓的最近邻

它其实可以看成一个什么

看这个空间划分的过程

空间划分的过程

就不同的点有不同的什么势力范围

当我这个一个新的点

落入我某一个点的势力范围的话

那毫无疑问它就属于什么

它就跟这个点的标签是一致的

这就所谓的最近邻

我们其实可以理解成什么

一个空间的划分

当然K取其他值得时候

其实也可以视为一个空间划分的过程

这就和我们前面讲到了机器学习

其实无非是什么

变量之间的关系和

数据空间的结构所呼应起来了

这面就是对近邻法来讲

就这么一种数据空间一个切分的结构

本次课到此结束

谢谢大家

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.3 近邻法(II)笔记与讨论

也许你还感兴趣的课程:

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