一直打算写一下自己学习AI两年以来的笔记却一直拖着,最近被逼急了,就抓紧补一下,另外本篇是对当前流行的机器学习与深度学习算法的基本概念的一些总结与理解,如此总结成知识点结构更有助于学习,之后也会一直修改和补充。
梯度下降法是一个一阶最优化算法,通常也称为最速下降法。
牛顿法:二阶收敛,收敛速度快,是一种迭代算法,每一步都需要求解目标函数的Hession矩阵的逆矩阵,计算比较复杂。
拟牛顿法:是一种以牛顿法为基础设计的,求解非线性方程组或连续的最优化问题函数的零点或极大、极小值的算法。当牛顿法中所要求计算的Hession矩阵难以甚至无法计算时,拟牛顿法便可派上用场。拟牛顿法的本质思想是改善牛顿法每次需要求解复杂的Hession矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hession矩阵的逆,从而简化了运算的复杂度。
拟牛顿法和最速下降法一样只要求每一步迭代时知道目标函数的梯度,通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性,另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法更为有效。
共轭梯度法是介于梯度下降法与牛顿法之间的一个方法,它仅需要一阶导数信息,但克服了梯度下降法收敛的缺点,又避免了牛顿法需要存储和计算Hessian矩阵并求逆的缺点。
常见的判别模型有:K 近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网
络、逻辑斯蒂回归、boosting、条件随机场
常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机
sigmoid 函数是 softmax 函数的二元特例, 其导数均为函数值的 f*(1f)形式, LR 往往是解决二元 0/1 分类问题的, 只是它和线性回归耦合太紧, 不自觉也冠了个回归的名字. 若要求多元分类,就要把 sigmoid 换成大名鼎鼎的 softmax 了。
其次经典线性模型的优化目标函数是最小二乘,而逻辑回归则是似然函数,逻辑回归的模型本质上是一个线性回归模型,逻辑回归都是以线性回归为理论支持的。但线性回归模型无法做到 sigmoid 的非线性形式,sigmoid 可以轻松处理 0/1 分类问题。
为什么要进行归一化,归一化后加快了梯度下降求最优解的速度,归一化有可能提高精度,归一化有三种方式,分别为线性归一化为max或min,标准差标准化,非线性归一化。概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树,rf。而adaboost,svm,lr,knn,kmeans之类的最优化需要归一化。能不归一化最好不归一化,之所以进行数据归一化是因为各维度的量纲不相同。而且需要看情况进行归一化。有些模型在各维度进行了不均匀的伸缩后,最优解与原来不等价如svm需要归一化。有些模型伸缩有与原来等价,如:LR 则不用归一化,但是实际中往往通过迭代求解模型参数,如果
目标函数太扁(想象一下很扁的高斯模型)迭代算法会发生不收敛的情况,所以最坏进行数据归一化。
隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择 。最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部 的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉 。条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。
决策树分为分类与回归,分类的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类,它的结果是离散值。而回归的结果是连续的值 ,当然本质是一样的,都是特征到结果的映射。由于决策树是概率模型,其损失函数的极小化等价于正则化的极大似然估计,所以利用损失函数最小原则进行剪枝就是正则化的极大似然估计。生成部分只是学习局部的模型,而剪枝学习整体的模型。
对于回归树,无法用信息增益ID3,信息增益率C4.5,基尼指数CART来判定树的节点分裂了,需要新的方式评估效果,包括预测误差(常用的有均方误差,对数误差),而且节点不再是类别,是数值,有的是节点内样本均值,有的是最优化算出来的比如xgboost.
集成学习根据各个弱分类器之间有无依赖关系,分为Boosting和Bagging两大流派:
Boosting:各分类器之间有依赖关系,必须串行,如Adaboost,GBDT(gradient boosting decision tree),Xgboost
Bagging:各分类器之间没有依赖关系,可各自并行,如随机森林(random forest)
详细讲解请看这里
它的自适应在于:前一个基本分类器分错的样本会得到加强,加权后的全体样本再次被用来训练下一个基本分类器。同时,在每一轮中加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数。
具体说来,整个Adaboost 迭代算法就3步:
初始化训练数据的权值分布。如果有N个样本,则每一个训练样本最开始时都被赋予相同的权值:1/N。
训练弱分类器。具体训练过程中,如果某个样本点已经被准确地分类,那么在构造下一个训练集中,它的权值就被降低;相反,如果某个样本点没有被准确地分类,那么它的权值就得到提高。然后,权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,#加大分类误差率小的弱分类器的权重,使其在最终的分类函数中起着较大的决定作用,而降低分类误差率大的弱分类器的权重,使其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的权重较大,否则较小。
而另一种Boostint方法GBDT与Adaboost不同,GBDT每一次的计算都是为了减小上一次的残差,进而在残差减少负梯度的方向上建立的一个新模型。
Adaboost算法是模型为加法模型,损失函数为指数函数,学习算法为前向分布算法时的二类分类学习方法。
而提升树则是以决策树为基函数的提升方法。
针对不同问题的提升树学习算法,主要区别在于使用的损失函数不同,包括用平方误差损失函数的回归问题,用指数损失函数的分类问题。
GBDT就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的梯度/残差即预测值与真实值之间的误差,而各个分类器的表现形式是树,GBDT需要将多棵树的得分累加得到最终的预测得分,且每一次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差。
如果样本是高斯分布,则损失函数为均方差损失函数,预测值为选取该结点样本预测值的平均值,如果样本为拉普拉斯分布,则我们选择绝对值损失函数,预测值为结点样本的中位数。
我们须把回归树看成一个函数,这个函数的作用就是根据特征空间向量来进行标签的预测。(基于特征空间推导而不是参数空间)
由于xgboost与gbdt相同,均为不断添加树,不断过行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。
我们假设直线对于坐标 Xi 给出的预测 f(Xi) 是最靠谱的预测,所有纵坐标偏离 f(Xi) 的那些数据点都含有噪音,是噪音使得它们偏离了完美的一条直线,一个合理的假设就是偏离路线越远的概率越小,具体小多少,可以用一个正态分布曲线来模拟,这个分布曲线以直线对 Xi 给出的预测 f(Xi) 为中心,实际纵坐标为 Yi 的点 (Xi, Yi) 发生的概率就正比于 EXP[-(ΔYi)^2]。(EXP(…) 代表以常数 e 为底的多少次方)。
如果你手头有 N 枚硬币,它们是同一个工厂铸出来的,你把每一枚硬币掷出一个结果,然后基于这 N 个结果对这 N 个硬币的 θ (出现正面的比例)进行推理。如果根据最大似然,每个硬币的 θ 不是 1 就是 0 (这个前面提到过的),然而我们又知道每个硬币的 p(θ) 是有一个先验概率的,也许是一个 beta 分布。也就是说,每个硬币的实际投掷结果 Xi 服从以 θ 为中心的正态分布,而 θ 又服从另一个以 Ψ 为中心的 beta 分布。层层因果关系就体现出来了。进而 Ψ 还可能依赖于因果链上更上层的因素,以此类推。
在统计计算中,最大期望 (EM,Expectation–Maximization)算法是在概率(probabilistic)模型中寻找参数最大似然估计的算法,其中概率模型依赖于无法观测的隐藏变量(Latent Variabl)。最大期望经常用在机器学习和计算机视觉的数据集聚(Data Clustering)领域。 通常来说,聚类是一种无指导的机器学习问题,如此问题描述:给你一堆数据点,让你将它们最靠谱地分成一堆一堆的。聚类算法很多,不同的算法适应于不同的问题,这里仅介绍一个基于模型的聚类,该聚类算法对数据点的假设是,这些数据点分别是围绕 K 个核心的 K 个正态分布源所随机生成的,使用 Han JiaWei 的《Data Ming: Concepts and Techniques》中的图: 图中有两个正态分布核心,生成了大致两堆点。我们的聚类算法就是需要根据给出来的那些点,算出这两个正态分布的核心在什么位置,以及分布的参数是多少。这很明显又是一个贝叶斯问题,但这次不同的是,答案是连续的且有无穷多种可能性,更糟的是,只有当我们知道了哪些点属于同一个正态分布圈的时候才能够对这个分布的参数作出靠谱的预测,现在两堆点混在一块我们又不知道哪些点属于第一个正态分布,哪些属于第二个。反过来,只有当我们对分布的参数作出了靠谱的预测时候,才能知道到底哪些点属于第一个分布,那些点属于第二个分布。这就成了一个先有鸡还是先有蛋的问题了。为了解决这个循环依赖,总有一方要先打破僵局,说,不管了,我先随便整一个值出来,看你怎么变,然后我再根据你的变化调整我的变化,然后如此迭代着不断互相推导,最终收敛到一个解。这就是 EM 算法。 EM 的意思是“Expectation-Maximazation”,在这个聚类问题里面,我们是先随便猜一下这两个正态分布的参数:如核心在什么地方,方差是多少。然后计算出每个数据点更可能属于第一个还是第二个正态分布圈,这个是属于 Expectation 一步。有了每个数据点的归属,我们就可以根据属于第一个分布的数据点来重新评估第一个分布的参数(从蛋再回到鸡),这个是 Maximazation 。如此往复,直到参数基本不再发生变化为止。这个迭代收敛过程中的贝叶斯方法在第二步,根据数据点求分布的参数上面。
EM算法即期望最大算法是一种从不完全数据或有数据丢失的数据集(存在隐含变量)中求解概率模型参数的最大似然估计方法。如果将样本看作观察值,潜在类别看作是隐藏变量,那么聚类问题也是参数估计问题,只不过聚类问题中参数分为隐含类别变量和其他参数,这犹如在xy坐标系中找一个曲线的极值 ,然而曲线函数不能直接求导,因此不能用梯度下降方法了,只能交替固定其中一个变量,逐步逼近极值,此时便要考虑收敛性,但感性上其是会收敛的。EM还有硬指定和软指定,软指定看似更为合理,但计算量更大,硬指定在某些场合如K-means中更有实用。
由于EM算法为含有隐含变量的,样本有未知属性,为了使问题简化。我们假设已经知道这个隐含变量了,那么通过最大似然估计来求解分布的参数。然而由于这种假设是没有根据的,我们可以先给分布参数设立初始值,然后求这个隐含变量的期望,之后将其作为隐含变量的已知值,再用最大似然估计来反过来求解分布参数,交替更新,迭代。算法先给分布参数设立初始值,之后设立迭代过程(E步),迭代内容为在已知该次参数情况下,求解含有隐变量(未知但其可用分布参数表示)的期望函数即Q函数,Q函数为隐变量的期望,接下来用其结果作为隐变量的估计值 ,Q函数为最大似然函数的下界函数。M步:求最大期望,即使Q极大化的分布参数,确定下次迭代的参数的估计值。最后设立收敛条件。一般情况下EM算法是收敛的,但不能保收敛到全局最优。EM算法还可以解释为F函数的极大-极大算法,GEM算法的特点是每次迭代增加F函数值,并不一定是极大化F函数,从而增加似然函数值 。
从最大似然到EM算法
混合高斯模型是一个模型,而EM是一种求解参数的概率统计算法框架,一般的,我们可以用EM算法来求解GMM问题。
而混合高斯模型不存在一个显示解析解,一种常规方案是使用迭代方法寻找,像MCMC直到收敛,而这一方式正是著名的EM算法,形成一种递归关系。
从GMM到EM算法
svm核函数包括线性核函数,多项式核函数,高斯核函数(CRF),幂指数核函数,拉普拉斯核函数,ANOVA核函数,二次有理核函数,多元二次核函数,逆多元二次核函数以及sigmoid核函数,傅里叶核。
逻辑斯谛回归与最大熵模型都属于对数线性模型。logistic回归就是一个线性分类模型,之所以和线性回归不同,是由于其将输出的很大范围的数压缩到0-1范围内,呈现的是一个概率形式,意义为被分为正类或负类的概率,所以变为分类问题,而解决此问题,只需在输入加一个logistic函数sigmoid函数(二分类问题)进行非线性映射,即把特征线性求和,然后预测,而在svm中的类概率是样本到边界的距离,(几何距离)。所以logistic regression就是一个被logistic方程归一化后的线性回归。
基于概率的模型损失函数最基本的学习算法是最大似然。然后优化求解,如果存在解析解,则可以用解析方法求解,如果没有解析解,则须用迭代方法如(梯度下降算法)求出数值解。由于梯度下降每次更新回归系数都要遍历整个数据集,计算整个数据集的回归误差,SGD通过一次仅用一个样本点的回归误差来更新回归系数,当需要新数据时,再继续训练,所以它属于在线学习算法,与在线学习相对应,一次处理整个数据叫批处理。
之所以logistic函数的形式是如此形式,请看logistic的反向推导。引入对数几率来做衡量因子,一个事件的几率是指该事件发生的概率与该事件不发生的概率的比值,如果事件发生的概率是p,那么该事件的几率是p/(1-p),该事件的对数几率是log(p/(1-p)),其对数几率等于其特征和,即wx,之后推出p的函数表达式,此时分类为二分类,当拓展为多分类时,二项logistic函数变为多项logistic函数。
逻辑回归跟最大熵模型没有本质区别。逻辑回归是最大熵对应类别为二类时的特殊情况,指数簇分布的最大熵等价于其指数形式的最大似然。
二项式分布的最大熵解等价于二项式指数形式(sigmoid)的最大似然;
多项式分布的最大熵等价于多项式分布指数形式(softmax)的最大似然。
假设分布求解最大熵,引入拉格朗日函数,求偏导数等于0,直接求出的就是sigmoid函数形式。还有很多指数簇分布都有对应的最大似然解。而单个指数簇分布往往表达能力有限,这就需要引入了多个指数簇分布的混合模型,比如高斯混合,从而引出EM算法。
最大熵模型引入特征函数来描述x和y之间的某一个事实,为0-1二值函数,,通过频数统计来表示联合分布,和边缘分布,之后用期望来表示,而联合分布函数可以写成条件概率与x的概率的乘积,而x的概率可以用已有数据用频数来代替,以此等式(方程组因为其中x和y的组合有无数多种,这些组合均要成立,为在后面最优化求解过程中利用拉格朗日乘数法求解的所有约束条件)作为约束条件,因为(只要使条件概率最大,便使置信度最大,)。之后用条件熵来作为衡量因子来确保概率模型的稳定,(当然也是因为条件概率即我们要求的,其越大越好),之后为约束最优化问题,一般都要用到拉格朗日乘数法与对偶问题,最里一层的对偶方程的解为包含参数向量的解,之后进入外层求解,利用普通解析方法求解后算出参数向量后再代入里层对偶方程即可解出要求的条件概率丛。
由于其对偶函数与似然函数等价,于是证明了最大熵模型学习中的对偶函数极大化等价于最大熵模型的极大似然估计这一事实(虽然我没看出其如何在分析上等价,但其意义理应等价)。其与logistic regression称为对数线性模型 log linear modeal,模型学习是在给定的数据上对模型进行极大似然估计或正则化的极大似然估计。而改进的迭代尺度法是一种最大熵模型学习的最优化算法。想法是假设初始参数向量,为了更新参数向量,通过探讨其与其邻近点的函数差来做迭代,类似于梯度下降,之后利用jesson不等式,找两次下界,最后通过普通优化算法求解其下界,逐步寻找其最优解。
在此与EM算法的推导殊途同归,均利用似然函数的差值作为要更新的目标函数,之后利用Jessson不等式,建立下界,之后极大化下界函数,逼近最优解(当然也有不同,EM须交替更新(指Q函数 )。
详细讲解点击这里
为了准确的估计随机变量的状态,一般要最大熵,认为在所有可能的概率模型中,熵最大的模型为最好的模型,即在已知知识的前提下,关于未知分布最合理的推断是符合已知知识最不确定或最随机的推断,承认已知事物,且对未知事物无偏见,不做任何假设。实践经验和理论计算都告诉我们,在完全无约束状态下,均匀分布等价于熵最大(有约束的情况下,不一定是概率相等的均匀分布。 比如,给定均值和方差,熵最大的分布就变成了正态分布 )。
最大熵的解同时是最符合样本数据分布的解,进一步明了最大熵模型的合理性,与极大似然对比,熵是表示不确定性的度量,似然表示的是与知识的吻合程序,进一步,最大熵模型是对不确定度的无偏颁配,极大似然估计是对已知条件的 无偏理解。与logistic回归相同,均为通过拉格朗日函数求解后无法求得解析解,须用数值方法迭代求解。
尽管看来协方差矩阵貌似很简单,可它却是很多领域里的非常有力的工具。它能导出一个变换矩阵,这个矩阵能使数据完全去相关(decorrelation)。从不同的角度看,也就是说能够找出一组最佳的基以紧凑的方式来表达数据。这个方法在统计学中被称为主成分分析(principal components analysis,简称PCA),在图像处理中称为Karhunen-Loève 变换(KL-变换)。
根据wikipedia上的介绍,主成分分析PCA由卡尔·皮尔逊于1901年发明,用于分析数据及建立数理模型。其方法主要是通过对协方差矩阵进行特征分解,以得出数据的主成分(即特征矢量)与它们的权值(即特征值)。PCA是最简单的以特征量分析多元统计分布的方法。其结果可以理解为对原数据中的方差做出解释:哪一个方向上的数据值对方差的影响最大。然为何要使得变换后的数据有着最大的方差呢?我们知道,方差的大小描述的是一个变量的信息量,我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但是对于我们用于机器学习的数据(主要是训练数据),方差大才有意义,不然输入的数据都是同一个点,那方差就为0了,这样输入的多个数据就等同于一个数据了。简而言之,主成分分析PCA,留下主成分,剔除噪音,是一种降维方法,限高斯分布,n维眏射到k维, 减均值,求特征协方差矩阵,求协方差的特征值和特征向量,取最大的k个特征值所对应的特征向量组成特征向量矩阵,
投影数据=原始样本矩阵x特征向量矩阵。其依据为最大方差,最小平方误差或坐标轴相关度理论,及矩阵奇异值分解SVD(即SVD给PCA提供了另一种解释)。也就是说,高斯是0均值,其方差定义了信噪比,所以PCA是在对角化低维表示的协方差矩阵,故某一个角度而言,只需要理解方差、均值和协方差的物理意义,PCA就很清晰了。
再换言之,PCA提供了一种降低数据维度的有效办法;如果分析者在原数据中除掉最小的特征值所对应的成分,那么所得的低维度数据必定是最优化的(也即这样降低维度必定是失去讯息最少的方法)。主成分分析在分析复杂数据时尤为有用,比如人脸识别。
对K值选取,其会对K近邻算法的结果产生重大影响。
如果选择较小的K值,相当于用较小的邻域的训练实例进行预测,学习近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,而同时的问题是学习的估计误差会增大,K值的减小就意味着整体的模型变得复杂,容易发生过拟合。如果选择较大的K值,可以减小学习的估计误差,而近似误差会增大,K值增大意味着整体的模型变得简单。实际应用中,K值一般取一个比较上的数值,例如交叉验证法,一部分样本做训练集,一部分做测试集,来选择最优的K值 。关于kd树的搜索,利用kd树可以省去对大部分点的搜索,从而减少搜索的计算量。这里以最近邻为例加以叙述,同样的方法可以应用到k近邻。给定一个目标点,搜索其最近邻,首先找到包含目标点的叶结点,然后从该结点出发,依次回退到父结点,不断查找与目标点最近邻的结点,当确定不可能存在更近的结点时终止,这样搜索就被限制在空间的局部区域上,效率提高。包含目标点的叶结点对应包含目标点的最小超矩形区域,以此叶结点的实例点作为当前最近点,目标点的最近邻一定在以目标点为中心并通过当前最近点的超球体的内部,然后返回当前前结点的父结点,如果父结点的另一个子结点的超矩形区域与超球体相交,那么在相交的区域内寻找与目标点更近的实例点,如果存在这样的点,将此点作为新的当前最近点,算法找到更上一级的父结点,继续上述过程,如查父结点的另一子结点的超矩形区域与超球体不相交,或不存在比当前最近点更近的点,则停止搜索。
kd树更适用训练实例数远大于空间维数时的k近邻搜索。当空间维数接近于训练实例数时,它的效率会迅速下降,几乎接近线性扫描。
k近邻三要素:距离度量,k值的选择和分类决策规则。常用的分类决策规则是多数表决,对应于经验风险最小化。
笔记持续更新中、、、