当前课程知识点:R语言数据分析 >  下部:博术 >  第12章 既是世间法、自当有分别 >  12.1 导引

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

12.1 导引在线视频

下一节:12.2 近邻法(I)

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

12.1 导引课程教案、知识点、字幕

大家好

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

今天和大家交流的主题是

既是世间法 自当有分别

咱们这边的分别是指分门别类

也就是说从今天开始

咱们这个课正式进入分类相关的内容

分类其实属于有监督学习的一个主体

一个代表性的内容

有监督学习

它其实就是基本上可以说是分类与回归

所谓的分类与回归什么意思

就是根据目前我们所拥有的信息

也是我们所采集到的数据

来建立我们所关心的变量

与其他相关的一些变量之间的关系

这么一个过程

这就是所谓的分类与回归

具体来讲

假如我们用y来表示这个感兴趣的变量

比如说我们目前的问题情境就是

就是这个文理分科

这是我们感兴趣的

那好这个时候那就设为y对吧

用X来表示其他可能跟y有关的变量

也有可能是若干个变量组成的向量

对咱们这个问题来讲就是

就是我们的性别以及九门课的成绩

这个长度为10的一个向量对不对

好 所谓的分类回归是

就是建立下面这个函数关系

y=f(X)当我能把这个f找到的时候

这个分类与回归的任务其实也完成了

我们一般讲称这个y为

因变量或者响应变量

它一般是一个类别标签

或者一个具体的数值

而这个X

我们经常称之为自变量

也是我们所谓的属性特征

也称之为解释变量或者协变量

总而言之

我们所谓的分类与回归

其实就建立这么一个函数关系

那我们先看看重新温习一下函数的概念

我们说函数的话是这样的定义的

比如说微积分里面的函数

设x和y是两个变量

D是一个给定的数集

如果对于每一个数x属于D

变量y按照一定的法则

总有确定的数值和它对应

那称y是x的函数

记作y=f(x)

这是一个函数的概念

这个概念相对还是比较直观的

它其实表达就是一个

一个对应的过程

一个映射的关系

其实函数的函字

大家稍微考究一下的话

其实这里面将这个对应关系

非常非常形象表达出来了

我们说函这个字

可能理解都是信函

函件对不对

但其实函这个字在以前来讲它就是

就是这个箭筒

插在里面的箭筒

毫无疑问它非常形象非常直观的

表达一个映射的过程

我们都知道函数有三种表达方法

第一种什么 解析式

比如说y等于x平方

第二种图形法

这么一个图

和这个y等于x平方

是一个可以借助这个图形进行直观的表达

第三种就是我们在以前初中高中的时候

接触过的列表法

当然这个列表法在大学之后基本上接触比较少了

但现在我们进入研究生阶段之后

我们要重新重拾这个列表法

重拾这个列表法

把它重新捡起来

列表法其实我们把它倒过来旋转一下

这里面是x这里面是y

那好 我们再看一下

其实我们现在拿这份数据里面

假如我想知道这个文理分科和前面的

xb yw sx wy等等

这九门课的成绩之间的关系的话

其实

这个就是X

前面这10个变量就是X对吧

然后后面我们关心的这个变量

这个因变量就是什么

就是Y

所谓分类回归就是

就是建立这个X到y的关系的过程

所以我们拿这个数据框

其实也就拿到了一个

把这个列表法所呈现的函数

或者说我们采集到的数据本身

也可以视为一个列表法

一个函数的一个体现

所谓分类与回归的任务是

就通过学习获得一个目标函数

将相应的属性这个X映射到y上面去

以后我一旦知道他的性别

只要知道他各门课的成绩之后

我就自动可以判断出

他应该是选文科还是选理科

这就所谓分类与回归的这么一个任务

咱们看一下分类与回归

我们重新总结一下

它其实就建立这个映射关系的过程

当我这个因变量为数值变量的时候

我们称之为回归

当我这个因变量为类别变量的时候

我称之为 分类

所以分类与回归它只是

它只是因变量不同而已

它本身都是建立这种函数关系的过程

本质上是一样的

分类也就是构造一个分类器

来预测这个类标号

对不对

因为它的类别变量它是有限个取值水平

相应的这个因变量就必须有一个因子

然后回归的话就构造一个

预测器来预测一个数值

预测一个数值

这就是分类回归它本质上都是

都是有监督的学习

都是建立这么一个函数关系

一个映射关系的过程

那我们究竟有多少

所谓的分类与回归模型

当然我们很难精确的统计

大致来讲分类回归模型可能有数十种

它的变体的话就更多了

可能是数以百计的

我们先看看这个caret的这个包里面

通过这个modelLookup()

我们可以找到目前这个框架之下

