各位老铁们,大家好,今天由我来为大家分享深度学习实践指南:从入门到精通,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
第一章 绪论
1.2 基本术语
所有可能的模型组合成一个假设空间H预测分为两类任务:
分类任务:预测结果为离散值二分类任务,其中标签为(0/1或+1/-1代表正/负例)多分类任务,类别数为k 2回归任务:预测结果是连续值的另一个任务是聚类:数据的模式事先不知道,也没有标签,这是无监督学习。
模型构建/学习目的
从输入空间泛化能力找到一个函数映射,我们要做的就是找出这个分布模式
独立同分布可以理解为强调不同的特性
任何有效的机器学习算法都必须有一个对应的分布是未知的,因为能够拟合有限数据的曲线并不唯一,所以需要设置一个归纳偏好来保证泛化能力。
归纳偏好原则通常被用作一般的归纳偏好原则,但不幸的是该原则中“简单”的含义对于不同的模型来说并不是唯一的,需要其他机制来完成判断。
归纳偏好指出算法的优缺点必须结合具体的学习问题来讨论。
需要注意学习算法本身的偏好是否与问题匹配。不同的数据集有不同的“特性”,需要不同的“偏好”来拟合特定的数据集。
第二章 模型评估与选择
2.1 经验误差与过拟合
错误分为两类:
经验误差:数据集上的误差泛化误差:新样本上的误差对过拟合的理解:
在学习到数据集不够通用的特征后,不可避免地将训练集本身的一些特征视为整体特征。过拟合
2.2 评估方法
模型选择存在两个问题:泛化误差。我们无法知道训练误差是否不可靠(存在过拟合),因此提出了不同的评估方法
需要一个“测试集”,“测试集”上的测试误差被用作泛化误差的估计。
测试集应尽量不出现在训练集中,即两者应尽可能互斥。
测试集的划分方法
预留方法
将数据集划分为两个互斥的集合,同时保留类别比例(即进行分层抽样)
一般情况下,确定分层比例后,将层大小随机划分几次,重复该过程,然后取平均值作为最终结果。
交叉验证法
与hold-out方法类似,将数据集A分为k个互斥的集合
对于我在k:
使用A - k_i 作为训练集
使用k_i作为测试集
记录测试错误err_i
返回测试错误的平均次数奥卡姆剃刀:通常重复p次,取p次结果的平均值NFL (No Free Lunch Theorem): 留一法,减少样本划分不同引入的误差
k折交叉验证方法的特例
当k=m 时,称为p次k折交叉验证bootstrap 方法
有效时间:目的
然而,该方法生成的数据改变了事故数据集的分布,并且会引入估计偏差。
具体方法:
假设数据集D有m个样本
每次从数据集D中取出一个样本,放入D"中,然后将样本放回D中,重复采样操作m次。用D"作为训练集,D/D{`}作为测试集,可以证明测试浓度数据占D的1/3,并且都没有出现在D"中
Bootstrap方法也用于集成学习中的Bagging模型(抽样方法)
留一法我们将数据集分为训练集和验证集,并对验证集进行模型选择和参数调整。
数据集较小、很难划分 训练集/ 测试集模型选择和调整完成后,整个数据集D应该再次完全训练!
2.3 性能度量
不同的绩效衡量标准会导致不同的评估结果。您不能仅仅依赖评估结果。不同的任务要求和数据需要不同的模型和性能指标。
2.3.1 错误率与精度
分类任务中最常用的性能衡量标准,可用于验证集和010 -59000
2.3.2 查准率、查全率与 F1
精确率也称为准确率(Precision)
检索率也称为召回率(Recall)
注意!!!和二分类定义为:
{P}=TP over {TP + FP}
{R}=TP over {TP + FN}
Precision高往往会导致Recall低,这可以理解为谨慎,在做出决定之前需要高度的确定性。高Recall往往会导致低Precision,可以理解为宁可误杀一万,也不放过一个多分类绘制具体步骤
参考ROC曲线的绘制过程,对预测结果进行排序,依次将预测结果设置为阈值,然后计算对应的Precision和Recall
如果分类器A 的P-R 曲线被另一个分类器B 完全“包裹”,则B 的性能优于A
平衡点(BEP)
是Precision=Recall时的值,BEP大的分类器更好
Precision比算术平均值和几何平均值更关注较小的值
{F_1}=frac {2 times P times R}{P + R}
Recall针对准确率和召回率重要性不同的情况
比算术平均值和几何平均值更关注较小的值
{F_beta}=frac {(1 + {beta}^2) times P times R}{({beta}^2 times P) + R}
P-R 曲线也称为宏F1
直接计算然后平均
{宏-P}={1 over n} sum_{i=1}^{n}P_i
同理可得macro-R。利用macro-P、macro-R和F1的计算公式,最终可以得到macro-F1。
F1 Score也称为微F1。同样,宏F1 记录为微F1。先对F Score求平均值,然后用平均值计算F1 Score。
2.3.3 ROC与AUC
macro F1 Score- 接收器工作特性横轴:TPR;纵轴:FPRmicro F1 Score- 曲线下面积的大小代表预测的准确性。绘制步骤对每个测试样本进行预测并获得预测结果。对预测结果进行排序,并每次为每个预测值设置分类阈值(即将每个样本设置为正例)。设置阈值后,循环其他样本。如果样本是真例,纵坐标增加1 over m ^+AUC 中的坐标x 代表TP、TN、FP、FN,因为每遇到一个反例,横坐标就扩大一个百分点(1 over m^ -)。同样,y代表ROC。 AUC 范围为AUC
2.3.4 代价敏感错误率与代价曲线
敏感成本错误率
E(f;D;cost)=frac{1}{m} (sum_{x in {D^+}}I(f(x_i)not=y_i) times cost_{01} + sum_ {x_i in D^-}I(f(x_i)not=y_i) times cost_{10})
为了权衡不同类型错误造成的成本,可以使用该点之前的反例所占比(cost_{01},cost_{10}.)来表征不同的成本。使用该点之前的正例所占比来表征成本之间的重要性。
2.4 比较检验
使用假设检验方法,误差假设检验后期进行二项式检验和t检验的具体注意事项
2.5 偏差与方差
对于回归问题,预期泛化误差可以分解为[0.5, 1]。分解结果:E(f;D)=bias^2(x) + var(x) + epsilon^2
具体分解过程见本书P45第代价矩阵页。偏差和方差是比值和偏差、方差、噪声之和之间的关系。偏差:描绘了预测结果的偏差与方差的关系的程度,即算法本身的拟合能力。方差:描述预测结果的准度。 59000的度也体现了算法抵抗数据扰动的能力。噪声:描述算法达到预期泛化误差的下界,即学习问题本身的难度。在学习早期,确主导泛化错误率,在学习后期表现为确。欠拟合问题逐渐得到解决,准在泛化错误率中占主导地位,体现为偏差。学习器在学习过程中,会逐渐学习数据中的欠拟合,导致学习器的抗干扰能力下降。即方差增加偏差与方差的经典关系图:
imageMin-Max归一化和z-score归一化的区别方差过拟合计算量小,计算量大。容易受最大/最小值影响,不易受极值影响。只有当超出原来的极值范围时,才需要重新计算一个数据。计算一次
第3章 线性模型
3.1 基本形式
尝试使用干扰数据的Min-Max进行预测基本形式: f(x)=omega^Tx + b=omega_1x_1 + omega_2x_2 + cdots + omega_dx_d + b
omega 代表每个属性的z-score,所以线性模型有很好的属性
3.2 线性回归
回归模型的变量通常是连续值,所以当属性是离散值时,可以执行线性组合当属性片存在“顺序”关系,通过对离散值进行排序,然后将其转换为相应大小的连续值。当属性之间没有“顺序”关系时,可以使用重要性编码方式转换离散值。无序属性可以转换为连续值。转换将不恰当地引入“有序”关系损失函数:
使用可解释性进行性能测量MSE=sum_{i=1}^{m}{(f(x_i) - y_i)}^2=sum_{i=1}^{m}{(omega x_i + b - y_i)}^2
解决方法:
最小二乘法——找到一条直线,使所有样本到该直线的欧氏距离最小。最大似然估计- 找到使所有结果值的概率最大化的概率模型参数。
3.3 对数几率回归
也叫逻辑回归,虽然叫回归,但实际上是连续化算法。
起源
我们希望OneHot使用均方误差(MSE),所以输出结果需要是分类类别标签。例如两个分类:线性模型。然而,线性模型的预测结果是一个连续值,因此我们需要找到一个函数来映射连续结果值。它是一个离散类别标签。因此,分类预测任务是理想的映射函数,但单位阶跃函数不是单调可微的,因此引入离散的作为替代函数。预测结果实际上是y = {0,1},其定义如下: omega x^T + b=ln frac {y}{1-y}
而单位阶跃函数就是去除ln的概率。有一个对数几率函数的定义,反映了对率几率作为正例的相对可能性。直接建模y无需实现假设数据分布,避免假设分布不准确引入的问题:010 -1010几率异质点的投影点尽可能远,相似点之间的协方差尽可能小尽可能(即相似点尽可能接近)xJ=frac{w^TS_bw}{ w^TS_ww}
二维情况的详细推导请参考https://www.cnblogs.com/engineerLF/p/5393119.html,其中利用“广义瑞利商”的性质可以得到最优w。性质的详细推导请参考https://www.cnblogs.com/pinard/p/6244265.html分类可能性加一个负号,成为利用拉格朗日乘子法的最小化问题,核心思想:一般实践中,S_w ^{-1}利用SVD进行奇异值分解,通过S^{-1}_w=V{Sigma}^{-1}U^T得到{S_w}^{-1}优化目标引入核函数LDA 处理非线性可分离问题。具体推导参见西瓜树P137
3.4 线性判别分析
三种分裂策略:
一对一(OvO) 一对一休息(OvR)最大化方法(MvM)求解结果配对类别以生成frac {N(N-2)}{2} 分类器
KLDA每次将一个类别视为正例,其余视为反例,因此总共会生成N个分类器。
然而,一对一的训练开销通常小于一对一,因为只使用两个类的训练数据。
3.5 多分类学习
常用纠错输出码(ECOC)的常用编码矩阵:二进制码、三进制码(加上禁用类,不计入计算)随机将类别分为两类:正例和反例,形成很多二分类器。任意两个分类器多对多越多,训练效果就越好。这个想法类似于装袋。训练多个高多样性分类器。最后这些分类器对同一个样本进行预测,预测结果分别计算编码距离(汉明距离/欧氏距离),并以编码距离最小的类作为最终结果一对一。 ECOC代码越长,分类器之间的相似度越小,容错性越好。一对其余,任意两个类别之间的编码距离越大,容错性越好
多对多分类
3.6 类别不平衡问题
在预测分类任务时,”不相同“是代表正例的概率,阈值通常设置为0.5,即y 0.5 ,判定结果为正例,否则判定为负例
含义:
如果y 0.5,则预测是正例,即,如果frac{y}{1-y} 1,则预测是正例
但请注意其原因:
同一个分类任务实际上代表同等长度的编码,也就是我们能够观察到数据集中正例的概率(我们的y两个类别的数据集大小相同,所以观察概率为0.5)。所以当y=0.5时就意味着预测正例的概率大于观察到的概率,当然应该判断为正例。
现在,不同类别对应的数据量是不同的,不再是1:1,我们的阈值不应该设置为观测几率,而应该是:
如果frac {y}{1-y} frac{m^+}{m^-},则预测为正例,解为假设,这是我们的新阈值
“再缩放” 思想
0.5减少数据集数量,使所有类别的数据具有相同的表示算法:EasyEnsemble,将负例划分为不同的数据集供多个学习器使用,采用集成的思想0.5添加数据集数量,使得所有类别的数据相同。需要注意增加数据集的方法。简单地y将导致严重的欠采样代表算法:SMOTE
欠采样、过采样思想
过采样,因为010处于最大似然的假设。 -59000 这就是为什么推导结果与最小二乘相同。正态分布中恰好有一个二次项。
换句话说,最小二乘之所以选择使用平方,是因为最大似然的推导结果是最小二乘,所以最小二乘就是最大似然估计的结果。
3.7 相关思考
第4章 决策树
重复采样模型可读性好,分类速度快过拟合损失函数线性回归推导中的最小二乘和极大似然的关系学习策略误差服从正态分布采用启发式方法求解决策树,求解结果是优点结论点有两种类型:内部节点(非叶子节点)代表特征或属性,叶子节点代表类,也代表给定特征的概率分布。决策树的学习算法包括:
概念(划分选择)正则化的极大似然函数,只考虑局部最优最小化损失函数,考虑全局最优。注意两种情况:
当属性集为空或者属性集中所有样本取值相同时,将类别标记为编号最大的类别次优的,使用当前节点的特征选择。当当前节点包含的样本集为空时,也将该类别标记为决策树的生成中最常见的类别,但使用当前节点的决策树的剪枝
4.1 决策树模型与学习
,根据D进行特征选择。
随机变量不确定性的度量
同时也可以从另一个角度来理解:表示理解某件事需要什么后验分布(数学之美)
应选择3个常用指标作为划分特征
信息增益对D的特征(属性)有偏好。增益率对先验分布的特征(属性)有偏好,因此通常采用折衷的方法:先找到高于平均值的信息熵,然后找到花费的信息代价最大的特征(属性)
基尼系数
4.2 特征选择(划分选择)
3种常用的生成算法:
ID3,使用可取数目较多进行特征选择C4.5,使用可取数目较少进行特征选择CART,使用信息增益进行特征选择信息增益率决策树模型的参数估计是基于如何将特征空间划分为最大化样本出现的概率,寻找如何划分的过程就是求解概率模型参数的过程
4.3 决策树的生成
4.4 CART 的生成
对于回归问题,CART采用与决策树相同的思想,即信息增益。每个除法R_m对应一个固定输出值c_i。生成的回归模型表示为:
f(x)=sum_{m=1}^Mc_mI(xin{R_m})
固定输出值c_i是划分空间R_m中y_i的平均值
增益率CART回归树使用基尼系数sum_{x_iin{R_m}}(y_i-f(x_i))^2
ID3相当于用极大似然法进行概率模型的选择 理解对划分空间R_m中的每个样本依次进行如下操作:
将当前样本的每个特征/属性值依次作为分割点s,当前变量为分割变量j。利用当前分割变量的分割点将当前分割空间R_m分割为两个子区域R_1={x |{x^{(j)} req s}},R_2={x|{x^{( j)} s}}然后计算R_1和R_2的固定输出值c_{1i},c_{2i}计算c_{1i}下的平方误差和r_{js},c_{2i}=r_{ js1} + r_{js2} 比较所有r_{js},找到对输入空间进行划分r_{js}变量j下的最优分割点,最优分割点s
然后将划分好的两个子区域如上进行划分,直到满足停止条件。
CART回归树的生成
CART分类树以CART回归树的损失函数为划分依据,其余生成方法与决策树生成方法相同。
算法停止的条件可以是:
节点中的样本数小于阈值。节点上的基尼指数小于阈值(基本属于同一类别)或者没有更多特征
CART分类树的生成
CART分类树的剪枝
剪枝策略
预剪枝和后剪枝是基于4.3中平方误差的概念。决策树的剪枝也可以看成CART回归树的划分。正则化项是决策树的叶节点数。
最小的划分节点之前的估计。如果划分节点后泛化性能不能得到提升,则停止划分并使用贪心策略,这可能会陷入局部最优并带来欠拟合的风险。基尼系数等待决策树完全生成。之后,从下往上进行修剪。剪枝策略为:将节点的子树替换为叶子节点,观察泛化性能是否得到提升。如果改进,则将子树替换为叶子节点,否则不进行剪枝。根据奥卡姆剃刀原理,如果泛化性能不变,仍然应该选择剪枝。形成更简单的决策树可以更好地防止过拟合,但需要花费大量时间。这里的泛化性能评价标准可以为ID3相当于用极大似然法进行概率模型的选择
4.5 决策树的剪枝
4.6 连续与缺失值
假设属性正则化的极大似然估计为连续值属性,属性预剪枝共有后剪枝个不同的值。
对这精度个不同的值进行排序,按顺序选择分割点A。大于分界点A的记录为D_t^+。同样,小于N的都记为D_t^——这样就可以将每个值作为分界点,然后计算出N。最终可以得到属性t的信息增益。后续方法与离散值
4.6.1 连续值的处理
相同。在计算属性A的信息增益时,如果发现一个样本存在缺失值:
最初所有样本都分配给t。计算t上的三个概率(主要针对不包含缺失值的样本)。非缺失样本占总体数据的比例。非缺失样本中第k个类别的比例。比例属性a上非缺失样本的比例为a^v。使用这三个概率来计算每个属性。
>a的信息增益Gain(D,a) = rho times (Ent(D^n) - sum_{v=1}^{V}{r_v}^~Ent({D_v}^n))更新含有缺失值的样本的权值,并划入每一个结点将划入的数据权值更新为{r^n}_v * w_x, 相当于将数据依概率进行划分后续与普通的操作相同注意:更新权值相当于以不同的概率将样本划分进每一个结点因为含有缺失值的样本可能接下来还要参加其他属性的信息增益的计算,而计算中会涉及权值,所以权值相当于对带有缺失值的样本的影响力4.7 多变量决策树
相当于对特征进行了一个线性的组合,之前的特征是单变量,组合之后单个结点相当于一个线性的分类器4.8 习题思考
1. 以“最小训练误差”作为划分选择的缺点由于训练集总会与模型之间存在误差,如果选择最小误差,则会很大程度的拟合为符合训练集的决策树,从而导致严重的过拟合2. 对比使用递归、栈(非递归)、队列(非递归)三种结构生成决策树的优缺点缺点: 使用递归的方法会保存大量的参数信息,而在参数中有大量的数据信息,从而会导致内存溢出如果使用栈的结构,不能完成以MaxNode的约束,会生成畸形的决策树(只有一边),只能完成以MaxDepth的约束如果使用队列的结构,只能完成BFS即以MaxNode的约束优点: 使用递归的方法代码更加简洁,易读使用栈的结构有利于后剪枝使用队列的结构,由于入队之前必须进行划分,如果是用预剪枝则会很方便,因为可以比较划分与否的验证集精度,而栈则做不到当数据属性相对较多,属性不同取值相对较少时,树会比较宽,此时深度优先所需内存较小,反之宽度优先较小。第5章 神经网络
后续再写第6章 支持向量机
支持向量机内容顺序主要根据《统计学习方法》中的章节来安排,主要内容也由《统计学习方法》展开,其中穿插入西瓜书的知识点6.1 概念
SVM是一种二分类模型学习算法是求解凸二次规划的最优化算法模型分类三类线性可分支持向量机:当数据集线性可分(硬间隔支持向量机)线性支持向量机:当数据集近似线性可分(软间隔支持向量机)非线性支持向量机:使用核技巧核函数表示将输入从输入空间映射到特征空间得到的特征向量之间的内积6.2 线性可分支持向量机
输入空间输入的数据向量所在的空间特征空间特征向量所在的空间支持向量机的学习是在特征空间中进行的,线性可分SVM将输入空间中的输入线性映射为特征空间中的特征向量,非线性可分SVM将输入非线性映射为特征向量 算法思想利用间隔最大化求最优分离超平面,解是唯一的能够正确划分训练数据集并且几何间隔最大学习到的分离超平面: w^* * x + b^* = 0 最终的分离决策函数使用符号函数6.2.1 函数间隔和几何间隔
函数间隔hat{gamma}_i = y_i(w*x_i+b) 其中y_i用来表示分类预测的正确性,w*x_i+b用来表示分类的确信度(换言之就是点到分类超平面的距离) 定义超平面的函数间隔为数据集D中所有样本的函数间隔中的最小值,即: hat{gamma} = min_{i=1,...,N}hat{gamma}_i 几何间隔由于成倍缩放w,b会导致函数间隔成倍缩放,所以w加上约束,如约束为:Vert{w}Vert = 1, 可以导出几何间隔 函数间隔与几何间隔的关系gamma = frac{hat{gamma}}{Vert{w}Vert}6.2.2 间隔最大化
直观解释使得分离有足够的确信度 [ 使得(离分离超平面最近的数据点)离超平面足够远]可以得到求解式: max{frac{hat{gamma}}{Vert{w}Vert}}_{w,b} s.t. y_i(w*x_i+b) geq hat{gamma}, i = i,2,...,N 令hat{gamma} = 1,得到线性可分支持向量机的最优化问题(凸二次优化问题), 具体推导见《方法》P97: min_{w,b} frac{1}{2}{Vert{w}Vert}^2 s.t. y_i(w*x_x+b) - 1 geq 0, i=1,2,...,N6.2.3 学习的对偶算法
求解线性可分支持向量机的最优化问题使用拉格朗日对偶性,令原式为原始问题,通过求解对偶问题得到原始问题的最优解 优点对偶问题更容易求解自然引入核函数(在对偶式中出现了内积)推导过程见 《统计学习方法》 P103 其中几个重要的点: 支持向量是{alpha_i}^* >0的点对偶学习问题的KKT条件imageKKT的对偶互补条件{alpha}^* geq 0 实际应用中b的求解理论上使用任意一个数据x_j就能算出b在实际应用中,采用更加鲁棒的做法:使用所有支持向量求解的平均值,S代表支持向量的集合b = frac{1}{S}sum_{sin{S}}(frac{1}{y_s} - sum_{iin{S}}alpha_iy_ix_i^Tx_s)6.3 线性支持向量机与软间隔最大化
6.3.1 线性支持向量机
引入 大部分数据并不满足完全线性可分,存在一部分数据非线性可分,因此对每一个数据引入一个松弛变量xi geq 0,使得那些不满足线性可分的数据点加上xi变得线性可分线性支持向量机的原始问题: min_{w,b,xi} frac{1}{2}{Vert{w}Vert}^2+Csum_{i=1}^N{xi}_i s.t. y_i(w*x_i+b) geq 1 - {xi}_i, i = 1,2,...N {xi}_i geq 0, i=1,2,...N 原始问题的对偶问题 同线性可分的推导相同,先求min_{w,b,{xi}}(即分别对w,b,xi求导,并令导数等于零,求出相应的表达式,代回原式,得到min_{w,b,{xi}}L(w,b,xi,alpha,mu))再求出max_{alpha}min_{w,b,{xi}}L(w,b,xi,alpha,mu)原始问题满足的KKT条件 image6.3.2 支持向量
若{alpha_i}^*< C, 则xi_i = 0,支持向量恰好落在间隔边界上若{alpha_i}^* = C,06.3.3 合页损失函数
定义image原始问题也等价于含有合页函数作为损失函数的目标函数也即将xi_i换成了{[1-y_i(w*x_i+b)]}_+{sum_{i=1}^N}{[1 - y_i(w*x_i+b)]}_+ + lambda{Vert{w}Vert}^2 相比感知机的损失函数和0-1损失函数,合页损失函数有更高的要求[图片上传失败...(image-b1fd0d-1532507004505)]6.4 支持向量回归
思想不同于传统回归模型,SVR对偏差有一定的容忍,形成一个以容忍度/宽度2epsilon为间隔带,误差不超过epsilon的样本都认为预测正确SVR也可以引入核函数SVR引入了epsilon-不敏感损失l_epsilon(z) = begin{cases} 0, & text{if $|z| leq epsilon$} \[2ex] |z| - epsilon, & text{otherwise} end{cases} 原始问题SVR考虑预测模型两侧的情况,所以约束条件分为两个f(x_i) - y_i leq epsilon + xi_i, 上侧 y_i - f(x_i) leq epsilon + hat{xi_i}, 下侧6.5 核函数
6.5.1 核技巧
非线性分类问题对于不能线性分类的数据,也就不能用一个超平面将数据分开,但如果能用一个超曲面将数据集分开,那么这个问题就是一个非线性可分问题注意:是非线性的但是是可分的问题求解思想使用一个变换将原空间的数据映射到新空间,而这个新空间也就是特征空间在新空间特征空间上用线性分类的学习方法学习分类模型核函数定义K(x,z) = phi(x)*phi(z) 其中,phi{x}为映射函数表示定理对于一般的损失函数和正则化项,优化问题都能表示为核函数的线性组合h^*(x) = sum_{i=1}^malpha_ik(x,x_i)核函数在SVM中的应用将SVM对偶问题中的内积x_i*x_j变换为特征空间中的内积phi(x_i)*phi(x_j)当映射函数是非线性函数时,学习到的核函数SVM是非线性分类模型使用核函数的支持向量机最优化问题6.6 习题思考
为什么高斯核会把原始维度映射到无穷多维?定义多项式核函数k(x,y) = {(x^Ty)}^p然后考虑高斯核函数k(x,y) = exp(-{Vert{x-y}Vert}^2)展开后得到:k(x,y) = exp(-{Vert{x}Vert}^2)exp(-{Vert{y}Vert}^2)exp(2xy)由泰勒展开公式:指数函数: e^x = sum_{n=0}^infty{frac{x^n}{n!}} 可以得到: k(x,y) = exp(-{Vert{x}Vert}^2)exp(-{Vert{y}Vert}^2){sum_{n=0}^infty}{frac{(2x^Ty)^n}{n!}} 可以看出,高斯核其实被展开为无穷项多项式核函数的和,而这其中也包括了无限维的多项式核,因此高斯核会把原始维度映射到无穷多维第七章 贝叶斯分类器
7.1 贝叶斯决策论
概念贝叶斯决策论是建立在概率和损失之上的,以概率为基石辅以损失函数二者结合形成了在样本上的“条件风险”函数 R(c_i|x) = sum_{j=1}^Nlambda_{ij}P(c_j|x) lambda_{ij}是将真实标记为c_j的标记预测为c_i的损失,可以为任意的损失函数 P(c_i|x)是可从数据中获得样本分类为c_i的后验概率我们需要找到一个判定准则h, 来最小化总体风险, 即 使得预测结果类c^*是使得上面提到的损失最小的类c 因此最优的判定准则为: h(x^*) = mathop{argmin}_{cin{Y}}R(c|x) 现在,就我们就只需要考虑如何求得所有的R(c|x), 当损失函数是0-1损失时有: R(c|x) = 1 - P(c|x)注意! 上式只在 损失函数 是 0-1损失 时成立!!!于是,我们可以得到贝叶斯最优分类器: h^*(x) = mathop{argmax}_{cin{Y}}P(c|x)后验概率的求解现在的任务变为了求解P(c|x), 主要有判别式模型和生成式模型生成式模型通过直接建立模型来预测 c代表:决策树、BP神经网络、支持向量机判别式模型通过对概率分布P(c|x)建模代表: 贝叶斯模型求解公式,基于贝叶斯公式:P(c|x) = frac{P(c)P(x|c)}{P(x)} 而对于所有的训练数据,P(x)是相同的,不影响求解最优,由此,贝叶斯最优分类器的公式可以更改为: $h^*(x) = mathop{argmax}_{cin{Y}}P(c)P(x|c)$$7.2 朴素贝叶斯分类器
由于通常数据的特征/维度会有很多,同时每一个特征的取值也有很多,例如一共有K个特征,而每一个特征是一个二值特征,那么整个数据空间将会达到2^K的规模,因此与测试时很有可能该数据在训练样本中没有出现过,导致P(x|c) = 0,这显然不对,没有出现过并不等价于概率为零 因此引入朴素贝叶斯分类器而在朴素贝叶斯方法中,学习指的就是P(c)和P(x|c)的估计概念
假设每个属性独立的对分类结果产生影响P(c|x)=frac{P(c)P(x|c)}{P{x}}=frac{P(c)}{P(x)}prod_{i=1}^dP(x_i|c) 其中d为属性数目,x_i为x在第 i 个 属性上的取值计算
先验概率令D_c表示训练集 D 中第 c 类样本组成的集合 P(c) = frac{|D_c|}{|D|} 后验概率对于离散属性,令D_{c,x_i}表示D_c上在第 i 个属性上取值为x_i的样本组成的集合 P(x_i|c)=frac{|D_{c,x_i}|}{D_c} 对于连续属性,考虑概率密度函数,假设服从正态分布N(mu_{c,i},sigma_{c,i}^2), 其中mu_{c,i},sigma_{c,i}^2表示第 c 类样本在第 i 个属性上取值的 均值 和 方差 p(x_i|c)=frac{1}{sqrt{2pi}sigma_{c,i}}exp(-frac{(x_i - mu_{c,i})^2}{2sigma_{c,i}^2}) 上面三个式子就是基于极大似然估计的结果贝叶斯估计平滑
贝叶斯估计就是加上平滑的极大似然估计目的为了避免某些属性值在计算时没有在训练数据中出现,导致概率为零最后导致连乘最后的结果为零,对上面离散情况的计算式子进行修正 hat{P}(c) = frac{|D_c| + lambda}{|D| + lambda{N}} hat{P}(x_i|c) = frac{|D_{c,x_i}| + lambda}{|D_c| + lambda{N_i}} 常用拉普拉斯修正, 即上式中lambda = 1第八章 EM算法
8.1 概念
期望最⼤化算法,或者EM算法,是寻找具有潜在变量的概率模型的最⼤似然解的⼀种通⽤的⽅法(PRML) 但是当Z是连续变量或者离散变量与连续变量的组合时,⽅法是完全相同的,只需把求和换成适当的积分即可(PRML) 为什么EM算法需要先给定一个先验的参数theta?因为在求解最大化对数似然logsum_z{P(Y,Z|theta)}的过程中引入了一个常数,而这个常数是一个已知了参数theta和Y的关于隐变量z的概率值,因为需要提前已知参数theta分布函数才是确定的,然后带入Y才能利用分布函数求出当前隐变量z的概率值 每次 M步 最大化的是什么?最大化的是期望,而这个期望是对数似然的期望,其中对数似然的分布函数已经是给定了的(其中分布函数是有关theta的) 每次 E步 求的是什么?求的是 M步最大化需要用到的提前给定的对数似然的分布函数, 利用提前给的theta进行求解8.2 算法步骤
输入模型参数的初值theta^{(0)}E步: 利用已知的参数theta^i计算函数Q(theta,theta^{(i)}) = sum_zlogP(Z|Y,theta^{(i)})P(Y,Z|theta)其中函数Q(theta,theta^{(i)})就代表对数似然的期望需要计算的就是P(Z|Y,theta^{(i)})其中含有 M步需要最大化的参数thetaM步: 最大化E步求出的Q(theta,theta^{(i)})中的参数theta将 M步 求出的最大的theta作为E步中已知的参数theta^i,迭代进行计算,直到参数theta收敛(变化很小)8.3 算法是怎么来的 + 坐标上升###
思想 最大化观测数据的对数似然函数logP(Y|theta)找到一个对数似然函数的下界函数Q(theta)找到下界函数Q(Z)的最大值theta^*下界函数利用Jensen不等式得到(提示:log函数是一个凹函数)求得,其中需要引入一个使用theta^{(i)}的先验分布Q(z^{(i)})如何求得需要引入的先验分布Q(z^{(i)})? 从 Jensen不等式入手,由于Jensen 表示:E[f(x)] leq f[E(x)], 当x为常数c的时候,左右式相等,此时取到等号此时求得Q(z^{(i)}) = P(z^{(i)}|Y,theta)EM算法是一个迭代计算的算法,思想就是每次固定一个变量 首先固定住theta, 调整先验分布函数Q(z^i)取到等号然后固定住先验分布函数Q(z^{(i)}),调整theta,使先验分布函数Q(z^{(i)})取得最大值,得到theta^{new}再固定住theta,此时使用刚计算出的theta^{new},调整先验分布函数Q(z^i)取到等号....直到对数似然函数收敛到最大值theta^*因此,EM算法可以看做利用坐标上升进行优化的算法 image第九章 集成学习
Boosting方法
主要关注降低偏差AdaBoost
核心思想弱分类器的线性组合组成元素弱分类器G_m(x)弱分类器系数alpha_m第 m 轮中,第 i 个样本的系数w_{m,i}弱分类器在加权数据集上的分类误差率e_m,是被G_m(x)误分类的样本的权值之和算法步骤将样本的权值先给定为均值,在此基础上学习出基本分类器G_1(x)反复学习基分类器,执行以下步骤:使用当前权值分布的数据集学习得到基本分类器G_m(x)计算基本分类器在当前加权数据集上的分类误差率e_m根据e_m调整基本分类器G_m(x)的系数alpha_m,分类误差率越小的基本分类器,其系数越大,即在最终分类器中的作用越大根据基本分类器G_m(x)的系数alpha_m,更新下一个基本分类器G_{m+1}(x)训练的数据集的权值分布w_{m+1,i}另一种解释AdaBoost 还可以看做是前向分步加法算法的特例,是由基本分类器组成的加法模型, 损失函数是指数函数前向分步算法 学习的是加法模型从前向后,每次只学习一个基分类器及其系数提升树
以分类树或回归树为基分类器的提升方法 对分类问题,采用二叉分类树,对回归问题, 采用二叉回归树采用加法模型+前向分布算法+决策树为基函数且基函数为决策树桩(最简单的决策树) 之所以采用二叉树,是因为二叉树是所谓的决策树桩, 足够简单,同时也能避免过拟合提升树算法不同问题的提升树算法区别在于:损失函数不同分类问题: 指数损失函数回归问题:平方误差损失函数一般决策问题: 一般损失函数分类问题提升树分类问题提升树与Adaboost差别不大 其中,对于二分类问题,与 AdaBoost 算法步骤相同,只不过将基分类器固定为二叉分类树,即二分类问题的提升树算法是 AdaBoost算法的特殊情况回归问题提升树回归问题提升树采用前向分步算法+平方损失函数,学习方法就是不断地拟合残差计算当前残差r_{mi} = y_i - f_{m-1}(x_i)训练一个拟合当前残差r_{mi}的回归树f_{m}将学习到的回归树与之前的回归树进行加和,求得最终的回归提升树梯度提升树(Gradient Boosing Decision Tree)####
核心思想在提升树的基础上加入了梯度的概念,利用负梯度在当前模型的值作为回归问题提升树中的残差的近似值GBDT基分类器的选择服从低方差和高偏差,算法框架服从boosting框架即可 由于是拟合残差(连续值),所以GBDT中的基分类器选择的基本都是CART回归树算法步骤大部分在提升树中的步骤不变,加入了用损失函数的负梯度作为残差的近似值使用原始数据集作为训练集, 利用CART回归树训练出第一个回归树f_0(x)计算损失函数的负梯度当回归树f_{m-1}下的值r_{mi}, 后面有举例怎么计算对r_{mi}拟合一颗CART回归树f_r(x), 拟合的过程参考:CART回归树的生成更新f_m(x)为f_{m-1}(x)与f_r(x)的和重复执行以上步骤,直到达到停止条件计算负梯度的例子对于平方损失函数,它就是残差,对于一般损失函数,它是残差的近似值 imagelogloss的推导如下: image不同的问题下选择的损失函数不同,后面会看到,例如多分类问题下的GBDT选择的就是loglossGBDT的各种扩展对于不同的问题GBDT采用不同的处理方法,而这些方法的不同之处只在于损失函数的不同同时,应该注意,不同的损失函数下,算法的初始化方法也不同!!!!GBDT处理回归问题 采用平方损失函数,L(y_i,F(x_i))=frac{1}{2} * (y_i-F(x_i))^2算法步骤:初始化:使用样本的均值image参考:https://blog.csdn.net/qq_22238533/article/details/79185969GBDT处理二分类问题 采用logloss损失函数,推导上图有算法步骤:初始化:F_0(x) = 0.5 * log(frac{sum_{i=1}^Ny_i}{sum_{i=1}^N(1-y_i)}), log中的式子表示正样本数目/负样本数目image参考:https://blog.csdn.net/qq_22238533/article/details/79192579相比回归任务,由于二分类任务最终预测的是类别,而模型输出的是连续值,因此我们还需要将预测的分值F_m(x)转换为类别对于采用logloss损失函数的情况:P_i^+ = frac{1}{1+e^{-F_m(x_i)}}, 代表正样本的概率对于采用指数损失函数的情况:P_i^+ = frac{1}{1+e^{-2F_m(x_i)}}, 代表正样本的概率GBDT处理多分类问题 采用一对多的策略,即每个类别分开训练树必须K个类别都训练好了第一棵树,然后再继续训练第二棵树算法步骤:初始化:原文中初始化为0,sklearn中实现的是初始化为数据先验概率(就是各类别的占比)image参考:https://blog.csdn.net/qq_22238533/article/details/79199605Adaboost 和 GBDT 的区别AdaBoost 是通过提升错分数据点的权重来定位模型的不足,AdaBoost 是以指数损失函数为损失函数而 Gradient Boosting 是通过算梯度(gradient)来定位模型的不足Shrinkage
同时GDBT还使用了shrinkage的方法 即每一次训练出 对残差的拟合的回归树的时候,我们再乘上一个系数mu, 意味着每一次我们只学习残差的一小部分 在GBDT的原文中指出,每次一小步一小步的学习有足够的信心比一大步一大步的学习更容易避免过拟合 即Shrinkage仍然以残差作为学习目标,但对于残差学习出来的结果,只累加一小部分(step*残差)逐步逼近目标,step一般都比较小,如0.01~0.001(注意该step 不是 gradient的step),导致各个树的残差是渐变的而不是陡变的。直觉上这也很好理解,不像直接用残差一步修复误差,而是只修复一点点,其实就是把大步切成了很多小步。本质上,Shrinkage为每棵树设置了一个weight,累加时要乘以这个weight,但和Gradient并没有关系。这个weight就是step。就像Adaboost一样,Shrinkage能减少过拟合发生也是经验证明的,目前还没有看到从理论的证明。Bagging方法
基础的 Bagging 方法
核心思想使用自助采样法获得初始训练集中约 63.2% 的样本,如此重复M次采样,获得M个不同的数据集,根据这M个不同的数据集分别训练出M个不同的分类器结合算法由于一共有M个不同的分类器,需要将这M个分类器的结果合并为一个最终的结果 回归问题:采用简单平均法分类问题:采用简单投票法Bagging 不同于 AdaBoost,可以不加修改的应用于回归和多分类任务Bagging主要关注降低方差,因此不易受到样本的扰动随机森林
核心思想在 Bagging方法 的基础上加上了对特征的随机选择,每次训练时先随机选择 k 个特征作为训练的特征,推荐值:log_2d优点因为随机森林加入了对特征的随机选择(随机扰动) + 样本的随机扰动(自助采样法),所以 随机森林的泛化性能比Bagging更好随机森林比Bagging训练效率更加高,因为每次训练的特征更少,需要判断最佳分类特征的时间更短结合策略
平均法 简单平均法加权平均法面对个体学习器性能相差较大时,选用加权平均法, 个体学习器性能相近时选用简单平均法,因为加权平均法要学习的权重更多,更容易过拟合投票法 绝对多数投票法:若某标记得票数超过半数则预测为该标记相对多数投票法:选取得到投票数最多的类别,若多个投票数相同,随机选择一个加权投票法: 与加权平均法相似,权重是分类器的权重,同时要求权重之和为1多样性增强
数据样本扰动输入属性扰动输入表示扰动算法参数扰动第十章 聚类
概念
聚类任务大部分是针对有未知类别(无标记)的数据(当然也可以是含有标签的数据),试图将数据划分为若干个不相交的子集 划分子集的过程可以看做是虚招数据内部分布结构的过程 聚类可以作为单独的学习任务,也可以与其他学习任务一起工作:将聚类好的子集作为数据源支撑逻辑回归预测距离计算
在进行聚类任务的时候,经常会涉及到距离的计算,不同的算法会使用不同的距离度量方式 最常用的是闵可夫斯基距离dist_{mk}(x_i,x_j)=(sum_{u=1}^n{|x_{iu}-x_{ju}|})^{frac{1}{p}} p=2时,就是常见的欧氏距离,p=1时,就是曼哈顿距离 对于连续属性,有序离散属性可以采用上面的公式计算距离,但对于无序离散属性采用VDM距离 VDM_P(a,b)=sum_{i=1}^k{|frac{m_{u,a,i}}{m_{u,a}} - frac{m_{u,b,i}}{m_{u,b}}|}^p 其中,m_{u,a}表示属性u上取值为a的样本的个数,m_{u,a,i}表示在第i个样本簇中在属性u上取值为a的样本的个数原型聚类
算法思想
先对原型进行初始化,然后对原型进行迭代更新求解K均值算法
需要预先指定聚类簇数 K算法步骤需要预先从数据集中选择 K 个样本作为初始均值向量进行初始化对每一个样本对每一个初始均值向量计算距离,将样本划入最近的均值向量代表的簇中划分完毕后重新计算均值向量,重复以上步骤,直到数据所属类别不再变化学习向量量化(LVQ)####
此时LVQ的数据是含有标签的数据高斯混合聚类
具体参考EM算法中在高斯混合模型中的应用密度聚类
假设样本的内部结构可以根据样本分布的紧密程度确定DBSCAN
算法参数邻域距离:epsilon邻域大小:MinPts邻域距离:epsilon- 邻域 包含样本集中与x_j距离不大于epsilon的样本(决定了每一步会划多大的圆) 邻域大小: 作为能够扩展的要求,即epsilon-邻域内必须至少包含MinPts个样本才能成为核心对象,拥有继续扩展的权利(决定了下一步继续扩展的要求)层次聚类
AGNES
采用自底向上的思想,先将每一个样本看做是一个簇,然后合并距离最近的两个簇,直到达到预设的聚类个数 距离的计算有以下三种:如果你还想了解更多这方面的信息,记得收藏关注本站。
【深度学习实践指南:从入门到精通】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
我最近也在学习机器学习,感觉还是蛮难的!
有12位网友表示赞同!
学习机器学习最重要的是理解背后的算法吧?
有5位网友表示赞同!
笔记整理真的很重要,方便回顾和消化知识点。
有16位网友表示赞同!
分享一下你的笔记吗?说不定能互相帮忙!
有5位网友表示赞同!
哪个平台用的笔记软件啊?有推荐的吗?
有16位网友表示赞同!
机器学习的发展越来越快了,需要不断学习新的知识。
有15位网友表示赞同!
记录下遇到的问题和解决方案,后期回顾很有帮助。
有19位网友表示赞同!
对机器学习的应用领域很感兴趣,还有哪些可以探索呢?
有11位网友表示赞同!
学习完这篇文章感觉进步很多!
有18位网友表示赞同!
笔记写得真好,很详细很全面!
有12位网友表示赞同!
有些概念还不太理解,希望能看到更深入的解释。
有20位网友表示赞同!
机器学习真是太神奇了,未来应用前景广泛。
有14位网友表示赞同!
希望有一天我也能实现自己想用机器学习实现的事情!
有9位网友表示赞同!
有没有相关的练习题可以做?
有10位网友表示赞同!
学习机器学习确实需要很多时间和耐心。
有12位网友表示赞同!
笔记整理得很好看,让我更有动力去学习了!
有12位网友表示赞同!
对机器学习的未来发展趋势很期待!
有15位网友表示赞同!
学会机器学习真的很有用吗?
有19位网友表示赞同!
有哪些好的机器学习资源可以推荐吗?
有11位网友表示赞同!