机器学习——神经网络、决策树(深度学习)

目录

一、(人工)神经网络(Neural Networks)

1.1 神经元(Neurons in the brain)和大脑

1.2 需求预测

1.3 举例:图像感知

1.4 神经网络中的网络层

1.5 更复杂的神经网络

1.5.1 神经网络前向传播

1.5.2 TensorFlow的代码实现

1.5.3 TensorFlow中数据形式

1.6 搭建一个神经网络

1.7 单个网络层上的前向传播

1.7.1 前向传播的一般实现

1.8 强人工智能

1.9 神经网络的高效

1.9.1 矢量化

1.9.2 矩阵乘法

1.9.3 神经网络的向量化实现

二、训练神经网络

2.1 模型训练细节

2.2 sigmoid激活函数的替代方案

2.3 如何选择激活函数

2.4 为什么需要激活函数

2.5 多分类问题

2.5.1 Softmax回归算法

2.5.2 神经网络的Softmax输出

2.5.3 tensorflow实现

2.5.4 Softmax的改进实现

2.5.5 多个输出的分类 

2.6 高级优化方法

2.7 其他的网络层类型

2.7.1 卷积层(输入图像的一个区域)

2.7.2 卷积神经网络(CNN)

三、模型评估、误差分析

3.1 模型评估

3.1.1 使用具有平方误差成本的线性回归

3.1.2 应用于分类问题

3.2 模型选择&交叉验证测试集的训练方法

3.3 通过偏差与方法进行诊断

3.4 正则化、偏差、方差

3.4.1 正则化

3.5 制定一个用于性能评估的基准

3.5.1 学习曲线

3.5.2 方差与偏差

3.6 机器学习的开发迭代

3.6.1 误差分析

3.6.2 添加更多的数据

3.6.3 迁移学习

3.6.4 机器学习项目的完整周期 

3.6.5 公平、偏见与伦理

3.7 倾斜数据集的误差指标

3.7.1 误差指标

3.7.2 精确率与召回率的权衡

四、决策树模型

4.1 决策树模型介绍

4.1.1 学习过程 

4.1.2 纯度(用熵评估)

4.1.3 选择拆分信息增益

4.1.4 整合

4.1.5 独热编码One-hot

4.1.6 连续有价值的功能 

4.2 回归树

4.3 使用多个决策树

4.3.1 有放回抽样

4.3.2 随机森林

4.3.3 XGBoost(增强型随机森林):极端梯度提升

4.3.4 何时使用决策树

第二课 第一周1.1 欢迎_哔哩哔哩_bilibili

(1)1 week:Neural Networks

        介绍神经网络以及如何进行推理或预测。如果要上网下载参数,一个别人训练过的神经网络,其参数发布在互联网上,然后使用该神经网络进行预测被称为推理;

        这周将学习神经网络是如何工作的,以及如何进行推理

(2)2 week:inference(prediction) training

        学习如何训练自己的神经网络,特别是,如果有一组标记示例的训练集 X 和 Y ,要如何为自己训练一个神经网络的参数

(3)3 week:Practical advice for building machine learning systems

        分享实用的建议、技巧构建机器学习系统

(4)4 week:Decision Trees

        学习决策树

        

