机器学习算法概述

更新时间:2024-04-06 14:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目录

键入章标题(第 1 级) ...................................................................................................................... 1

键入章标题(第 2 级) .............................................................................................................. 2

键入章标题(第 3 级) ...................................................................................................... 3

键入章标题(第 1 级) ...................................................................................................................... 4

键入章标题(第 2 级) .............................................................................................................. 5

键入章标题(第 3 级) ...................................................................................................... 6

决策树:

分类树(熵)

ID3:ID3算法是一种贪心算法,用来构造决策树。ID3算法以信息熵的下降速度为选取测试属性的标准,即对当前结点,计算各个特征对这个节点划分后的信息增益,选取还尚未被用来划分的而且具有信息增益最大的属性作为划分特征。从根节点一直进行这个过程,直到生成的决策树能完美分类训练样例。(gini系数,误分类率等不纯度表示)

信息增益的计算方法:比如计算一个特征A对数据集D的特征,A的取值有A1,A2,A3,对应数据集D1,D2,D3。计算D1,D2,D3的信息熵,

C4.5:C4.5是在ID3基础上改进的一种算法。改用信息增益比来选择属性(A对D的信息增益/D的信息熵),

过拟合,剪枝:先剪枝和后剪枝。限制深度,限制最小划分节点,限制最小叶子节点包含记录的数目。损失函数 =不纯度 + λ节点个数

分类回归树CART(Gini指数):

最小二乘回归树:递归的将输出空间划分为两个区域,并确定一个区域上的输出值。 划分方式:选择当前区域上最佳切分变量和最佳切分点从而分成两个区域,分别确定两个区域输出值(一般取均值),重复此过程构建一个决策树。除了根结点,每个结点对应一个输出,也对应一个权值,预测时,从根节点到叶结点以此判断测试记录属于哪个分支,把它经过的每个节点的权重乘以该点输出加起来求和。

CART保证生成二叉树(对特征A,CART以A=a和A≠a分成两类,而ID3中特征的每个取值算一类,从而分成多类),cart剪枝是后剪枝通过把子树叶子结点的个数加上预测误差作为子树的损失函数。

随机森林:

随机的方式建立一个森林,森林里含有很多决策树组成,森林的每一颗树之间都是没有关联的。建立过程:首先要进行行采样和列采样,行采样采用随机有放回方式抽取。列采样是从全部特征中抽取一部分。然后使用完全分裂的方式建立一棵决策树,这里不进行剪枝,因为随机特性使RF不容易过拟合。RF得到的每一颗树都是很弱的,但是组合起来就很厉害了。

优点:简洁高效;可处理高维数据,无需特征选择;训练完成后可以给出哪些特征重要;很容易并行实现

提升树:参见boosting

逻辑斯蒂回归:

wx?b二分类公式:P(Y?1|x)?e P(Y?0|x)?wx?b1?e1,虽然写的是概率P,但绝不

wx?b1?e是概率(有些书上写的是概率),只是P越大概率越大。只用于线性回归,SVM能支持非线性是因为核函数,LR不能引入核函数。

有P(Y=1|x)的对数几率等于wx。

写似然函数的时候可以当成概率写。极大似然估计,似然函数,对数似然函数,求导数求极大,梯度下降或者拟牛顿法。具体如下:

朴素贝叶斯:

朴素贝叶斯中贝叶斯指基于贝叶斯定理,朴素指的是条件独立性假设(较强的假设,但是大大降低参数数目,否则估计参数几乎不可能)。

该模型通过训练集来学习一个联合概率分布f(x,y),具体的说:训练集→条件概率分布P(X|Y)和类别Y的分布P(Y=Ck)→相乘联合概率分布P(X,Y)。

举个例子:给定一个测试例子x,求它的类别,朴素贝叶斯求x属于每一类的概率,然后取概率最大的那一类。比如求c1的概率:P(Y=c1|X=x)=P(X=x|Y=c1) *P(Y=c1),再

?P(X=x|Y=c) *P(Y=c)iii求x属于c2,c3....的概率,取概率最大那一类。

贝叶斯估计:

