您的位置:首页 > 其它

机器学习算法整理之Logistic Regression (LR) 逻辑斯谛回归 :分类方法(对数线性模型)

2017-08-14 22:29 239 查看
sigmoid 函数:f(z)=11+exp(−z)

二分类:

P(Y=1|x)=11+exp(−wTx)=exp(wTx)1+exp(wTx)P(Y=0|x)=exp(−wTx)1+exp(−wTx)=11+exp(wTx),w=(w1,w2,⋯,wn,b)

对数几率:

概率p,对数几率:log(p1−p)→log(P(Y=1|x)P(Y=0|x))=wx→对数线性模型

参数估计:极大似然估计法

似然函数:∏i=1mP(Y=1|x))y(i)P(Y=0|x))1−y(i),hw(x(i))=P(Y=1|x)对数似然函数:L(w)=∑i=1my(i)log(hw(x(i)))(1−y(i))log(1−hw(x(i)))梯度:∂L(w)∂wj=∑i=1m(y(i))−hw(x(i))x(i)j

多分类问题softmax回归:

y(i)∈{1,2,⋯,k},P(Y=k|x)=exp(wTjx)1+∑kc=1exp(wTcx)J(w)=−1m∑i=1m∑j=1k1{y(i)=j}log(exp(wTjx(i))∑kc=1exp(wTcx(i)))+λΩ(w)∂J(w)∂wj=−1m∑i=1mx(i)(1{y(i)=j}−exp(wTjx(i))∑kc=1exp(wTcx(i)))+(正则项梯度)

线性回归:

f(xi)=wTxi→w∗=argminw∑mi=1(f(xi)−yi)2→w∗=(xTx)−1(xTy)

线性判别分析LDA:

给定数据集,将样本投影到一条直线上,相同类别距离尽可能近,不同类别尽可能远

二分类:

投影前:μ0,μ1,Σ0,Σ1→投影后:wTμ0,wTμ1,wTΣ0w,wTΣ1w同类样本尽可能近:minwTΣ0w+wTΣ1w;异类样本尽可能远:max∥wTμ0−wTμ1∥22学习目标:maxwJ(w)=∥wTμ0−wTμ1∥22wTΣ0w+wTΣ1w=wT(μ0−μ1)(μ0−μ1)TwwT(Σ0+Σ1)w“类内散度矩阵”:Sw=Σ0+Σ1;“类间散度矩阵”:Sb=(μ0−μ1)(μ0−μ1)TminwJ(w)=wTSbwwTSww→minwTSwws.t.wtSbw=1拉格朗日求解:∂−wTSw+λ(wtSbw−1)∂w=0→Sbw=λSww→S−1wSbw=λwSbw=(μ0−μ1)(μ0−μ1)Tw的方向恒为(μ0−μ1),不妨令Sbw=λ(μ0−μ1)则:w=S−1w(μ0−μ1)实践中通常是对Sw进行奇异值分解Sw=UΣVT得到S−1w=VΣ−1UT

当两类数据同先验、满足高斯分布且协方差相等时,LDA可达到最优分类

多分类:

假定存在N个类,第i类样本数为mi,定义“全局散度矩阵”:St=Sb+Sw=∑i=1m(xi−μ)(xi−μ)T其中Sw=∑i=1NSwi;Swi=∑x∈Xi(xi−μi)(xi−μi)T;则:Sb=St−Sw=∑i=1Nmi(μ−μi)(μ−μi)T优化目标:maxWtr(WTSbW)tr(WTSwW)其中W∈Rd×(N−1),tr(⋅)表示矩阵的迹SbW=λSwW,W的闭式解则是S−1wSb的N−1个最大广义特征值对应的特征向量组成的矩阵

优缺点:

分析:解决工业规模问题最流行的算法;得到的是一个与每个观测样本相关的概率列表;逻辑回归在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据;对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。严重的多重共线性则可以使用逻辑回归结合L2正则化来解决,不过如果要得到一个简约模型,L2正则化并不是最好的选择,因为它建立的模型涵盖了全部的特征; 当你的特征数目很大并且还丢失了大部分数据时,逻辑回归就会表现得力不从心;

优点:

1.适合需要得到一个分类概率的场景

2.实现效率较高

3.对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决;

4.逻辑回归广泛的应用于工业问题上

缺点:

1.当特征空间很大时,逻辑回归的性能不是很好;

2.不能很好地处理大量多类特征或变量;

4.对于非线性特征,需要进行转换;

5.依赖于全部的数据特征,当特征有缺失的时候表现效果不好;

6.可能容易欠拟合,分类精度不高。

应用经验

LR < SVM/GBDT/RandomForest ?

LR能以概率的形式输出结果,而非只是0,1判定

LR的可解释性强,可控度高(你要给老板讲的嘛…)

训练快,feature engineering之后效果赞

因为结果是概率,可以做ranking model

添加feature太简单…

2.关于样本处理

样本量太大怎么办?

离散化后用one-hot编码处理成0,1值

如果要用连续值,注意做scaling

试试spark Mllib

试试采样(注意采样方式:日期 or 用户 or 行为)

注意样本的平衡

对样本分布敏感

下采样(样本量足的情况下),上采样(样本数量不太足)

修改loss function,给不同权重

采样后的predict结果,用作排序OK,用作判定请还原

3.关于特征处理

离散化

映射到高维空间,用linear的LR(快,且兼具更好的分割性)

稀疏化,0,1向量内积乘法运算速度快,计算结果方便存储,容易扩展;

离散化后,给线性模型带来一定的非线性

模型稳定,收敛度高,鲁棒性好

在一定程度上降低了过拟合风险

通过组合特征引入个性化因素

注意特征的频度

区分特征重要度

可以产出层次判定模型


聚类/Hash

增强了极度稀疏的特征表达力

减小了模型,加速运算


4.关于算法调优

假设只看模型

选择合适的正则化(L1, L2, L1+L2)

正则化系数C

收敛的阈值e,迭代轮数

调整loss function给定不同权重

Bagging或其他方式的模型融合

最优化算法选择(‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’)

小样本liblinear,大样本sag,多分类‘newton-cg’和‘lbfgs’(当然你也可以用liblinear和sag的one-vs-rest)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