一、(人工)神经网络(Neural Networks

        早期想构建软件来模仿大脑,而现在彻底改变了应用领域,几乎与大脑的学习方式无关。第一个可能是语音识别,然后设计计算机视觉领域,接下去进入了文本或自然语言处理,现在神经网络被用于从气候变化到医学成像再到在线广告的方方面面。

        那么大脑是如何工作的?

1.1 神经元(Neurons in the brain)和大脑

        人类所有思想来自这样的神经元发送电脉冲,有时会形成其他神经元的新连接;给定一个神经元,有许多输入,来自其他神经元的电脉冲,然后这个神经元执行一些计算,发送此输出,通过这个电脉冲传递给其他神经元,然后上层神经元的输出称为下层神经元的输入;下层神经元再次聚合多个神经元的输出作为输入,输出给其他神经元

1.2 需求预测

        单个神经元,就是输入一个或几个数字,然后输出一个或几个数字,中间是计算的函数,这里是逻辑回归举例

         如下预测一件T恤的畅销概率,有4个特征,添加3个神经元购买力、认知和偏差,三个合并输出一个神经元:畅销概率

        一个layer的神经元是一层,一层可以有多个或单个的神经元

        可以认为最左边4个数字组成的称为 输入层;中间3个数字组成的称为 隐藏层,这三个值为 激活值;右边1个数字为输出层

        需要手动决定哪个神经元的输入是哪些,关系函数是什么

        而神经网络在实践中的实现方式,是每个神经元在某一层,可以访问每一个功能,即从上一层到输入层的每个值,只需要设置参数来区别功能子集的相关性 

        输入层有一个特征向量被输入到隐藏层部分,输出三个数字,同样使用一个向量表示这个激活向量;输出层将其输入为三个数字并输出一个数字,这就是最终的激活,即最终的预测 

        神经网络之所以强大,就是它不需要进入明确决定还有哪些其他功能,而是计算出所有本身它想在这个隐藏层中使用什么特性

        可以有多个隐藏层

        且需要做出决定是,想要多少隐藏层和多少神经元,这个问题是多少个隐藏层和每个隐藏层有多少个神经元的神经网络架构的问题

1.3 举例:图像感知

        如图,这张人脸图片是一个1000×1000的像素矩阵,转化为向量形式

 假设构建如下图神经网络

(1)第一个隐藏层

        a)第一个神经元:发现一个正在寻找的神经元,对于低垂直线或这样的垂直边缘

        b)第二个神经元:寻找类似的定向线或定向边缘

        c)第三个神经元:在那个方向寻找一条线

(2)第二个隐藏层

        这些神经元可能学会组合在一起很多小短线和小短边段,为了寻找脸部的一部分,例如这里的每个小方块都是该神经元视图检测的内容的可视化

        a)第一个神经元:像是在检测在图像的某个位置有没有眼睛

        b)第二个神经元:像是在尝试检测一个鼻子

(3)第三个隐藏层

        神经网络正在聚合面部的不同部分,然后尝试检测是否存在较大、较粗糙的面部形状

        最后检测一张脸对应不同脸型的程度,有一组丰富的功能,然后帮助输出层尝试确定人物图片的身份 

        同样检测汽车也是如此:

1.4 神经网络中的网络层

        三个神经元中的每一个都只是实现了一个小的逻辑回归单元或一点点逻辑回归函数

        加上上标 [ i ] 表示是第 i 个层(包括隐藏层和输出层),下标表示是第几个神经元的参数

逻辑回归结果判断

1.5 更复杂的神经网络

        当说一个神经网络有4层时,即包括输出层中的所有隐藏层共有4层,不计算入输入层

上下标的判断

sigmoid:激活函数

1.5.1 神经网络前向传播

因为这个计算是从左到右进行的,也称前向传播 

1.5.2 TensorFlow的代码实现

(1)咖啡问题

        判断是否是一个好咖啡,两个特征:x_1:持续时间、x_2:温度,

        这里,第1层等于密集单元3,激活等于 sigmoid 创建一个隐藏层,具有三个隐藏单元的神经元,并用作激活函数 sigmoid,而这里的 dense 只是这一层的名称,密集是神经网络层的另一个名称,会得到一个包含3个数字的列表,因为第一层有三个神经元

        对于第二个隐藏层,将是密集的,将此应用于从第1层到 a1的激活值,输出a2的值

        这里并没有tensorflow框架的加载,w、b参数的设置等内容,在实验中查找

 (2)像素列表

1.5.3 TensorFlow中数据形式

Numpy

n × m:n 行 m 列的矩阵

下图中,第三个不是矩阵,而只是一个没有行没有列的线性数组,只是一个数字列表

shape(1,3)表示一个 1×3 的矩阵,dtype=float32 表示一个浮点数,它是一个可以使用小数点表示的数字,小数点数在计算机内存中占据32位

a1.numpy() 表示它将获得相同的数据并以 Numpy 数组的形式返回,而不是以TensorFlow 数组或TensorFlow矩阵的形式返回

1.6 搭建一个神经网络

