sigmoid 函数:f(z)=11+exp(−z)
二分类:
对数几率:
参数估计:极大似然估计法
多分类问题softmax回归:
线性回归:
f(xi)=wTxi→w∗=argminw∑mi=1(f(xi)−yi)2→w∗=(xTx)−1(xTy)
线性判别分析LDA:
给定数据集,将样本投影到一条直线上,相同类别距离尽可能近,不同类别尽可能远
二分类:
当两类数据同先验、满足高斯分布且协方差相等时,LDA可达到最优分类
多分类:
优缺点:
分析:解决工业规模问题最流行的算法;得到的是一个与每个观测样本相关的概率列表;逻辑回归在时间和内存需求上相当高效。它可以应用于分布式数据,并且还有在线算法实现,用较少的资源处理大型数据;对于数据中小噪声的鲁棒性很好,并且不会受到轻微的多重共线性的特别影响。严重的多重共线性则可以使用逻辑回归结合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)