朴素贝叶斯模型中,用极大似然估计可能会产生概率为0的情况,比如某个测试数据的一个特征取值在训练集上没有出现过。用贝叶斯估计可以解决这个问题,它等价于对随机变量各个取值的频数上都加上一个正数λ,λ=1时称为拉普拉斯平滑。

k近邻算法:

基本思想:

K近邻通过查找最近的k个点来确定当前样例的输出。有普通k近邻和加权k近邻可选。k近邻模型有三个要素吧:①距离度量(LP距离,P=2即欧式距离,文本用cos距离)②k值选取:k值小易过拟合,对临近点非常敏感。k值大,可减小估计误差,但是方差变大。③分类决策规则是多数表决,(训练决策树时候,叶节点不纯也用多数表决)。

kd树构造算法:

k近邻要考虑如何快速的搜索k个点,每次遍历数据集的方法效率很低,构建kd树可以大幅度提高速度。假定给出N个数据,m个特征,首先,先用第一个特征m1为根节点划分特征,计算N个m1的中位数,构建左右两个子节点,左节点对应小于m1的子区域,右结点对应大于m1的子区域。按照同样的方法,递归的对每个子节点构造,特征可以按序循环使用,直到两个子区域没有点(对的,就是没有点了)。

Kd树搜索算法:

总的过程是从顶向下再从底向上,对于一个输入x,从根节点递归向下访问kd树,如果当前特征小于切分点,则移动到左子节点,否则移动到右子节点,直到到达叶子结点。以此叶节点为当前最近结点,递归向上回退。后面比较复杂

支持向量机:

支持向量机是一种二分类模型,定义在特征空间上的线性分类器,间隔最大化的策略使它和感知机不同,如果应用核技巧,SVM实际上可以处理非线性分类(二维上线性不可分的映射到三维有可能是线性可分)。线性可分SVM→硬间隔最大化,线性SVM→软间隔最大化,非线性SVM箭头核技巧及软间隔最大化。

对于线性可分的数据,感知机对于不同的初始参数,得到的结果也不完全相同,因为分隔超平面不唯一。SVM要求间隔最大化,因此解是唯一的。

函数间隔:ri=yi(wxi+b),它的正负可以表示分类正确性,绝对值大小可以表示确信度,但是w和b整体扩大几倍,分隔超平面不变但函数间隔变了,所以我们可以限制|w|=1,函数间隔除以|w|得到几何间隔。

SVM是一个有约束的凸二次规划问题,可以通过拉格朗日对偶性变换到对偶变量的优化问题,即通过求解对偶问题得到原问题的最优解,这样做的原因是:1.对偶问题更容易求解。2.自然的引入核函数。KKT条件(有优化解得充要条件)。

线性SVM,软间隔最大化

Boosting方法:

Boosting来源于两位科学家对强可学习和弱可学习的研究,这两种学习被证明是等价的,也就是说弱可学习算法可以被提升为强可学习算法,Boosting是一种提升任意给定学习算法分类准确度的方法,大多提升方法都是改变训练数据的概率分布,针对不同分布来调用若学习算法学习一系列弱分类器。

AdaBoost

是一种代表性算法:关于如何改变概率分布,AdaBoost的做法是:提高被前一轮弱分类器分类错误的样本,从而在后续训练中受到更大关注。关于如何组合弱分类器,AdaBoost的做法是:加权多数表决,权值跟误差率e相关,e越小权越大。该算法中:模型是加法模型,损失函数是指数损失,算法是前向分布算法的一个实现

算法过程:1.初始训练数据分布为均匀分布。 2.使用当前权值进行训练,得到一个基本分类器Gm。 3.计算Gm的分类误差率。 4.计算Gm的系数(加权表决时用),更新数据分布(提升错误分类的样本的权值,再归一化)。

5.迭代多次直到终止条件。 6.由基本分类器的线性组合构造得到最终分类器。

提升树(boostingtree):

采用加法模型与前向分布算法,以决策树为基函数的提升方法称为提升树。是一种使用树模型的Adaboost方法。