密集型:密集型连接网络 DenseNet是一种结构特殊的卷积神经网络,它的特点是在神经网络的前向传递中,每一层都和前面的所有层直接连接,每层的输入来自于之前所有层的输出

张量流:TensorFlow

(1)

另一种构建神经网络密集型地球的方法:

       与要创建第一层和创建第二层之前的方法相同,但现在不是手动获取数据并将其传递到第一层,然后从第一层和可能的第二层获取激活;相反,我们可以告诉张量流,希望它采用第一层和第二层并将它们串在一起形成一个神经网络,这就是顺序函数密集流的作用; 也就是说,密集流创建一个神经网络,我通过顺序将刚刚创建的这两个层串联在一起。

        首先定义x,y的矩阵,如果想训练这个神经网络,需要做的就是调用你需要调用模型点编译的函数,并带有一些参数;然后需要调用模型点拟合x,y,它告诉张量流采用这个神经网络,是通过第一层和第二层顺序串在一起创建的,并在x和y上对其进行训练;然后只需在模型预测调用给定的x的输入值,就会输出

(2)数字分类示例(Digit classification model)

更紧凑的表达

1.7 单个网络层上的前向传播

np.dot(w1_1, x):计算点积

 w2_1应该有3个元素

1.7.1 前向传播的一般实现

W是个2×3的矩阵,所以W.shape[1] 值为 3

a_out设置为一个由零组成的数组,元素数与单元数一样多:[0, 0, 0]

w = W[ :, j ] :w为每个行的第 j 列

注意:线性代数中大写字母代表矩阵,小写字母代表向量和标量

1.8 强人工智能

AI 可分为 AGI、ANI

AGI通用人工智能:有希望构建可以做典型人类可以做的任何事情的人工智能,但尽管已有了一些进展,但不确定真正取得了多少进展

ANI狭义人工智能:只做一件事,一项狭窄的任务,有时非常好且可能非常有价值

        如智能扬声器,自动驾驶,网络搜索,或人工智能应用于特定应用(农业、工厂等)

       虽然我们至今都不知道人脑神经元输入到输出的映射,却仍在试图在计算机中模拟它,这远非人类大脑行为的准确模型;但还是有一些证据帮助我们保持这种希望。

       在动物身上的一些实验表明同一块生物脑组织可以实现令人惊讶的广泛任务,这导致了一些学习算法的假设,可能很多智能的下降是由于一种或少数几种学习算法,当我们能够弄清楚这些算法是什么时,也许就能在计算机上实现。人脑中可能会存在一种算法假设帮助人类获得触、听、视的能力,现实中也对一些特殊的功能,如回声定位之类的进行的实验,难点还是在于用户的平均数等之类上。

1.9 神经网络的高效

1.9.1 矢量化

np.matmul(A_in, W):matmul是numpy中执行矩阵乘法的方式

vectorization:矢量化

1.9.2 矩阵乘法

(1 )点积

(2)向量矩阵乘法

(3)矩阵与矩阵

(4)矩阵乘法规则

a)

b)

        前一个矩阵的列数要与后一个矩阵的行数相同,相乘得到的矩阵与前一个矩阵转置后的行数和后一个矩阵的列数相同

1.9.3 神经网络的向量化实现

Z = AT @ W 是调用 matmul 的另一种方式

二、训练神经网络

tensorflow实现

        tensorflow 的编译模式是指定你要使用的最后一个函数是什么,在这种情况下,我们将使用稀疏分类交叉熵fit 函数告诉tensorflow使用最后一个来拟合步骤1中指定的模型,在步骤2中指定的成本函数到数据集X、Y,其次我们必须决定运行多少步来创建下降,以及运行多长时间来创建下降,Epoch 是一个技术术语,表示可能想要运行多少步来创建下降

        第一步是指定告诉 tensorflow 如何计算推理

2.1 模型训练细节

 

BinaryCrossentropy():二元交叉熵(即上述的L 损失函数)

MeanSquaredError():平方误差损失

2.2 sigmoid激活函数的替代方案

        如下列的 awareness(对产品的购买意愿)可以确定是一个非负值,0 ~ 一个可能很大的值,因此可以换一个激活函数 ReLU(跟我读:re liu):g(z)= max(0,z),它代表 rectified linear unit :整流线性单位

