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

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)

对数几率:

plog(p1p)log(P(Y=1|x)P(Y=0|x))=wx线

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

i=1mP(Y=1|x))y(i)P(Y=0|x))1y(i),hw(x(i))=P(Y=1|x)L(w)=i=1my(i)log(hw(x(i)))(1y(i))log(1hw(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)=1mi=1mj=1k1{y(i)=j}log(exp(wTjx(i))kc=1exp(wTcx(i)))+λΩ(w)J(w)wj=1mi=1mx(i)(1{y(i)=j}exp(wTjx(i))kc=1exp(wTcx(i)))+()

线性回归:

f(xi)=wTxiw=argminwmi=1(f(xi)yi)2w=(xTx)1(xTy)

线性判别分析LDA:

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

二分类:

μ0,μ1,Σ0,Σ1:wTμ0,wTμ1,wTΣ0w,wTΣ1wminwTΣ0w+wTΣ1wmaxwTμ0wTμ122maxwJ(w)=wTμ0wTμ122wTΣ0w+wTΣ1w=wT(μ0μ1)(μ0μ1)TwwT(Σ0+Σ1)wSw=Σ0+Σ1;Sb=(μ0μ1)(μ0μ1)TminwJ(w)=wTSbwwTSwwminwTSwws.t.wtSbw=1wTSw+λ(wtSbw1)w=0Sbw=λSwwS1wSbw=λwSbw=(μ0μ1)(μ0μ1)Tw(μ0μ1)Sbw=λ(μ0μ1)w=S1w(μ0μ1)SwSw=UΣVTS1w=VΣ1UT

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

多分类:

NimiSt=Sb+Sw=i=1m(xiμ)(xiμ)TSw=i=1NSwi;Swi=xXi(xiμi)(xiμi)T;Sb=StSw=i=1Nmi(μμi)(μμi)TmaxWtr(WTSbW)tr(WTSwW)WRd×(N1),tr()SbW=λSwW,WS1wSbN1广

优缺点:

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

优点:

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

2.实现效率较高

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

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

缺点:

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

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

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

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

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

应用经验

  1. LR < SVM/GBDT/RandomForest ?

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

  3. LR的可解释性强,可控度高(你要给老板讲的嘛…)
  4. 训练快,feature engineering之后效果赞
  5. 因为结果是概率,可以做ranking model
  6. 添加feature太简单…

2.关于样本处理

样本量太大怎么办?

  1. 离散化后用one-hot编码处理成0,1值
  2. 如果要用连续值,注意做scaling
  3. 试试spark Mllib
  4. 试试采样(注意采样方式:日期 or 用户 or 行为)

注意样本的平衡

  1. 对样本分布敏感
  2. 下采样(样本量足的情况下),上采样(样本数量不太足)
  3. 修改loss function,给不同权重
  4. 采样后的predict结果,用作排序OK,用作判定请还原

3.关于特征处理

离散化

  1. 映射到高维空间,用linear的LR(快,且兼具更好的分割性)
  2. 稀疏化,0,1向量内积乘法运算速度快,计算结果方便存储,容易扩展;
  3. 离散化后,给线性模型带来一定的非线性
  4. 模型稳定,收敛度高,鲁棒性好
  5. 在一定程度上降低了过拟合风险

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

注意特征的频度

区分特征重要度

可以产出层次判定模型

聚类/Hash

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

减小了模型,加速运算

4.关于算法调优

假设只看模型

  1. 选择合适的正则化(L1, L2, L1+L2)
  2. 正则化系数C
  3. 收敛的阈值e,迭代轮数
  4. 调整loss function给定不同权重
  5. Bagging或其他方式的模型融合
  6. 最优化算法选择(‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’)
  7. 小样本liblinear,大样本sag,多分类‘newton-cg’和‘lbfgs’(当然你也可以用liblinear和sag的one-vs-rest)

你可能感兴趣的:(机器学习)