一、线性回归
1.1 定义与定义引入
(一)什么是线性回归呢?
- 有监督学习
- 输出/预测的结果yi为连续值变量
- 需要学习映射f:x->y
- 假定输入x和输出y之间有线性相关关系
(二)举一个例子(单一变量):
(三)多变量的情况
1.2 损失函数
(一)我们要找到最好的权重/参数
(二)怎样去衡量“最好”?
我们把x到y的映射函数f记做θ的函数
定义损失函数为:
(三)最小化损失函数
下图中的右图为随着θ1变化,损失值的变化,呈现抛物线形状:
(四)在θ0和θ1存在的情况下会形成抛物面,最主要的是找到最低点
1.3 梯度下降
(一)逐步最小化损失函数的过程
(二)如同下山,找准方向(斜率),每次迈进一小步,直至山底
α是学习率,由于偏导求解后区分正负号,所以会自动实现正负加减。
在应用中,一般可以设置一个阈值,以此为限进行求解。
(三)对于有两个参数θ0和θ1存在的情况下会形成抛物面:
(四)假如现在有n个特征/变量x(x1,x2,x3......)
(五)学习率α
学习率太小——收敛会很慢,会影响学习效率。
学习率太大——“由这山入那山”,可能会形成左右振荡的情况,可能会无法到达最低点。
一般情况下会将α定为一个相对比较小的值,但不能太小,0.01,0.005比较常见。
1.4 过/欠拟合与正则化
(一)回归与欠/过拟合
如果我们有特别多的特征 , 我们的假设函数曲线可以对原始数据拟合得非常好( ( ), 但丧失了一般性 , 从而导致对新给的待预测样本 , 预测效果差 。
最左边的图中,使用直线,无论如何调整都无法进行相对正确和完整的拟合,所以这个模型并不好;中间的图是一种抛物线的形状,这个时候我们发现,这条曲线比较光滑,虽然不一定可以穿过每一个样本点,但是基本符合;最右边的图,给的参量太多了,波动过大,没有稳定性,不适合进行大量数据的拟合。
因此最左边的称为“欠拟合”,最右边的称为“过拟合”。
(二)正则化
二、逻辑回归
2.1 定义与问题引入
(一)逻辑(斯特)回归
有时候需要解决分类问题。
线性回归+阈值?
以得肿瘤的为例:
但是当加入3个新的样本点时候,就会受噪声影响比较大:
(二)本身是对离散值的预测,为什么要叫回归?
为了解决以上的问题(噪声影响)希望可以将以上模型映射到(0,1)的概率上,进行概率测算
使用一个函数sigmoid
当x=0是,y=0.5,即一半的概率
(三)判定边界
①判定边界的三种类别:
逻辑回归就是在寻找判定边界。
②线性判定边界:
③非线性判定边界:
2.2 损失函数
(一)在逻辑(斯特)回归中,不可以使用如下的损失函数,否则会形成一个跳动式的曲线,形成一个非凸的函数:
而我们在处理模型的时候期望的损失函数应该类似于这个样子:
(二) 通过进一步探索,得出了新的损失函数:
2.3 梯度下降与正则化及实例
使用梯度下降求解:
三、工程应用经验
3.1 逻辑回归实例
(一)线性决策边界
(二)非线性决策边界
(三)LR算法的应用经验
LR < SVM/GBDT/RandomForest
①优势
- LR能以概率的形式输出结果,而非只是0,1判定
- LR的可解释性强,可控度高
- 训练快,feature engineering之后效果好
- 因为结果是概率,可以做ranking model
②应用
- CTR预估(点击率预估)/推荐系统的learning to rank/各种分类场景
- 某搜索引擎厂的广告CTR预估基线版本是LR
- 某电商搜索排序基线版是LR(广告也是)
- 某电商的购物搭配推荐用了大量LR
- 某电商的购物搭配推荐用了大量LR
- 某现在一天广告赚1000w+的新闻app排序基线是LR
3.2 样本处理
(一)样本量太大怎么办?
- 离散化后用one-hot编码处理成0,1值
- 如果要用连续值,注意做scaling(幅度变化)
- 试试spark Mllib
- 试试采样(注意采样方式:日期 or 用户 or 行为)(二)注意样本的平衡
- LR对样本分布十分敏感
- 如果样本不均衡:下采样(样本量充足的情况下),上采样(样本数量不太足)
- 修改loss function,给不同权重
- 采样后的predict结果,用作排序可以,但用作判定需要还原
3.3 特征处理
(一)离散化
- 映射到高维空间,用linear的LR(快,且兼具更好的分割性)
- 稀疏化,0,1向量内积乘法运算速度快,计算结果方便存储,容易扩展
- 离散化后,给线性模型带来一定的非线性
- 模型稳定,收敛度高,鲁棒性好
- 在一定程度上降低了过拟合风险
(二)特征处理
①通过组合特征引入个性化因素
- uuid + tag
- uuid + cluster_id
②注意特征的频度
- 区分特征重要度
- 可以产出层次判定模型
③聚类/Hash
- 增强了极度系数的特征表达力
- 减小了模型,加速运算
3.4 算法调优
(一)假设只看模型
- 选择适合的正则化(L1,L2,L1+L2)
- 正则化系数C
- 收敛的阈值e,迭代轮数
- 调整loss function给定不同权重
- Bagging或其他方式的模型融合
- 最优化算法额选择(‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’)
- 小样本liblinear,大样本sag,多分类‘newton-cg’和‘lbfgs’
(二)liblinear
- libsvm稀疏向量存储格式,海量数据下单机速度还OK
- 高纬度离散化特征,准确率逼近非线性切分
- 参数调节比较方便
- Sklearn中的LR实际上式liblinear封装的