还有一个称为 线性激活函数(Linear activation function):g(z) = z ,即相当于没有激活函数 

2.3 如何选择激活函数

二进制分类问题sigmoid

回归问题:可以选择不同的激活函数;例如,试图预测明天的股价和今天的相比时上升还是下降,可以选择线性激活函数(简而言之因为g(z)可以取正值或负值)

y只能取非负值(如:预测房价):或是 z 的值也是非负,使用 ReLU

但现在使用ReLU,更为频繁,sigmoid几乎没有,除了二进制分类

有以下几个原因(ReLU 和 sigmoid相比):

(1)ReLU计算速度更快,因为它只需计算0、z;sigmoid计算更复杂,效率更低

(2)ReLU仅在图形的一部分变平,即左边时完全平坦的;而sigmoid 在图表的 最左边和最右边有两处变平,所以如果使用梯度下降训练神经网络,而又有一个很多地方很胖的函数时,梯度下降会变得很慢,此外b并没有被优化函数优化,也会导致平坦,梯度也会小,减慢学习速度

总结:对于 输出层 如果有二元分类问题可以使用sigmoid;如果y是一个可以取正值或负值,可以用线性激活函数;而如果只有零、正值或非负值,则使用ReLU

        对于 隐藏层ReLU作为默认激活函数

可能还有其他的激活函数(如:tan h、LeakyReLU、swish),每几年都可能新出一个,对有些问题可能某些其他的激活函数效果确实更好,但对于大多数情况,绝大多数应用,上述基本的三种激活函数足够

2.4 为什么需要激活函数

用线性激活函数,就破坏了使用神经网络的目的,无法拟合线性回归模型更复杂的东西

上例中,隐藏层全是 线性激活函数 ,输出层用 sigmoid,这个神经网络相当于是逻辑回归,所以一般不用线性激活函数 

2.5 多分类问题

二分类的话可以简单判断 y=0 or 1

多分类时可以计算概率即 y=1、2、3、4。。。的概率分别是多少

2.5.1 Softmax回归算法

Softmax回归算法是逻辑回归的推广,多分类的二进制算法

二分类时 P(y=1)= 1 - P(y=0)

多分类时(假设4分类):y = 1、2、3、4,y=1、2、3、4的概率之和为0

a_1:被解释为算法对概率的估计,给定输入特征x,y=1的估计机会;

所以 a_2:给定输入特征x,y=2的估计机会,a_3、a_4一样

损失函数:a_j越小,损失越大

2.5.2 神经网络的Softmax输出

假设做手写数字识别,所以输出层要有10个神经元,10个输出;Softmax层有时也称为Softmax激活函数,但是应用Softmax是要根据z的所有值

2.5.3 tensorflow实现

对于逻辑回归:loss有BinaryCrossentropy()

这里Softmax使用:SparseCategoricalCrossentropy()

SparseCategorical指的是仍然将y分类,这里取值1-10;稀疏是指y只能取这10个值之一, 所以每个图像要么是0,要么是1,以此类推,直到9,不会同时看既是2又是7的;

稀疏是指每个数字只是这些类别之一,这也是为什么它的损失函数虽然是稀疏分类交叉熵损失函数,但它被称为密集的,

tensorflow中更好的代码版本,可以更好的工作,虽然上述代码可以运行有效,但按此编写的方式编写代码,下述会有一个不同的更好的版本 

2.5.4 Softmax的改进实现

python中print语句添加“f“的用处_吨吨不打野的博客-CSDN博客_python中print(f)的用法

        参考上述代码的计算过程,同样是计算的1/10000,但事实证明虽然计算Softmax成本函数的方式是正确的,有一种不同的方式来制定它减少这些数值舍入误差,导致在tensorflow中进行更准确的计算

