常见机器学习算法总结

一、概要

根据国际权威的学术组织the IEEE International Conference on Data Mining (ICDM) 2006年12月评选出的数据挖掘领域的十大经典算法:C4.5, K-Means, SVM, Apriori, EM, PageRank, AdaBoost, KNN, Naive Bayes, and CART。本文内容涉及这十大算法中的大部分,主要介绍不同类别的机器学习算法,并尝试比较它们的特点。

二、算法介绍

2.1定义

2.1.1 线性模型与非线性模型分别是什么

线性与非线性的区别并不是能够拟合曲线,而是关注参数是线性还是非线性的,即判别决策的边界是否为直线,参数的线性变化能够导致结果也是线性变化,能否使用直线进行划分。举例:
线性模型:
Y=w0+w1x1+w2x22,Y=w0+w1log(x1)+w2exp(−x22)Y=w_0+w_1x_1+w_2x_2^2,Y=w_0+w_1log(x_1)+w_2exp(-x_2^2)Y=w0+w1x1+w2x22,Y=w0+w1log(x1)+w2exp(x22)都是线性模型,虽然样本的特征是多次的或被log和exp形式化,但每个特征x都只被一个参数w影响。也就是说,在统计意义上,如果一个回归等式是线性的,那么它的相对于参数就必须也是线性的。如果相对于参数是线性,那么即使性对于样本变量的特征是二次方或者多次方,这个回归模型也是线性的。
非线性模型:
Y=θ1x2θ,Y=θ1+(θ2−θ3)exp(−θ4x)Y=\theta_1x^\theta_2,Y=\theta_1+(\theta_2-\theta_3)exp(-\theta_4x)Y=θ1x2θ,Y=θ1+(θ2θ3)exp(θ4x)是非线性的,因为样本的每个特征对应的参数不止一个。
总结:线性模型可以是用曲线拟合样本,但是分类的决策边界一定是直线的,例如逻辑回归。决策边界是直线就是每个特征只能被一个参数限制。

2.2 算法介绍

2.2.1 线性回归

1 Linear Regression,是一个回归算法。其实质就是y^=Wx+b=w0+w1x1+w2x2+...+wnxn\hat{y}=Wx+b=w_0+w_1x_1+w_2x_2+...+w_nx_ny^=Wx+b=w0+w1x1+w2x2+...+wnxn,根据对样本的不同特征xi∈xx_i\in xxix选择不同的权重值wi∈Ww_i \in WwiW和偏置值b来拟合样本数据。根据x的不同使用方式又分为:单变量、多变量和多项式回归。
2 均方误差损失函数:Loss=L(y,y^)=12m∑i=1m(y^,y)2=12m∑i=11[hθ(xi)−yi]2=J(θ)Loss=L(y,\hat{y})=\frac{1}{2m}\sum_{i=1}^m(\hat{y},y)^2=\frac{1}{2m}\sum_{i=1}^1[h_\theta (x^i)-y^i]^2=J(\theta)Loss=L(y,y^)=2m1i=1m(y^,y)2=2m1i=11[hθ(xi)yi]2=J(θ),即最终变为了关于参数集合θ\thetaθ的函数,其中m为样本数目,2是为了方便求导加上去的。
3 为了更快的修正参数拟合数据,使用梯度下降求L的极值:θi:=θi−αddθiJ(θi)\theta_i:=\theta_i-\alpha\frac{d}{d\theta_i}J(\theta_i)θi:=θiαdθidJ(θi),其中α\alphaα为学习率。
4 同时为了避免模型过拟合或欠拟合,正则项加入损失函数,其作用有:1)控制参数变化幅度,惩罚变化大的参数;2)限制参数的搜索空间。
J(θ)=12m∑i=11[hθ(xi)−yi]2+λ∑j=1nθj2J(\theta)=\frac{1}{2m}\sum_{i=1}^1[h_\theta (x^i)-y^i]^2+\lambda\sum_{j=1}^n\theta_j^2J(θ)=2m1i=11[hθ(xi)yi]2+λj=1nθj2。根据正则项的不同,又分为L1正则与L2正则:
1)L1正则,也称为L1范数、Lasso回归(LR中),表示为:
J(θ)=12m∑i=11[hθ(xi)−yi]2+λ∑j=1n∣θj∣J(\theta)=\frac{1}{2m}\sum_{i=1}^1[h_\theta (x^i)-y^i]^2+\lambda\sum_{j=1}^n|\theta_j|J(θ)=2m1i=11[hθ(xi)yi]2+λj=1nθj,即参数向量的各元素之和,其作用是可以产生稀疏的参数向量,也即是一个稀疏模型,可用于特征选择。
2)L2正则,也成为L2范数、Ridge回归(LR中),表示为:
J(θ)=12m∑i=11[hθ(xi)−yi]2+λ(∑j=1nθj2)J(\theta)=\frac{1}{2m}\sum_{i=1}^1[h_\theta (x^i)-y^i]^2+\lambda \sqrt( \sum_{j=1}^n\theta_j^2)J(θ)=2m1i=11[hθ(xi)yi]2+λ(j=1nθj2),即参数向量中个元素的平方和再开平方根,可以防止模型过拟合。