回归问题提升树GBDT:二叉回归树,平方损失,每一步都是拟合当前模型的残差,求最优切变量和切分点,用该点将数据集一分为二,各部分以均值作为当前预测值,求每条数据的残差,下一步拟合该残差。在回归树训练算法梯度提升算法中,关键是利用损失函数的负梯度在当前模型的值作为残差的估计(和BP算法中的残差差不多)。

分类问题提升树:二叉分类树,指数损失,简单的把adaboost算法中基本分类器设置为二叉分类树即可。

EM算法及其推广

EM(期望极大)算法;

它用于含隐变量的概率模型的参数的极大似然估计(隐马尔科夫和高斯混合模型,Kmeans是一种EM算法),当模型含有隐变量时候,直接用极大似然估计是得不到解析解的(我认为是本身存在多种解),EM算法迭代逐步近似极大化损失函数,最后得到一组数值解。

Kmeans算法:

本质上是一种EM算法。E步求期望,即为每一类求平均得到当前的k个中心;M步求极大,为每个点选择最可能的那个中心。

通用EM算法:

KNN

KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比(组合函数)。KNN用于回归和局部加权线性回归有点像。区别在于KNN选取K个点,局部加权线性回归取全部点。

梯度下降

梯度下降(最速下降)是求解无约束最优化问题的常用方法,实现简单,迭代计算,每一步需要求解目标函数的梯度向量。每一步以负梯度方向走一个步长来更新参数w的值,以减小函数值,达到梯度为0即停止。当目标函数是凸函数,梯度下降的解是最优的,一般情况下,其解不保证是全局最优的。梯度下降的收敛速度也未必是很快的。

梯度下降公式(批量随机下降):循环直到收敛

Mini-bat-GD,每次选用一批训练集做梯度下降(而不是整个训练集,上式中用从1到m整个训练集更新参数)

随机梯度下降(SGD):每次用一个数据更新,适用于数据量非常大的情况下,这时使

用一部分数据就可以达到最优。可能会在最优解附近震荡,但是已经非常接近了。

SGD是非常优美的,但是实际测试中,由于我的数据量不是很大,使用mini-bat-GD和SGD都变慢了,原因在于一般随机下降可以用矩阵表示,矩阵计算在python下运行的非常快,整体运算耗时不到分批梯度下降的一半(数据量相同)。经过优化的矢量运算非常快,例如在python中,矢量化求和sum()比for循环快60多倍。

牛顿法和拟牛顿法

牛顿法同GD一样,是一种求解无约束最优化问题的一种常用方法,收敛快(求二次梯度),但计算复杂(求目标函数的海赛矩阵的逆矩阵),拟牛顿法是一种改进,通过正定矩阵近似海赛矩阵简化了计算过程。 推到梯度下降用的是一阶导数,仅考虑梯度,牛顿法则用二阶导数(相当于用二次曲面逼近当前曲面),考虑了梯度的梯度。梯度下降在远离极小值得地方下降很快,但是在接近极小值的地方下降很慢。牛顿法在远离极小点甚至可能不会收敛。

生成模型和判别模型

有监督机器学习方法可以分为生成方法和判别方法。直接学习P(y|x)的模型是判别模型,学习P(x,y)的模型是生成模型。生成:朴素贝叶斯和隐马尔科夫模型。判别:KNN,决策树,逻辑斯蒂回归,SVM,提升方法等等。

判别模型,节省计算资源。直接面对预测,学习决策函数,实际中准确率更高。可以对数据进行一定程度的抽象,比如PCA降维,因此可以简化学习问题。

生成模型,可以根据联合分布生成采样数据,收敛速度更快,当样本数据增大时可用更快地收敛到真实模型。可以处理含隐变量的模型。

bias(偏差)和variance(方差)

采用交叉验证的时候,K值较大,用于验证的数据较小,所以偏差小,方差大 。反之则偏差小,方差大。偏差(Bias)指的是模型在样本数据上输出和真实值得误差,即模型精确度。方差(variance)是模型每一次输出和模型期望之间的误差,即模型稳定性。 实际系统中,偏差和方差往往不可兼得。如果要降低模型的Bias,就会一定程度上提升Variance。其本质的原因是,我们试图去用有限的训练样本去估计无限的真实数据。当我们更加相信数据的真实性,而忽略对模型的先验知识,就会尽量保证模型在训练样本上的准确度,这样可以减少模型的Bias。但是,这样学习到的模型缺乏一定的范化能力,容易造成过拟合,降低模型在真实数据上的表现。相反,如果更加相信我们对模型的先验知识(也就是限制模型的复杂度),就可以降低模型的Variance,提高其稳定性,但也会使Bias变大。Bias