(1)逻辑回归说明这些想法

 loss = BinaryCrossEntropy(from_logits=True)

       将输出层设置为仅使用线性激活函数,把激活函数直接带入到原式中计算 ,以及这个交叉熵损失到损失函数的规范

        这段代码的缺点是变得有点不清晰,但会导致tensorflow的数值舍入误差要小一点

        而当设计到Softmax是,数值舍入误差会变得更糟,

 loss = SparseCrossEntropy(from_logits=True):

        之所以是linear是因为下面设定为True之后,softmax不再单独计算,只在计算cost时嵌入内部一起算了。这样输出层只会输出Z的值,不再带入softmax计算了

        它与之前的代码形式只是数字更加准确一点

此时得到的并不是A_1到A_10的概率,而是z_1到z_10,想得到概率仍需计算

2.5.5 多个输出的分类 

如图,

要预测可以分两种:

(1)可以建立三个分别检测汽车、巴士、行人的神经网络

(2)训练单个神经网络,三个同时检测

2.6 高级优化方法

除了梯度下降算法后,还有一些其他的优化算法,用于最小化成本函数,甚至比梯度下降更好

使用 Adam 自动优化适应 学习率 Alpha ,且对模型的每个参数使用不同的学习率

例如适应的情况:

(1)如果一个参数 w_j 或 b 继续朝着大致相同的方向移动,增加该学习率

(2)如果一个参数不断来回振荡,减少学习率

代码的实现

指定优化器optimizer = tf.keras.optimizers.Adam 优化器

下列代码中的 optimizer = tf.keras.optimizers.Ada(learning_rate = le-3)

设置了初始学习率为 10^(-3),也可以不设置

2.7 其他的网络层类型

前面用的都是密集层

2.7.1 卷积层(输入图像的一个区域)

如图,让每个神经元查看图像的某一部分区域

 为什么只查看部分区域而不是全部?

(1)加快了计算速度

(2)使用这种卷积层的层神经网络可以需要更少的训练数据,也不容易过拟合 

2.7.2 卷积神经网络(CNN)

若神经网络中有多个卷积层,有时这被称为 卷积神经网络

三、模型评估、误差分析

当预测结果误差较大时,此时可以:

(1)获得更多是数据

(2)尝试一组较少的特征

(3)获取额外的特征

(4)利用现有特征添加多项式特征

(5)增大lambda

(6)减小lambda

        所以需要一套诊断,通过运行它来深入了解是否正在使用学习算法来获得指导,以提高性能,其中一些诊断可能会告诉你是否是需要更多的数据等。虽然诊断需要时间实施,但运行他们可以额很好的利用时间,不至于花费不必要的时间收集无用的大量数据

3.1 模型评估

例如:这个预测房价大小的模型

1个特征时,可以通过绘制图像看出,该模型虽然十分拟合,但并不合适

而多个特征时,无法多维的绘制图像,所以需要一个系统的方法来评估

       如下图,有10项数据,我们在把前7项数据作为训练集,剩下的3项作为测试集;我们要做的就是在前70%的数据上训练模型、训练集上的参数,然后在测试集上测试它的表现 

3.1.1 使用具有平方误差成本的线性回归

3.1.2 应用于分类问题

3.2 模型选择&交叉验证测试集的训练方法

这里分割数据成三类:训练集(60%)、交叉验证集(20%)、测试集(20%) 

交叉验证集 有时也简称为 开发集

 选择交叉测试误差最小的进行测试        

3.3 通过偏差与方法进行诊断

如图,当交叉验证集的误差 J_cv 在中间时,最适合,此时是二项式的情况

bias:偏差

variance:方差

高偏差:训练集不合格

高方差:训练集可以,交叉验证集不合格

高偏差和高方差:上方的小图则是 高偏差和高方差的例子,都不合格 

3.4 正则化、偏差、方差

3.4.1 正则化

为防止过拟合

所以为了更好的确定 lambda ,交叉验证也提供了一种方法

即 lambda 可从0开始,不断加倍往上取,最后选出这个过程中 J_cv 最小的那个参数

 

        我们要选择的就是J_cv和J_train都小的那个点,它于多项式次数的那张图呈 镜像的关系,也可以判断出 偏差、方差与之相关的关系,也可以相互利用

3.5 制定一个用于性能评估的基准

一个语音识别的例子:

J:人类表现(人类人为语音输入识别的错误):10.6% 