2.2.2 逻辑回归

Logistic Regressin,是一个分类算法。其实质就是通过引入一个sigmoid函数将线性回归得到的实数值映射到概率值[0,1]中表示某个样本属于某个类别的概率。

2.2.3 KNN

K Nearest Neighors,简称KNN。KNN是一个分类算法,通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

2.2.4 K-means

K-means算法是最常用的一种聚类算法。算法的输入为一个样本集(或者称为点集),通过该算法可以将样本进行聚类,具有相似特征的样本聚为一类。
针对每个点,计算这个点距离所有中心点最近的那个中心点,然后将这个点归为这个中心点代表的簇。一次迭代结束之后,针对每个簇类,重新计算中心点,然后针对每个点,重新寻找距离自己最近的中心点。如此循环,直到前后两次迭代的簇类没有变化。

2.2.5 决策树

Decision Tree,简称DT。DT是一个树结构(二叉树或多叉树),它的每个非叶节点表示对一个特征的分类,每个分支代表该特征在某个值域的输出,最终得到的叶子节点表示样本所属的类别。使用决策树算法进行决策的过程就是从根节点开始,根据合适的指标选取某个特征作为非叶节点,并按照它的值选择输出的分支,最终得到叶子节点,叶子节点存放的类别就是最终的决策结果。其中ID3使用信息增益作为特征选择指标,C4.5使用信息增益率作为特征选择指标,CART使用基尼系数作为指标。

(1)分类与回归树

Calssification and Regression Tree,简称CART。其本质是对特征空间进行二元划分(生成的决策树是二叉树),并能够对离散变量和连续变量按照基尼指数进行分裂,最后通过样本落在某个叶子节点进行分类或回归。

2.2.6 朴素贝叶斯

Naive Bayes, 简称NB。NB和其他绝大多数的分类算法都不同。对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数Y=f(X)。但是朴素贝叶斯却是生成方法,也就是直接找出特征输出Y和特征X的联合分布P(X,Y),然后用P(Y|X)=P(X,Y)/P(X)得出。

2.2.7 支持向量机

Support Vector Machine,简称SVM。根据选择核的不同,如线性核、多项式核或高斯核可以处理线性或非线性的数据。

2.2.8 集成学习

集成学习算法
Ensemble Learning,集成学习的思想可以概括为:对于训练集数据,通过训练若干个个体学习器(individual learner),然后通过一定的结合策略形成一个强学习器,以达到博采众长的目的。而集成学习需要解决两个主要的问题:1)如何得到若干个各题学习器,2)选择何种结合策略。并根据解决这两个问题的不同方式,集成学习分为boosting,bagging和stacking三大类。

2.2.8.1 提升方法

Boosting,基于强可学习和弱可学习是等价的,个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成的序列化方法。其实质就是先生成多个弱分类器:f1(x),f2(x),f3(x),fM(x)f_1(x), f_2(x), f_3(x), f_M(x)f1(x),f2(x),f3(x),fM(x),然后将该多个弱分类其转换为强分类器F(x)F(x)F(x),转换方式有多种,最简单的是线性加权:F(x)=∑i=1Mαifi(x)F(x)=\sum_{i=1}^M\alpha_if_i(x)F(x)=i=1Mαifi(x),其中αi\alpha_iαi为第i个分类器的权重。

(1)提升树

Boosting Tree,将Boosting的思想和树进行结合,每个弱分类器表示一棵树模型:F(x)=∑i=1Mgi(x)=∑i=1Mg(x,θi)F(x)=\sum_{i=1}^Mg_i(x)=\sum_{i=1}^Mg(x,\theta_i)F(x)=i=1Mgi(x)=i=1Mg(x,θi),其中θi\theta_iθi表示第i颗树的参数。
按照有监督学习的模式,对于给定的输入xxx,我们的输出是F(x)F(x)F(x),我们希望输入能够较好地近似真实值yyy,也就是让损失函数L(y,F(x))L(y,F(x))L(y,F(x))尽可能小。使用平方损失函数进行展开解释:
模型优化目标函数:min1N∑i=1N(yi−F(xi))2=min1N(y−F(x))2min1\N\sum_{i=1}^N(y_i-F(x_i))^2=min1\N(y-F(x))^2min1Ni=1N(yiF(xi))2=min1N(yF(x))2F(x)F(x)F(x)是包含多个弱学习器的强学习器,训练过程可以展开为:
1)先构造f1(x)f_1(x)f1(x),最小化(y−f1(x))2(y-f_1(x))^2(yf1(x))2
2)接着构造f2(x)f_2(x)f2(x),最小化(y−f1(x)−f2(x))2(y-f_1(x)-f_2(x))^2(yf1(x)f2(x))2