和Variance的平衡是机器学习基本主题之一,由此产生了交叉验证。

L1和L2正则化

防止模型复杂化的典型方法是正则化,正则化是结构风险最小化策略的实现,他是在经验风险最小化的基础上加上一个正则化项,正则化项是模型复杂度的单调递增函数。常见的是正则化项取模型参数向量的范数。

L0范数,就是向量中非零元的数目,用L0范数表示我们希望向量w出现很多0。 L1范数,向量中各个权值的绝对值之和,与L0相似,L1范数也希望向量中出现更多0。 L2范数,也称岭回归,它是向量各分量平方和再求平方根,L2范数希望各参数都取较小的值,使各元素都取值接近0。

L0和L1特点比较:L1范数和L0范数都可以实现稀疏,L0求解是一个NP难问题,L1范数更容易求解,而且L0范数数L1的一个最优凸近似,因此L1被广泛应用。模型采用L1范数很容易理解,非零元对应的特征是重要特征,这些特征与label信息相关性很大。

L1和L2特点比较:L2趋向于取小参数有两种不同角度的解释:1.参数太大会影响模型的稳定性,一个很小的扰动可能产生一个很大的函数值变化,抗干扰能力差。2.每一项系数小,表明模型上每个点处的导数也小,模型曲线变化率小也就是模型更简单。

监督学习

如果你在机器学习浴血奋战多年,你会发现,哎哟哟,机器学习的大部分带参模型都和这个不但形似,而且神似。是的,其实大部分无非就是变换这两项而已。对于第一项Loss函数,如果是Square loss,那就是最小二乘了;如果是Hinge Loss,那就是著名的SVM了;如果是exp-Loss,那就是牛逼的 Boosting了;如果是log-Loss,那就是Logistic Regression

了;还有等等。不同的loss函数,具有不同的拟合特性,这个也得就具体问题具体分析的。但这里,我们先不究loss函数的问题,我们把目光转向“规则项Ω(w)”

模型→策略(即模型参数选择的准则,确定损失函数)→算法(求解最优化模型的算法)

分类可以用于回归(一部分可以 比如分类回归树CART),回归可以用于分类(如logistics回归),连续变量预测称为回归,类别预测称为分类。

奇异值分解(SVD,主题模型)和主成分分析(PCA)

过拟合

过拟合问题解决方法有:Earlystopping,数据集扩增,正则化,Dropout。(树形模型还有限制深度,限制叶节点个数的方式)

1. Early stoppin:g对模型训练的过程是对模型参数更新的过程,大多数学习算法都用

迭代的方式求解,比如梯度下降,Boost方法等等,Earlystopping采用迭代次数截断的方式来防止过拟合。具体的做法是:没迭代一轮或几轮后,计算模型在验证集上的误差(或准确率),当模型的性能不再提升的时候,就停止训练。实际中,一般设置迭代10,20轮后模型性能不提升就停止了。

2. 数据集扩增:“有时候拥有更多的数据往往胜过一个好的模型”。从数据源头采集

更多数据。复制原有数据并加上随机噪声。重采样。根据当前数据集估计数据分布参数,使用该分布产生更多数据。 3. 正则化方法,见前文

4. Dropout:仅对于神经网络。在训练开始时,随机删除一些(可以设定为一半,也

可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,训练神经网络的参数。下一轮继续重复上述操作,

KL散度

物理意思:KL散度是用来度量使用基于Q的编码来编码P的样本时候,所需额外的比特个数。它是非对称的D(P||Q) ≠ D(Q||P),数学上,它是描述两个分布P和Q差异我的一种方法。

本文来源:https://www.bwwdw.com/article/o3wr.html

Top