赞
踩
目录
使用向前传播做预测(Inference_making predictions(forward propagation))
在TensorFlow中构建神经网络(Building a neural network)
单层中的向前传播(Forword prop in a single layer)
激活函数 Activation Functions(sigmoid函数的替代方案)
多标签分类问题(multi-lable classification)
Adam算法 进阶优化(Advanced Optimization)
模型选择&交叉验证(Model selection & tranining/cross validation)
为性能建立一个基线(Establishing a baseline level of performance)
连续值的特征(Continuous valued features)
集成学习:使用多个决策树 - 集成树(tree ensembles)
有放回抽样(sampling with replacement)
XGBoost 极端梯度增强(eXtreme Gradient Boosting)
需求预测(Demand Prediction)
左边三个神经元称为一层,一层也可以像右边只有一个神经元。
将负担性、知名度、感知质量等特征称为激活项
它有多层,每层输入一个向量,输出另一个向量。输入层-隐藏层-输出层
神经网络一个很好的特点是:当你从数据中训练它时,你不需要明确第决定其他什么特征,比如知名度等等,神经网络可以自己计算出它想要在这个隐藏层中使用的特征。
隐藏层中是如何计算的
用上标【i】来表示神经网络的第几层 ;
用a来表示逻辑回归算法的输出
g()还有一个名字叫做激活函数,输出的向量叫激活值,上式为sigmoid函数,也叫logistic函数
在正向传播的过程中 w,b是已知的。
向前传播算法:如上图x->a1->a2->a3,从左到右前进的方向进行计算(当你靠近输出层时,隐藏单元的数量就会减少)
神经网络的一个显著特点是:同一个算法模型可以有不同的应用场景
TensorFlow是实现深度学习算法的主流框架之一
基于TensorFlow实现推理模型的语法:
TensorFlow是如何表示数据的
Sequential,TensorFlow中的顺序函数,另一种方式:在学习的同时也向前传播;将刚刚创建的两层按顺序连接起来
通用人工智能 AGI(artificial general intelligence)
matmul 是 NumPy执行矩阵乘法的方法
向量化代码:
TensorFlow实现(TensorFlow implementation)
1.制定模型,告诉TensorFlow如何计算推断
2.编译模型,使用特定的损失函数
3.训练模型
epoch,术语:指你想学习算法进行梯度下降的步数
只有激活函数才能给神经元引入非线性因素,使得神经网络逼近非线性函数,当网络足够复杂的时候就可以逼近任意函数
之前讨论的激活函数为g(z)sigmoid函数,还有其他的激活函数:ReLU(Rectified Linear Unit)修正线性单元、线性激活函数、softmax激活函数
取决于目标。如果是研究二元分类问题:在输出层使用sigmoid;房价,不能为负值:ReLU
y值是一个数,并且可正可负:线性函数
相比sigmoid,ReLU计算速度更快、学习的更快
多分类是指可以有不只两个可能输出标签的分类问题
是逻辑回归算法的泛化,是一种针对多分类环境的二元分类算法
w1-4 , b1-4 是softmax函数的参数;aj被解释为,在给定输入特征x的情况下,y=j的概率估计
注意,a1是包含z1~10的函数,所以每一个激活值,都取决于z的值。这是softmax输出独有的一个属性。
如何在tensorflow中实现
并且减少计算过程中数值舍入误差
代码部分
每张图片都有很多的、与之相关的标签。(输出不再是一个数字,而是多个数字代表不同标签,例如自动驾驶视觉)。需要训练单一的神经网络,来同时检测多种物体
和梯度下降一样,是优化算法,用来最小化代价函数
Adam(Adaptive Moment estimation):可以自动调整学习率,模型的每个参数都会有不同的学习率,沿相同方向移动,提高学习率(步子迈得更大)。
全连接层(dense layer)类型:其中每一层的神经元都从前一层得到所有的激活。
卷积层(convolutional layer):这种层的每个神经元只关注输入图像的一个区域,需要训练的数据更少,也更不容易过拟合
当w增加一个小的值Epsilon时,J(w)的值会改变:J(w)对w的倒数 × Epsilon。
70%的数据放入训练集,30%的数据放入测试集。利用训练集上的数据去训练模型的参数,然后在测试集上测试模型的表现。
使用测试集去评估模型的性能(不包括正则化的一项)
为机器学习算法自动选择一个好的模型
将数据分为三部分:训练集,交叉验证集(cross-validation set),测试集.
计算出:训练误差、交叉验证误差、测试误差
观察哪个模型的交叉检验误差最低,选出模型,最后为了表现泛化误差估计的这个模型在新数据上表现有多好,使用测试集求出J(w4,b4)测试误差.(这样测试集就变得很公平,而不是对泛化误差的过度乐观估计)
在交叉验证中,Fold 1 和 Fold 2 表示数据集被分成的两个不重叠的子集,它们在不同的交叉验证迭代中用作训练集和验证集。
具体来说,假设我们使用 2 折交叉验证,将数据集按照 6:2 的比例划分为两个子集。交叉验证的过程如下:
Fold 1:
Fold 2:
在每个 Fold 中,我们将训练集用于模型的训练,然后使用验证集来评估模型的性能。每次交叉验证迭代时,交替选择不同的 Fold 作为验证集,直到所有 Fold 都被用作验证集为止。最后,我们将所有交叉验证迭代的结果平均,得到交叉验证误差。
诊断方差偏差
当你有多特征的时候,你就没法用画图的方式直观判断出它是否表现的那么好。所以,一个更系统的判断算法是否有高偏差或高方差的方法是,看你的算法在训练集和交叉检验集上的表现。
高偏差算法的一个特点是:欠拟合
高方差算法的一个特点是:J_cv比j_train高得多
高偏差意味着 算法在训练集上表现不好
高方差意味着 算法在交叉验证集的表现 比训练集上差得多
正则化参数的选择是如何影响算法的偏差和方差
非常大时,模型有高偏差(欠拟合);非常小时,高方差(过拟合)
L2正则化
使用正则化,如何选择合适的: 交叉验证
为性能建立一个基线(baseline),我们就更容易判断j_train,j_cv的值,是高还是低。
第一组数据:高方差;第二组数据高偏差
学习曲线是一种帮助你了解学习算法性能如何的方式,曲线随着经验的数量发生变化
交叉验证误差,通常比训练误差高,因为你调整参数去拟合训练集,是希望训练集上的性能得到提升,或者当m很小时,训练集上的表现,至少比交叉验证集好。
训练误差是模型在训练数据上的性能,而交叉验证误差是模型在未见过的测试数据上的性能。通常情况下,交叉验证误差会比训练误差高,这是因为模型在训练数据上可能过度拟合,导致在未见过的数据上表现不佳。
高偏差 vs 高方差的学习曲线
学习算法有高偏差:获取更多的训练数据本身不会有太大帮助
学习算法有高方差:可以通过扩大训练集来降低交叉验证误差,从而让算法表现更好
我们该怎么做
算法方差很大解决方法:获取更多的训练数据,或 简化模型(用更小的特征集 或 增大正则化参数)
算法偏差很大 解决方法:使模型更强大,或给予他更大的灵活性,以拟合更复杂的函数(添加特征 或 添加多项式特征 或 减少正则化参数)
误差分析过程是指人工检查错误的样本,并试图找出算法出错的地方
为机器学习应用添加数据或收集更多的数据
更强的指向性,添加那些出过错的例子,模型会学习的更好
数据增强:用一个已有的训练例子来创建一个新的训练例子(旋转、放大、缩小已有的例子)
可以使用来自不同任务的数据帮助你结局当前的任务,使用其他训练好的神经网络的前几层(包括参数)。
首先在大型数据集上进行训练(监督预训练),然后在较小的数据集上进行进一步参数调优(微调)
正负样本的比例十分倾斜,远不是五五开,我们就无法通过准确率来判断算法是否好坏(一直输出y=0的例子,反而准确率高)。
所以,评估一个罕见类的学习算法的性能,一个有用的算法是构造一个混淆矩阵
计算 精确度 和 召回
精确度:真阳性 在 阳性 中的比例 (找的对)
召回:真阳性 在 实际阳性 中的比例 (所有患病人中 正确检测到的比例)(找的全)
提高阈值--会导致更高的精度、更低的召回,反之亦然。
还有另一个指标,叫 F1 score,它可以自动结合精度和召回率,帮你选择最佳权衡值
此方程也被称为P 和 R 的 调和均值(是一种取平均值的方式,但是更强调较小的值)
决策树模型
输入值,同样也是二元的,具有分类价值 Categorical(discrete values)
学习过程(Learning Process)
如何让算法学习基于训练集的的特定决策树?
构建树的过程:人为划分
如何选取特征:看哪些特征能使左右分支标签的纯度最大(分完后没有异类)
什么时候停止划分:百分百确定是一个类的时候;或达到设定的最大深度时(保持树更小,防止过拟合);或 纯度提高,低于某个阈值时
在熵(entropy)的定义下(衡量纯度的一种方式),如何决定分割一个节点
用熵函数(H(p_1))测量组样本的不纯度:五五开的时候熵值最高
定义p0=不是猫的比例,熵函数定义为:
决定用什么特征来划分一个节点,取决于 什么样的特征选择最能减少熵。
熵的减少称为信息增益
把左右分支的熵,做加权平均和(左右分支 被分到的数量也同样重要,因为如果分到的数量更多,那这边的熵值更低 就更重要),选择根节点,计算根节点的熵(H(0.5)).,选择最大的那一个。
整个式子衡量的是:树在分裂过程中熵的减少(把能最大程度降低熵的特征作为节点)
使用one-hot编码来解决:特征取两个以上的离散值 的问题。通过创建k个只能取值为0或1的二进制特征来替换。
如果特征不只是离散值,而是连续值呢?
当使用划分时,你只需要考虑不同的值来划分,执行通常的信息增益计算,选择高的并决定对其进行分割
可以用来预测一个数字
如何选择哪个特征:首先做的是,尽量减少这些数据子集中体重的 方差(衡量一组样本的离散程度,方差越大 数据点越分散)。
与熵类似,对于回归树,我们同样测量方差的减少。选大的,降低的越多越好
使用单一决策树的缺点:它可能对数据中的微小变化高度敏感(比如仅改变单个训练样本,具有最高信息增益的结点就可能发生改变,进而产生完全不同的树,说明这个算法不是那么健壮)
在新样本上运行这三个树,并让它们投票做出最终预测
这样我们就不用担心整体算法会对任何一棵树的预测过于敏感
将有放回抽样应用于构建集成树的方式如下:
创建新训练集
在根节点或根节点附近的几个节点 会有相同的特征选择,所以,进一步尝试 随机每个节点的特征选择,会导致树之间变得更加不同,预测会更加准确。
选择k个小于n个特征的 随机子集,只允许算法从这k个特征子集中挑选 信息增益最大的特征来划分。当n很大是,k的典型选择是n,最终得到的就是随机森林
对于我们已经训练过的决策树,专注于我们还没做好的地方,然后在构建下一个决策树时,我们会把更多的注意力集中在做的不好的例子上。
例:第二次循环:用有放回的方式生成另一个含有10个示例的训练集。增强的步骤会在每一次迭代过程中做B次,就会有更高的概率选择这样的例子(以前样本树集合做的不太好的例子)
不要用有放回的XGBoost,,它实际上不需要产生很多随机选择的训练集,甚至比使用有放回采样更有效。
决策树和集成树通常可以很好的处理表格数据(结构化数据)。对于决策树一次只能训练一颗
神经网络适用于所有类型的数据,包括结构化和非结构化、以及混合数据。神经网络可能比决策树慢,但它可以和迁移学习一起使用
剪枝原因:提高泛化能力
剪枝(Pruning)是一种用于降低决策树复杂性的策略,目的是防止过拟合,提高模型的泛化能力。决策树在构建过程中可能会生成过于复杂的树结构,这可能导致模型在训练数据上表现得很好,但在新数据上表现较差。剪枝策略的目标是削减决策树中的一些子树,从而降低模型的复杂性,使其更具泛化能力。
预剪枝
在决策树构建的过程中,预剪枝是在每次节点分裂前进行的。在分裂节点之前,会根据一些预定义的条件来判断是否应该继续分裂。一些常见的预剪枝条件包括:
后剪枝
后剪枝是在决策树构建完成后,通过修剪一些子树来减小模型的复杂性。后剪枝的过程通常涉及到递归地检查子树,然后判断是否应该将子树替换为叶节点。常见的后剪枝策略包括:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。