类推至第M个弱学习器(y−f1(x)−f2(x)−...−ft(x)−ft+1(x)−...−fM(x)(y-f_1(x)-f_2(x)-...-f_t(x)-f_{t+1}(x)-...-f_M(x)(yf1(x)f2(x)...ft(x)ft+1(x)...fM(x),可发现当构造第t+1个分类器时,前t个分类器是固定的,也就是说在t+1步,目标函数变为min(y−∑j=1tfj(x)−ft+1(x))2min(y-\sum_{j=1}^tf_j(x)-f_{t+1}(x))^2min(yj=1tfj(x)ft+1(x))2,此时定义一个残差的概念:
r=y−∑j=1tfj(x)r=y-\sum_{j=1}^tf_j(x)r=yj=1tfj(x),表示当前多个弱学习得到的结果与真实值y的误差,而下一个分类器ft+1(x)f_{t+1}(x)ft+1(x)的目标就是尽可能拟合这个残差rrr,使得满足:(y−∑j=1tfj(x)−ft+1(x))2=(r0ft+1(x))2<(y−∑j=1tfj(x))2)(y-\sum_{j=1}^tf_j(x)-f_{t+1}(x))^2=(r0f_{t+1}(x))^2<(y-\sum_{j=1}^tf_j(x))^2)(yj=1tfj(x)ft+1(x))2=(r0ft+1(x))2<(yj=1tfj(x))2)
通过这样的方式,每轮迭代训练后,模型的损失误差就会变小,从而得到梯度提升树算法。

(2)梯度提升树算法

Gradient Boosting Decision Tree,GBDT。针对提升树算法损失函数进行优化:提升树算法的目标函数为L(y,F(x))L(y,F(x))L(y,F(x)),即只要L(y,∑j=1ifj(x)+ft+1(x))L(y,\sum_{j=1}^if_j(x)+f_{t+1}(x))L(y,j=1ifj(x)+ft+1(x))L(y,∑j=1tfj(x))L(y,\sum_{j=1}^tf_j(x))L(y,j=1tfj(x))小即可,同时如果我们选取的损失函数LLL是可到函数时,问题就变得简化了:
训练优化的目标函数变为:max[(L(y,∑j=1tfj(x))−L(y,∑j=1tfj(x)+ft+1(x)))]max[(L(y,\sum_{j=1}^tf_j(x))-L(y,\sum_{j=1}^tf_j(x)+f_{t+1}(x)))]max[(L(y,j=1tfj(x))L(y,j=1tfj(x)+ft+1(x)))],即让新弱学习器降低的模型误差值尽可能大,联系到提升树算法中t+1训练轮次时可将前t次的弱学习器看作常数,该式子可改写为:max[L(y,c)−L(y,c+ft+1(x))]max[L(y,c)-L(y,c+f_{t+1}(x))]max[L(y,c)L(y,c+ft+1(x))],由于损失函数LLL是可导的,将其表示为一阶导数的梯度形式,得到:L(c)+ft+1(x))≃L(c)+L′(c)ft+1(x)=L(c)−L′(x)2L(c)+f_{t+1}(x))\simeq L(c)+L'(c)f_{t+1}(x)=L(c)-L'(x)^2L(c)+ft+1(x))L(c)+L(c)ft+1(x)=L(c)L(x)2,其中ft+1(x)=−1∗L′(x)f_{t+1}(x)=-1*L'(x)ft+1(x)=1L(x),最终我们使用fi+1(x)f_{i+1}(x)fi+1(x)来拟合ft+1(x)=−1∗L′(x)f_{t+1}(x)=-1*L'(x)ft+1(x)=1L(x),即将原来的拟合残差变成了拟合梯度。

(4)AdaBoost

AdaBoost。它首先改变了训练数据的权值,也就是样本的概率分布,其思想是将关注点放在被错误分类的样本上,减小上一轮被正确分类的样本权值,提高那些被错误分类的样本权值。然后,再根据所采用的一些基本机器学习算法进行学习,比如逻辑回归。其次,AdaBoost采用加权多数表决的方法,加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的权重。这个很好理解,正确率高分得好的弱分类器在强分类器中当然应该有较大的发言权。

(3)XGBoost

X Gradient Boosting,XGBoost将GBDT的梯度改为了二阶梯度,也就是牛顿提升树,让模型更快的减小误差值;且在剪枝部分对叶子个数进行惩罚的同时还加入了权重,即对正则项进行了改进。
此外,XGBoost具有支持并行计算、缓存、内存外计算等优势,在工业界广受欢迎。

2.2.8.2 Bagging

bagging中,个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成。同类型的方法还有随机森林(Random Forest)。agging的个体弱学习器的训练集是通过随机采样得到的,然后使用不同的数据训练不同的弱学习器。

2.2.8.3 Stacking

Stacking将训练好的所有基模型对训练基进行预测,第j个基模型对第i个训练样本的预测值将作为新的训练集中第i个样本的第j个特征值,最后基于新的训练集进行训练。同理,预测的过程也要先经过所有基模型的预测形成新的测试集,最后再对测试集进行预测。

三、总结

基于机器学习的算法发展历史已经很久了,因为其模型具有很好的解释性和有效性在工业界广泛使用。但存在的一个问题是需要领域专家进行特征工程,即需要将数据的原始特征处理为有效的特征表示,然后才能喂给模型进行训练,因此有一定的使用门槛。有句话说的是:特征工程决定了模型学习的上限值,而不同的机器学习算法就是逼近这个上限值的程度不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值