J_train = 10.8%、假设J_cv = 14.8%,错误似乎有点大,在训练集中表现不佳

以J 为基准的话 J 和 J_train 相差很小,因为即使人类自己语音输入也有 10.6%的可能出错,但J_train 和 J_cv相差还是有点大的;所以可以得出结论,该算法实际上比偏差问题更多的是方差问题

        建立性能基准水平的一种常见方法是衡量性能的好坏,人类可以完成这项任务,因为人类擅长理解语音数据或处理图像或理解文本,当使用非结构化数据时,人类水平通常是一个很好的基准

        另一种方法是有一些竞争算法,也许是以前的表现或其他人已经实现的表现,或者有时可以根据之前的经验

 J 和 J_train 相差很大是高偏差问题,J_train 和 J_cv相差很大是高方差问题

3.5.1 学习曲线

J_cv 通常在 J_train 的上面

(1)高偏差

此时增加训练集的数量无太大帮助

 (2)高方差

此时增加训练集的数量很有帮助

        但这样绘制学习曲线有一个缺点,就是计算量非常大,因为会有很多的子集都要算

3.5.2 方差与偏差

(1)方差与偏差的权衡

(2)无需做权衡的一种方法

增大神经网络:更多的隐藏层或每层更多的神经元

(3)神经网络和正则化

       如下,从一个小的神经网络切换到右边的大神经网络,你会认为过度拟合的风险会显著增加,但只要适当地对这个更大的神经网络进行正则化,那么这个更大的神经网络通常至少可以做到与较小的一样或更好,所以有一个说法就是适当的正则化去启动一个神经网络几乎永远不会有坏处,但训练一个更大的神经网络时,它的计算成本会更高

如果成本函数时平均损失和,那么正则化项就是w平方和的 lambda/2m 倍,对于线性和逻辑回归通常不正则化 

tensorflow中正则化就是加一个参数,0.01的值时lambda的值

3.6 机器学习的开发迭代

判断是否是垃圾邮件:

3.6.1 误差分析

找到交叉验证集(500个)中的错误(100个)来统计错误类型,若是交叉验证集(5000个),错误了1000个,也可以选择其中的100个来统计,这是通过手动检查来判断的

3.6.2 添加更多的数据

如果要添加所有类型的数据可能既慢又昂贵;相反,添加数据的另一种方法可能是专注于添加更多分析表明可能有帮助的类型的数据

(1)从错误分析中,添加一点更有帮助的类型的数据

(2)数据增强。利用现有的训练实例创建一个新的训练示例

        如一个 A 的图像,可以通过 旋转、放大、缩小、改变对比度、镜像等来创建新的示例

扭曲: 

同样,数据增强也适用于 语音,如增加不同背景噪音

考虑数据增强的一种方法是如何修改、扭曲或在数据中制造更多噪音,但在某种程度上仍与在测试集中得到的相似 

(3)数据合成 。从头开始创建全新的示例

        如,用电脑上自带的字体库,综合合成新的大量的图像

3.6.3 迁移学习

先训练学习了猫、狗等分类的参数,然后及那个除输出层的参数拿来到另一个神经网络,只训练输出层的参数

当训练数据很小时,法一好;数据多时,法二好

迁移学习的好处:

(1)不需要进行有监督的预训练。因为很多神经网络已经有许多的研究人员在一张大图像上训练了一个神经网络并发布在互联网上,允许他人下载使用

(2)微调其他人已经携带的神经网络进行监督预训练。只需稍作微调即可快速获得神经网络,下载预训练模型,其他人免费培训和提供的技术之一

GPT-3、BERT、ImageNet

3.6.4 机器学习项目的完整周期 

以语音识别为例:

(1)确定项目范围

(2)数据收集

(3)训练模型(可能经过错误分析后,再去收集数据)

(4)循环(2)(3)直到可以部署到环境中

3.6.5 公平、偏见与伦理

3.7 倾斜数据集的误差指标

3.7.1 误差指标

例如诊断患者的患病率

        这时候误差率 0.5%或1%或1.2%都无法判断哪一个算法更好,因为你误差小但是你输出的都是y=0无效的,不知道其他的信息 

 计算两个常见指标:精度 和 召回率