在caret的这个分类回归的框架包里面

它已经支持多少

已经支持了237种分类回归模型

当然这么多回归模型

我们当然不可能一一讲解

我们只是从其中挑出一部分

比较经典的这个模型

在我们的课上进行一个

相对比较浅显易懂的讲解

我们都说学习就是对

属性特征空间一个划分的过程

机器学习就是关系和结构

尤其是变量之间的关系和数据空间的结构

所以他应该可以从空间的角度讲

它是对属性特征所张成的空间进行划分

从这个变量之间关系来讲

它其实就是

自变量与因变量之间的

拟合这个函数的过程

是个映射的过程

当然我们要说学习

它其实就是一个选择的过程

一个搜索的过程

一个优化的过程

也就是这个参数空间里面

你一旦确定了这个模型集之后怎么样

我来确定相应的参数

量体裁衣

我确定这个款式之后怎么样

我要量具体的尺寸了

确定具体参数

一个参数寻优的过程

在这些最基本理念这个统领之下

我们将这个(机器)学习

按照这么一条一个路径往下走

首先我们说这个从这个数据空间角度讲

我们先讲第一个算法叫近邻法

近邻法

这个近邻法最基本原理就是

就在数据空间

我先找到我自己的定位

然后我再看我身边的小伙伴

他究竟他头上贴什么标签

然后我就把我自己标签

贴的跟绝大多数人都一样

这就是近邻法

当然这个近邻法其实也是一个数据空间切分的过程

数据空间的划分还有另外一种方法是

就非常典型的树模型

我们到时候要讲这个决策树

分类与回归树CART

通过这个CART的话

可以进一步做什么

由弱分类器组合成随机森林

当然我们在讲树模型的时候

我们也会发现

在进行那个具体空间划分的过程中

我们需要进行这个属性分裂

进行那个最优分裂节点的一个选择

这个时候就涉及到

一个不纯度的问题

也是不确定性和不纯度

当然这个不确定性和不纯度其实可以应用于做

我们那个分类

比如说我们通过这个条件概率

也就朴素贝叶斯

这么一个分类器

它会用到贝叶斯公式

我们可以将贝叶斯公式

这么一个表征不确定度

这么一个公式

拿到我们这个机器学习里面来

拿到这个数据分析里面来

用于做分类

就是朴素贝叶斯我们要进行一个讲解

当然除了这个朴素贝叶斯这种概率之外

我们还可以有另外一种方式

来表征那概率的过程

就将我们现有的一些所有拿到的信息

比如说我们现在拿到的有性别

有各门课的成绩

那好我把所有的信息怎么样

通过一个线性的组合

我先综合起来

综合起来之后再映射到[0, 1]区间里面去

其实也是一个

也是一个概率的过程

这个时候其实就是我们要后面要讲的

逻辑斯蒂回归

逻辑斯蒂回归它其实是

一个单个的有个多个输入

然后有相应的一个输出

这么一个计算节点

假如有多个计算节点的话

其实 就是我们所谓的人工神经网络

由人工神经网络的话

其实它进一步可以延伸成

现在非常火的深度学习

当然深度学习的内容博大精深

在咱们这门课里面也时间有限

我们也就不会涉及

当然大概的逻辑是这样的

这就是我们这门课里面

接下来的课程里面

将要讲到的一些算法模型

无论是哪种算法 哪种模型

它其实整个这个训练过程都是分成两个步骤

一个是首先要怎么样

先要进行训练

然后进行测试

也就是说我们拿到一份数据之后

我一般会将它分成训练集和测试集

将那个训练数据基于相应的分类算法

得到相应的模型

就输入的是我的数据

经过这个算法 然后怎么样

输出相应的模型

就通过算法学习到相应的模型

学习到相应的模型之后 我们要进行测试

我们拿到这个数据里面

另外一部分就是作为测试集

来测试我们这个模型的效果

用这个测试的这个误差来

近似表达我的泛化的误差

一旦有了这个刚才训练好的分类模型之后

假定我这个测试集这个结果

这个标签是不知道的

我将这个相应的属性

相应的X相应的自变量交给这个

交给这个f

就自然得到f(X)的值

也自然得到

自然得到我这个预测的那个类的标签了

这就是我们所谓的两个步骤

一个是训练 一个是测试

这里面我们再重复一下这个概念

就是模型的评估和模型的建立是同等重要

我们要建不同的分类器

其实并不是说要将已有的数据简单进行拟合

我们更希望是什么

找到一个模式

这个模式既是可以适用于过去的

更可以泛化推广到未来

可以外推到未来

或者你在一个问题情境里面

在现有已经采集到数据上

我是可能拟合出来是可以适用的

但同时我也可以用以表征未来的新的数据

