感觉狼厂有些把机器学习和数据挖掘神话了,机器学习、数据挖掘的能力其实是有边界的。机器学习、数据挖掘永远是给大公司的业务锦上添花的东西,它可以帮助公司赚更多的钱。可是相比JAVA和C++语言开发来说,机器学习/数据挖掘确实是新一些老人占的坑少一些,而且可以经常接触一些新的东西。还是赶紧再次抓住机会集中的再总结一下吧,不能再拖拖拉拉了。
其实数据挖掘的主要任务是分类、聚类、关联分析、预测、时序模式和偏差分析。本文先系统的介绍一下机器学习中的分类算法,主要目录如下:
文章目录
#常用分类算法
Bayes
贝叶斯分类法是基于贝叶斯定定理的统计学分类方法。它通过预测一个给定的元组属于一个特定类的概率,来进行分类。朴素贝叶斯分类法假定一个属性值在给定类的影响独立于其他属性的 ------ 类条件独立性。
###朴素贝叶斯的优缺点
- 优点
- 所需估计的参数少,对于缺失数据不敏感。
- 缺点
- 假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。
- 需要知道先验概率。
- 分类决策错误率。
###朴素贝叶斯的公式
- 朴素贝叶斯求解:
P ( C ∣ F 1 , . . . , F n ) = p ( C ) p ( F 1 , . . . , F n ∣ C ) p ( F 1 , . . . , F n ) = p ( C ) ∏ i = 1 n p ( F i ∣ C ) P(C|F_1,...,F_n) =\dfrac{p(C)p(F_1,...,F_n|C)}{p(F_1,...,F_n)}\\=p(C)\prod_{i=1}^{n}{p(F_i|C)} P(C∣F1,...,Fn)=p(F1,...,Fn)p(C)p(F1,...,Fn∣C)=p(C)i=1∏np(Fi∣C)
##Decision Tree
决策树是一种简单但广泛使用的分类器,它通过训练数据构建决策树,对未知的数据进行分类。决策树的每个内部节点表示在一个属性上的测试,每个分枝代表该测试的一个输出,而每个树叶结点存放着一个类标号。
在决策树算法中,ID3基于信息增益作为属性选择的度量,C4.5基于信息增益比作为属性选择的度量,CART基于基尼指数作为属性选择的度量。
决策树代码
###决策树的优缺点
- 优点
- 不需要任何领域知识或参数假设。
- 适合高维数据。
- 简单易于理解。
- 短时间内处理大量数据,得到可行且效果较好的结果。
- 缺点
- 对于各类别样本数量不一致数据,信息增益偏向于那些具有更多数值的特征。
- 易于过拟合。
- 忽略属性之间的相关性。
- 不支持在线学习
###决策树公式
- 熵:
E n t r o p y ( S ) = − ∑ p i log p i Entropy(S) = -\sum{p_i\log{p_i}} Entropy(S)=−∑pilogpi - 信息增益:
E n t r o p y ( S , A ) = E n t r o p y ( S ) − ∑ v ∈ V ( A ) ∣ S v ∣ ∣ S ∣ E n t r o p y ( S v ) Entropy(S,A)= Entropy(S)-\sum_{v\in{V(A)}}{\dfrac{|S_v|}{|S|}Entropy(S_v)} Entropy(S,A)=Entropy(S)−v∈V(A)∑∣S∣∣Sv∣Entropy(Sv) - 分裂信息:
S p l i t I n f o R = − ∑ j = 1 k ∣ D j ∣ ∣ D ∣ log 2 ∣ D j ∣ ∣ D ∣ SplitInfo_R= -\sum_{j=1}^k{\dfrac{|D_j|}{|D|}\log_2{\dfrac{|D_j|}{|D|}}} SplitInfoR=−j=1∑k∣D∣∣Dj∣log2∣D∣∣Dj∣ - 增益比率:
G a i n R a t i o ( R ) = G a i n ( R ) S p l i t I n f o R ( D ) GainRatio(R) =\dfrac{Gain(R)}{SplitInfo_R(D)} GainRatio(R)=SplitInfoR(D)Gain(R) - 基尼指数:
G i n i ( S ) = 1 − ∑ i m p i 2 Gini(S) =1 -\sum_i^m{p_i^2} Gini(S)=1−i∑mpi2
##SVM
支持向量机把分类问题转化为寻找分类平面的问题,并通过最大化分类边界点距离分类平面的距离来实现分类。
###支持向量机的优缺点 - 优点
- 可以解决小样本下机器学习的问题。
- 提高泛化性能。
- 可以解决高维、非线性问题。超高维文本分类仍受欢迎。
- 避免神经网络结构选择和局部极小的问题。
- 缺点
- 缺失数据敏感。
- 内存消耗大,难以解释。
- 运行和调差略烦人。
###支持向量机的公式
转自研究者July: SVM的求解,先导出 1 2 ∣ ∣ w ∣ ∣ 2 \dfrac{1}{2}||w||^2 21∣∣w∣∣2,继而引入拉格朗日函数,转化为单一因子对偶变量a的求解。如此求w.b与a的等价,而求a的解法即为SMO。把求分类函数 f ( x ) = ω ∗ x + b f(x)=\omega*x+b f(x)=ω∗x+b的问题转化为求w,b的最优化问题,即凸二次规划问题,妙。
从上图我们可以看出,这条红色的线(超平面)把红色的点和蓝色的点分开了。超平面一边的点对应的y全部是-1,而另外一边全部是1。
接着我们可以令分类函数: f ( x ) = ω T x + b f(x)=\omega^Tx+b f(x)=ωTx+b。显然x是超平面上的点时,f(x)=0。那么我们不妨要求所有满足f(x)<0的点,其对应的y等于-1,而f(x)>0则对应的y=1的数据点。(我盗用了很多图。。。)
回忆之前的目标函数: m a x 1 ∣ ∣ ω ∣ ∣ s . t . , y i ( ω T + b ) ≥ 1 , i = 1 , . . . , n max{\dfrac{1}{||\omega||}} s.t., y_i(\omega^T+b)\geq1, i=1,..., n max∣∣ω∣∣1s.t.,yi(ωT+b)≥1,i=1,...,n这个问题等价于 m a x 1 ∣ ∣ ω ∣ ∣ 2 s . t . , y i ( ω T + b ) ≥ 1 , i = 1 , . . . , n max{\dfrac{1}{||\omega||^2}} s.t., y_i(\omega^T+b)\geq1, i=1,..., n max∣∣ω∣∣21s.t.,yi(ωT+b)≥1,i=1,...,n
很显然这是一个凸优化的问题,更具体的,它是一个二次优化问题—目标函数是二次的,约束条件是线性的。这个问题可以用任何现成的QP(Quadratic Programming)优化包解决。但是因为这个问题的特殊性,我们还可以通过Lagrange Duality变换到对偶变量的优化问题,找到一种更加行之有效的方法求解。首先我们给每一个约束条件加上一个Lagrange mutiplier,我们可以将它们融合到目标函数中去。 L ( ω , b , a ) = 1 2 ∣ ∣ ω ∣ ∣ 2 − ∑ i = 1 n α ( y i ( w T x i + b ) − 1 ) L(\omega,b,a)=\dfrac{1}{2}||\omega||^2-\sum_{i=1}^n{\alpha(y_i(w^Tx_i+b)-1)} L(ω,b,a)=21∣∣ω∣∣2−∑i=1nα(yi(wTxi+b)−1),然后我们令 θ ( ω ) = m a x a i ≥ 0 L ( ω , b , a ) \theta(\omega)=max_{a_i\geq0}L(\omega,b,a) θ(ω)=maxai≥0L(ω,b,a)容易验证,当某个约束条件不满足时,例如 y i ( w T x i + b ) < 1 y_i(w^Tx_i+b)<1 yi(wTxi+b)<1,那么我们显然有 θ ( w ) = ∞ \theta(w)=\infty θ(w)=∞。而当所有约束条件都满足时,则有 θ ( ω ) = 1 2 ∣ ∣ ω ∣ ∣ 2 \theta(\omega)=\dfrac{1}{2}||\omega||^2 θ(ω)=21∣∣ω∣∣2,亦即我们最初要最小化的量。那么我们现在的目标函数就变成了: m i n w , b θ ( ω ) = m i n ω , b m a x a i ≥ 0 L ( ω , b , α ) = p ∗ min_{w,b}{\theta(\omega)}=min_{\omega,b}max_{a_i\geq0}L(\omega,b,\alpha)=p^* minw,bθ(ω)=minω,bmaxai≥0L(ω,b,α)=p∗,并且我们有 d ∗ ≤ p ∗ d^*\leq{p^*} d∗≤p∗,因为最大值中最小的一个一定要大于最小值中最大的一个。总之 p ∗ p^* p∗提供了一个第一个问题的最优值 p ∗ p^* p∗的一个下界。在满足KKT条件时,二者相等,我们可以通过求解第二个问题来求解第一个问题。
先让L关于 ω \omega ω和b最小化,我们分别把L对w和b求偏导:
∂ L ∂ ω = 0 ⟹ ω = ∑ i = 1 n α i y i x i \frac{{\partial}L}{{\partial}\omega}=0 {\Longrightarrow}\omega=\sum_{i=1}^n{\alpha_iy_ix_i} ∂ω∂L=0⟹ω=i=1∑nαiyixi
∂ L ∂ b = 0 ⟹ ∑ i = 1 n α i y i = 0 \frac{{\partial}L}{{\partial}b}=0{\Longrightarrow} \sum_{i=1}^n{\alpha_iy_i}=0 ∂b∂L=0⟹i=1∑nαiyi=0
再带回L得到:
L ( ω , b , a ) = 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j − ∑ i , j = 1 n α i α j y i y j x i T x j − b ∑ i = 1 n α i y i + ∑ i = 1 n α i = ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j L(\omega,b,a)=\dfrac{1}{2}\sum_{i,j=1}^n{\alpha_i\alpha_jy_iy_jx_i^Tx_j-\sum_{i,j=1}^n{\alpha_i\alpha_jy_iy_jx_i^Tx_j}-b\sum_{i=1}^{n}{\alpha_iy_i}}+\sum_{i=1}^n{\alpha_i}\\=\sum_{i=1}^{n}{\alpha_i}-\dfrac{1}{2}\sum_{i,j=1}^n{\alpha_i\alpha_jy_iy_jx_i^Tx_j} L(ω,b,a)=21i,j=1∑nαiαjyiyjxiTxj−i,j=1∑nαiαjyiyjxiTxj−bi=1∑nαiyi+i=1∑nαi=i=1∑nαi−21i,j=1∑nαiαjyiyjxiTxj
此时我们得到关于dual variable α \alpha α的优化问题:
m a x α ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j s . t . , α i ≥ 0 , i = 1 , . . . , n ∑ i = 1 n α i y i = 0 max_{\alpha}\sum_{i=1}^{n}{\alpha_i}-\dfrac{1}{2}\sum_{i,j=1}^n{\alpha_i\alpha_jy_iy_jx_i^Tx_j}\\s.t., \alpha_i\geq0, i=1,...,n \\\sum_{i=1}^{n}{\alpha_iy_i}=0 maxα∑i=1nαi−21∑i,j=1nαiαjyiyjxiTxjs.t.,αi≥0,i=1,...,n∑i=1nαiyi=0
这个问题存在高效的算法,不过求解过程就不在这里介绍了。对于一个数据点进行分类时,我们是把x带入到 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b中,然后根据其正负号来进行类别划分的。把 ω = ∑ i = 1 n α i y i x i \omega=\sum_{i=1}^n{\alpha_iy_ix_i} ω=∑i=1nαiyixi代入到 f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b,我们就可以得到 f ( x ) = ∑ i = 1 n α i y i < x i , x > + b f(x)=\sum_{i=1}^n{\alpha_iy_i<x_i,x>+b} f(x)=∑i=1nαiyi<xi,x>+b,这里的形式的有趣之处在于,对于新点x的检测,只需要计算它与训练数据点的内积即可。
为什么非支持向量的 α \alpha α等于零呢?因为对于非支持向量来说, L ( ω , b , a ) = 1 2 ∣ ∣ ω ∣ ∣ 2 − ∑ i = 1 n α ( y i ( w T x i + b ) − 1 ) L(\omega,b,a)=\dfrac{1}{2}||\omega||^2-\sum_{i=1}^n{\alpha(y_i(w^Tx_i+b)-1)} L(ω,b,a)=21∣∣ω∣∣2−∑i=1nα(yi(wTxi+b)−1)中的, ( y i ( w T x i + b ) − 1 ) (y_i(w^Tx_i+b)-1) (yi(wTxi+b)−1)是大于0的,而且 α i \alpha_i αi又是非负的,为了满足最大化, α i \alpha_i αi必须等于0。悲剧的非支持向量就被无声的秒杀了。。。
##KNN
###K近邻的优缺点
- 优点
- 暂无
- 缺点
- 计算量太大
- 对于样本分类不均衡的问题,会产生误判。
###K近邻的公式
##Logistic Regression
###逻辑回归的优缺点
- 优点
- 速度快。
- 简单易于理解,直接看到各个特征的权重。
- 能容易地更新模型吸收新的数据。
- 如果想要一个概率框架,动态调整分类阀值。
- 缺点
- 特征处理复杂。需要归一化和较多的特征工程。
###逻辑回归的公式
如果是连续的,那么就是多重线性回归;如果是二项分布,就是Logistic回归;如果是Poission分布,就是Poisson回归;如果是负二项分布,那么就是负二项分布。
回归问题常见步骤是:寻找h函数;构造J函数;想办法使得J函数最小并求得回归参数。逻辑回归的h函数为:
h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_\theta(x)=g(\theta^Tx)=\dfrac{1}{1+e^{-{\theta}^Tx}} hθ(x)=g(θTx)=1+e−θTx1
其中 h θ ( x ) h_{\theta}(x) hθ(x)的值表示结果取1的概率。
那么对于输入x的分类结果对于类别1和类别0的概率分别为:
P ( y = 1 ∣ x ; θ ) = h θ ( x ) P(y=1|x;\theta)=h_{\theta}(x) P(y=1∣x;θ)=hθ(x)
P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) P(y=0|x;\theta)=1-h_{\theta}(x) P(y=0∣x;θ)=1−hθ(x)
那么对于构造损失函数J,它们基于最大似然估计推到得到的:
∑ i = 1 n C o s t ( h θ ( x i ) , y i ) = − 1 m [ ∑ i = 1 n y i log h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ] \sum_{i=1}^{n}Cost(h_{\theta}(x_i),y_i)=-\dfrac{1}{m}[\sum_{i=1}^{n}{y_i}\log{h_\theta}(x_i)+(1-y_i)log(1-h_{\theta}(x_i))] ∑i=1nCost(hθ(xi),yi)=−m1[∑i=1nyiloghθ(xi)+(1−yi)log(1−hθ(xi))]
最小化上式,与最大化下式子类似:
P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y P(y|x;\theta)=(h_{\theta}(x))^y(1-h_{\theta}(x))^{1-y} P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
取似然函数:
l ( θ ) = l o g L ( θ ) = ∑ i = 1 n y i ( log h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ) l(\theta)=logL(\theta)=\sum_{i=1}^{n}{y_i}(\log{h_\theta}(x_i)+(1-y_i)log(1-h_{\theta}(x_i))) l(θ)=logL(θ)=∑i=1nyi(loghθ(xi)+(1−yi)log(1−hθ(xi)))
使用梯度上升的方法,求解 θ \theta θ,同样如果把 J ( θ ) J(\theta) J(θ)取为
− 1 m l ( θ ) -\dfrac{1}{m}l(\theta) −m1l(θ),这样通过梯度下降求解梯度最小值。
梯度下降法求最小值:
θ j : = θ j − α σ σ θ i J ( θ ) \theta_j:=\theta_j-\alpha\dfrac{\sigma}{\sigma_{\theta_i}}J(\theta) θj:=θj−ασθiσJ(θ)
代入后得到:
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j \theta_j:=\theta_j-\alpha\dfrac{1}{m}\sum_{i=1}^{m}(h_\theta(x_i)-y_i)x_i^j θj:=θj−αm1∑i=1m(hθ(xi)−yi)xij
然后 θ \theta θ的更新过程如下:
θ j : = θ j − α 1 m x T E \theta_j:=\theta_j-\alpha\dfrac{1}{m}x^TE θj:=θj−αm1xTE
其中E=g(A)-y。
正则化Regularization:
正则化是在经验风线上增加一个正则化项或者惩罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化就越大。
J ( θ ) = 1 2 m ∑ i = 1 n ( h θ ( x i ) − y i ) 2 + λ ∑ j = 1 n θ j 2 J(\theta)=\dfrac{1}{2m}\sum_{i=1}^n(h_{\theta}(x_i)-y_i)^2+\lambda\sum_{j=1}^n{\theta_j^2} J(θ)=2m1i=1∑n(hθ(xi)−yi)2+λj=1∑nθj2
λ \lambda λ是正则项系数。多分类时可以去样本被判定为分类概率最大的那个类。
###逻辑回归的问题
- 过拟合问题
- 减少feature个数
- 规格化
##神经网络
###神经网络的优缺点
- 优点
- 分类准确率高。
- 并行处理能力强。
- 分布式存储和学习能力强。
- 鲁棒性较强,不易受噪声影响。
- 缺点
-
需要大量参数(网络拓扑、阀值、阈值)。
-
结果难以解释。
-
训练时间过长。
###神经网络公式
##深度学习???
#Ensemble learning
集成学习的思路是在对新的实例进行分类的时候,把多个单分类器的结果进行某种组合,来对最终的结果进行分类。
更好的数据往往打败更好的算法,设计好的特征大有脾益。并且如果你有一个庞大的数据集,使用某种特定的算法的性能可能并不要紧。大可以挨个分类器尝试,并且选取最好的一个。(可以多从易用性和性能考虑)
而且从Netfliex Prize的经验教训来看,尝试各类分类器、交叉验证、集成方法往往能取得更好的结果,一般的boosting>bagging>single classifier。集成学习的方法主要有一下三种:- 在样本上做文章,基分类器为同一个分类算法,主要有bagging和boosting。
- 在分类算法上做文章,即用于训练基分类器的样本相同。基分类器的算法不同。
- 在样本属性集上做文章,即在不同的属性上构建分类器,比较出名的是randomforest Tree的算法,这个有weka也有实现。
1998年Jerome Friedman & Trevor Hastie & Robert Tibshirani发表文章Additive Logistic Regression: a Statistical View of Boosting,中提到Bagging是一个纯粹的降低相关度的方法。如果树的节点具有很高的相关性,bagging就会有很好的效果。
##GBDT
回归树类似决策树,使用叶子节点的平均值作为判定的结果。如果不是叶子节点,那么就继续向下寻找。GBDT几乎可用于所有的回归问题,亦可以适用于二分类问题。
GBDT使用新生成的树来拟合之前的树拟合的残差。
##Adaboost
Adaboost目的就是从训练数据中学习一系列的弱分类器或基本分类器,然后将这些弱分类器组合成一个强分类器。
Adaboost的算法流程如下,首先初始化训练数据的权值分布。每个训练样本最开始都被赋予相同的权重:1/N。计算Gm(x)在训练数据集上的误差率em就是被Gm(x)误分类样本的权值之和。计算Gm(x)的系数,am表示Gm(x)在最终分类器中的重要程度。
α m = 1 2 log 1 − e m e m \alpha_m=\dfrac{1}{2}\log{\dfrac{1-e_m}{e_m}} αm=21logem1−em,在 e m < = 1 / 2 e_m<=1/2 em<=1/2时,am>=0,且 a m a_m am随着 e m e_m em的减小而增大。
更新训练数据集的权值分布(目的:得到样本的新权值分布),用于下一轮迭代:
D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , . . . w m + 1 , i . . . , w m + 1 , N ) D_{m+1}=(w_{m+1,1},w_{m+1,2},...w_{m+1,i}..., w_{m+1,N}) Dm+1=(wm+1,1,wm+1,2,...wm+1,i...,wm+1,N),
w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) , i = 1 , 2 , . . . , N w_{m+1,i}=\dfrac{w_mi}{Z_m}exp(-\alpha_my_iG_m(x_i)),i=1,2,...,N wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,...,N
使得被基本分类器 G m ( x ) G_m(x) Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。就这样,通过 Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^{N}w_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=∑i=1Nwmiexp(−αmyiGm(xi)),使得 D m + 1 D_{m+1} Dm+1成为一个概率分布。然后组合各个弱分类器 f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) f(x)=∑m=1MαmGm(x),而得到的最终分类器 G ( x ) = s i g n ( f ( x ) ) = s i g n [ ∑ m = 1 M α m G m ( x ) ] G(x)=sign(f(x))=sign[\sum_{m=1}^M\alpha_mG_m(x)] G(x)=sign(f(x))=sign[∑m=1MαmGm(x)]。
##Random Forest
随机森林指通过多颗决策树联合组成的预测模型,可以对样本或者特征取bagging。
#参考文献
[1]: http://math.stackexchange.com/
[2]: https://github.com/jmcmanus/pagedown-extra “Pagedown Extra”
[3]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference
[4]: http://bramp.github.io/js-sequence-diagrams/
[5]: http://adrai.github.io/flowchart.js/
[6]: https://github.com/benweet/stackedit
[7]: http://www.360doc.com/content/14/1109/12/20290918_423780183.shtml