这将帮助检测学习算法是否只是打印y始终为0,因为它如果预测为0,那么两者的分子的数量也将为0

如果召回为0,那么这个算法不是一个好算法

两个都很高时,这个算法很有用

3.7.2 精确率与召回率的权衡

当精度和召回率都不理想时,可以将两者结合起来看,可以取平均值,但并不好用

所以有另一种 F1 score = 1 / (1/2(1/P + 1/R)) = 2PR / (P + R),更专注最低的值        

四、决策树模型

4.1 决策树模型介绍

以猫分类为例,数据是离散值,二分类

每个椭圆和矩阵称为树的节点,最顶层的叫做 树的根节点;

所有椭圆形除了底部的框 都成为决策节点

底部的节点即这些矩形框称为 叶子节点

在以下这些不同的决策树中,有些更好,有的则更差,在所有的决策树中,尝试选择一个希望在训练集中表现良好的,然后再理想情况下也可以很好地推广到新数据,交叉验证和测试集也是如此

4.1.1 学习过程 

构建决策树:

(1)选择特征要最大化 纯度

(2)确定树的深度,即何时停止

为了确保树不会变得太大和笨重,其次使它不太容易过度拟合

4.1.2 纯度(用熵评估)

若有三只猫和三只狗,这里熵用H表示,熵是杂志的量度

 p_1是纯度,正例的比例

选取log2只是为了图像看起来方便,毕竟选择其他的,只是改变的图像垂直方向的高度

4.1.3 选择拆分信息增益

在节点上拆分什么特征将取决于选择什么特征可以最大程度地减少熵,减少熵或者减少杂质,或最大化纯度

熵的减少称为信息增益

如下图,根据左右分支的示例的数量和熵值,采用加权平均亮两个数字合成为一个数字,然后用0.5的熵减去这个公式

这些计算出来的0.25、0.03、0.12称为信息增益,衡量的是熵的减少,选择最大的

总数量:左分支称为 w^left ;右分支称为 w^right

正例的数量:左分支称为 p_1^left ;右分支称为 p_1^right

4.1.4 整合

构建决策树的过程有递归算法

选择深度时可以参考,深度越大,决策树越大,好似多项式次数越大

4.1.5 独热编码One-hot

若特征是超过两个的离散值

4.1.6 连续有价值的功能 

选择一个阈值,挨个尝试,找出信息增益最大的那个进行拆分 ,则为连续值特征

4.2 回归树

通过平均体重得到8.35、9.2、17.7、9.9

计算 加权平均方差

根节点这里计算所有示例的方差,该例子计算结果是20.51

用根节点处的值减去 加权平均方差的公式,选取8.88这个最大的方差减少,选择能够最大程度地减少方差的特征,这就是要选择这个特征作为分割特征的原因,该例子是耳朵形状

4.3 使用多个决策树

       使用单个决策树的缺点之一是:该决策树可能对数据中的微小变化高度敏感;使箭头不那么敏感或更健壮的一种解决方案是不构建单个决策树,而是要构建很多决策树,称为树集合

       还是之前的猫狗例子,改变其中的一个示例,把尖尖的耳朵、圆脸、没有胡须的猫 变成 耳朵松软、圆脸、有胡须的猫,此时要拆分的最高信息增益特征 变成了 胡须特征,而不是耳朵形状特征。因此,获得的数据子集,左右子树也变得不同,随着继续递归的运行决策树学习算法,将在左侧和右侧构建完全不同的子树。

       仅改变一个训练示例会导致算法提出这一事实:根部有不同的分裂,因此是完全不同的树,这使得该算法不那么健壮,这就是为什么忘使用决策树时,你通常会得到更好的结果,也就是说,如果你训练的不仅仅是一个决策树,你会得到更准确的预测,但同时也会达到一大堆不同的决策树,这就是我们所说的 ensemble,也就是多棵树的集合