这个表征未来新的数据的时候

它其实是我们更关注的

这个时候其实体现这个所谓的泛化的误差

但一般来讲这个泛化的误差

我们没有办法目前直接就来进行衡量

我们一般通过

通过将它分为训练集和测试集

通过这个测试误差来近似表达我们的泛化误差

这就我们前面讲的

为什么要把它分成两个部分

把它分为测试集分为训练集

先做训练再做测试

也就是说对于一个包含

m个样例的这个数据集来讲

我们要做这个模型算法

做这个建模的话

我至少要怎么样

在这个已有的原始数据集的基础上

我先要进行

训练集和测试集的划分

一般来讲在同一轮的训练和测试过程中

我这个训练集和测试集

它应该是

它应该是没有交集的

那具体来评估怎么评估

或者具体划分那个模型的

那个训练集和测试集有哪些方法

一般来讲至少有这么三种

第一种是留出法

这个Hold out

什么意思

我就随机抽样

抽出一部分作为训练集

剩下一部分作为测试集

假如你这个数据本身

这个类别相互的比例并不均衡的话

我们还要采用什么

采用分层抽样保持这个

训练集和测试集里面

他的各个类别的比例和原始数据的比例

应该是差不多的

这是一个最基本的方法

就是把它经过随机抽样的方法

或者说分层抽样方法

得到训练集和测试集

这是第一种方法

第二种方法是

交叉验证法

这种方法目前用得是比较多的

也称之为K折交叉检验

它大致步骤这样的

将我这个数据分成大致相同的K份

每一次将其中的一份作为测试集

剩余的K-1份作为训练集

最后以这个K次的测试结果的平均值作为

最终的测试误差

大家注意了

这里面我将原始数据分成K份的时候

当前的这一折作为测试集

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

而不是说倒过来

我就说我当年这一折作为训练集

剩下的K-1折作为什么测试集

这边其实有一个最基本的概念

和我们前面讲到的是一致的

一般来讲K-1折可能是更多一点

另外当前这一折则是相对数据少一点

我们说机器学习只能

举三反一

而不是举一反三

这也是反映了机器学习的一个特点

所以我们一般来讲是K-1折作为训练集

当前这一折作为测试集

这两种方法留出法和交叉验证法

是用得比较多的

而且几乎适用所有场景

另外一种方法用得也比较多

就是 自助法

也就是说通过有放回的抽样

这是重采样的方法

其实在很多机器学习里面都用到都涉及到

包括我们后面讲到的随机森林

它其实采用这种方法

有放回的抽样的话

它其实很自然有多少

比如说包含100个样本

这么一个数据集里面抽取100个样本的话

一般来讲有大约36%左右的数据

我是抽不到的

那很自然

这36%左右的数据

它就可以作为很天然的一个测试集了

这些所谓的自助法

out of bag这么一个方法

在我们后面的随机森林里面会用到这个方法

好 咱们先看看这个交叉验证法

它这个一个过程

我们刚才讲了

我们拿到一个原始的数据集

这个时候

我将它切分成K份

比如说我们现在目前切分成五份

当然这个时候并不是说从第一

比如说我们现在总共有100条数据的话

并不是说从第一条到第20条是第一份

不是这样的

而是

而是我先要把它随机打乱顺序

随机打乱顺序

然后我再来切分

这里面不能保留原始的顺序

那样的话可能也是有偏的 对吧

切分成大致相等的K份

这边是五份之后怎么办

每一次当前这一份

比如说第一次

D1是当前这一份作为

作为测试集

剩下的D2 D3 D4 D5就作为

作为训练集了

第二次的话就是D2作为

作为测试集

然后D1 D3 D4 D5作为训练集

通过这个训练集

每一次都是这样

都是先通过训练集来训练模型

训练完模型之后

通过这个D1 D2 D3 D4 D5

这个相应的当前这一折作为

作为测试集来测试它结果

最终这个模型的性能表现看什么

其实它每一个每一折都有一个

都有一个测试的误差

那最终的误差

求平均就可以

这个K折求平均就可以

咱们再看看这个K折交叉检验

我们定义了一个

定义了那个K折交叉检验的函数

cv_kfold

这个时候你拿到一份数据之后

告诉这个函数我要分成几折

K折

我们默认为10折

它的随机数种子我们设定是2012

也是为了复现我们这个整个数据分析的过程

好 我们看看这个函数具体如何实现

首先我把这个数据有多少行先求出来

有n_row这么多行

然后怎么样

大家看这个函数

rep()表示

表示重复1到K

1到K重复 重复多少次

大家看这个函数

n_row除以K

n_row的话就是属于总的行数

K的话是多少份

n_row除以K的话相当什么

相当这一折里面大致包含多少条记录