如果有三棵树,每一棵树都可能是一种对猫与非猫进行分类的合理方法,如果你有一个想要分类的新测试示例,那么要做的就是在新的示例上运行所有的这三棵树并让他们投票决定是否是最终预测

       可以发现预测是猫的树更多,我们最终的预测结果也是猫,而实际也确实是猫

       我们使用树集合的原因是有很多决策树并让他们投票,它使你的整体算法对一些个例(其他任何一颗树都可能会这样做的)不那么敏感,因为它只能获得三分之一的选票或许多选票中的一票,许多不同的投票,它使得我们的整体算法更加健壮

       但是要如何找到这些不同的但似是而非的相似的树呢?下面说明

4.3.1 有放回抽样

工作原理:就是每次抽样后,将抽出的放回在重新抽样

先将所有的示例放一起,随机抽样,直到获得10个训练示例,虽然有重复的,且未包含所有的10个原始示例, 但这没关系,这是带放回抽样的一部分

4.3.2 随机森林

随机森林算法是新的替换方法来创建新的训练集,这些训练集和原始训练集也有很大不同。随机森林是一种强大的树比使用单个决策树效果更好的示例算法

如果给定一个大小为M的训练集

循环B次生成训练集和树

随机森林关键思想:即使使用这种带有替换过程的采样,有时最终也会始终在根节点处使用相同的拆分,并且根节点附近的分裂非常相似

       选择k(k<n)个特征作为允许的特征,然后从这k个特征中选择最高的一个信息增益作为使用拆分的特征的选择。当N很大时,说n是几十个或10个甚至几百个,k值的一个典型选择是选择它作为N的平方根

       根号n这里只是作为k的一个常用取值,根号n,log2 n都可以(西瓜书是这个)

4.3.3 XGBoost(增强型随机森林):极端梯度提升

今天,决策树集成或决策树最常用的方式或实现 有一个名为XGBoost的方法

就是在第一次中还没有做得很好的地方,然后再构建下一次决策树时,我们将更多地关注我们尚未做好的示例;因此我们不是查看所有训练示例,而是将更多注意力集中在尚未表现良好的示例子集上并获得新的决策树,下一个决策树报告集合尝试在它们上做得很好,这就是boosting 

如下图,在第一个树的预测结果中,找到预测分类错误的,打上 ×,所以我们第二次通过这个循环要做的是,我们将使用一些带有替换的东西来生成另一个包含10个示例的训练集,但是每次我们从这是个例子中挑选一个例子时,都会有更高的机会从这三个仍然分类错误的例子中挑选一个,因此,这会通过一个过程,比如可以刻意练习,将第二个决策树的注意力计中在的结果还没有的例子上

XGBoost: 

因为XGBoost实现十分复杂,所以大多数人选择导入库

分类问题是左边的代码,将模型初始化为XGBoost分类器

回归问题是右边的代码,代码编程XGBRegressor

4.3.4 何时使用决策树

(1)决策树和树集合用于表格数据,也称为结构化数据非结构性数据不建议使用,如图像、视频、音频和文本等。

       决策树和树集合的一个巨大优势是它们的训练速度非常快

       最后,小型决策树可能是人类可以解释的,如果只训练一个决策树,而该决策树只有说几十个笔记,你可以打印出一个决策树来准确了解它是如何做出决策的

       树集合的一个轻微缺点就是比单个决策树更昂贵, 

(2)神经网络:几乎适用于所有类型的数据,包括表格结构化数据以及非结构化数据结构化和非结构化混合数据

       在表格和结构化数据之类处理中,神经网络和决策树与树集合存在竞争,但首选的算法还是神经网络,但不利的一面是,神经网络可能比决策树慢,大型神经网络可能需要很长时间来训练,神经网络的其他好处包括它与迁移学习一起使用非常重要,因为对于许多应用程序,我们只有一个小数据集能够使用迁移学习并进行预训练一个更大的数据集,对于获得竞争性能至关重要;最后,还有一些技术原因可能更容易将多个神经网络串联起来,构建一个更大的机器学习系统。

       基本原因是神经网络将输出 y 计算为平滑或连续函数输入 x ,即使你把很多不同的模型放来,也可以同时训练,而对于决策树,一次只能训练一颗树。 

       

       高级学习算法课程至此完结,还有一组非常强大的算法,称为 无监督学习,甚至不需要标签 y来计算算法

  • 10
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清园暖歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值