当然这个时候很有可能它是

不是一个整数怎么样

我向上取整

ceiling向上取整

这个他相当于把什么

把1到K一直重复这么多次

然后它大致和我这个

和我这个n_row是相等的

但有可能是比这个n_row多一点

所以

我将

我将它前n_row个数据都取出来

取完之后

大家看又出现这个函数了sample

这是我们刚才讲到的

在K折交叉检验里面

并不是说将前20个作为第一折

第二个20个作为第二折不是这样的

而是

我需要打乱次序

打乱次序之后

我们再看这个lapply函数

就对1到K

我将看一看哪一些哪些数据和

我这个1到K是相等的

这个时候我就把相应的

比如等于1的时候

我就作为第1折所有的下标

等于2的时候作为第2折所有的下标

这时候返回的是什么

在kfold的返回的是一个列表

列表的每个组成部分就是我当前的这一折

相应的下标了

好 最后我返回

返回这个kfold这个列表就可以了

这是我们K则交叉检验这么一个函数

咱们可以看一看

比如说对于我们这个成绩表这个数据来讲

调用这个cv_kfold这个函数

我们将那个成绩表作为参数的话

这个时候其实也得到

得到总共10折

这是第一折

就是包含10个组成部分的一个列表

第一个组成部分当然就表示第1折了

相应的一个这个它的下标的情况

数据记录下标

其实我们来看一下

就对于每一折来讲他大概长度多少

我通过这个sapply这个函数

调用它相应的长度

这时候发现每一个长度大概是差不多的

前四折都是78条记录

后几折的话

后面的几个都是77条记录

所以这个分的这几折大致的长度是一样

前面讲到就是

就是我们的k折交叉检验

这个训练集和测试集划分的过程

我们后面得确定一下具体通过哪些指标

来衡量我的模型

一般来讲

假如我这个数据集是

这个类别是不均衡的话

我们需要通过一些比如说

查全率 查准率来衡量它

但假如我这个类别相对均衡的

比如我们目前面对的问题

它只是文科和理科来判别的话

文科生和理科生差不多

这时候我们通过

简单通过这个错误率正确率来判断就可以了

咱们来看一下具体的衡量指标

这时候我们也定义了一个

定义了一个global_performance

这么一个变量

用于存储后面我们所有的模型

在训练过程中

在测试过程中

它的那个性能的表现

定义这么一个变量

用来存储相应的每个步骤

它得到结果

为了计算这个不同的方法

不同的训练集测试集它的性能表现

我们专门定义了一个imetrics这么一个函数

大家看一下

它接受这么四个参数

第一个参数就当前用的是哪种模型

它是属于训练的误差

还是测试的误差

然后它预测值多少

它的实际值多少

有这么四个参数之后

其实我们就可以

将每一个模型它训练过程

它的性能表现都给记录下来

我们看具体这个函数怎么实现的

首先我先生成一个

混淆矩阵

就根据这个预测结果和实际结果生成一个混淆矩阵

其实就是

就是交叉计次

有了这个混淆矩阵之后

我们后面就可以根据这个混淆矩阵

得到我们相应的指标了

这里面我主要有两个指标

第一个指标

就是正确率

正确率是

就是我混淆矩阵的对角线

它元素之和除以

除以这个混淆矩阵所有元素之和

错误率的话毫无疑问就是

1-正确率就可以了

当然我们刚才说了

想把所有的方法

它是训练集还是测试集

它上面性能表现都记录下来的话

这个时候我们就建立一个

data.frame

包含方法 类别 正确率 错误率

这么四列

每一次都怎么样

我把当前这一个方法

以及当前所属的类别

它性能表现先记下来

记下来之后怎么办

我要重新

把它和已有的global_performance rbind()起来

当然这里面我们需要补充一下

因为我这个global_performance属于一个全局变量

我们才命名为global_performance

既然是全局变量的话

我在一个函数里面想修改它

那是不可能的

那这时候怎么办

我先怎么样

我先get

先get这个变量从哪来

从这个名字空间里面来

从这个全局的变量里面拿到

拿到之后我进行rbind

把它和我新得到的这个

最新的计算结果叠在一起

叠到一起之后我再怎么样

assign()

再重新给这个global_performance进行赋值

从而实现每一次计算得到新的结果之后

我都对这个

global_performance在这个imetrics

这个函数里面对global_performance进行修改

从而记录下我们后面所有模型算法

它一个性能指标

以上就是我们关于这个

分类模型算法的一个框架的介绍

包括我们对评估指标也做一个简要的讲解

在接下来课程里面我们将展开论述

相应的一些算法

他们的相应的原理以及在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.1 导引笔记与讨论

也许你还感兴趣的课程:

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