逻辑回归资料总结

这是我学习LR和使用LR训练模型时用到的资料,注明了url和文章要点,供参考。

https://www.zhihu.com/question/266442920

数据穿越现象

数据(特征)穿越在金融领域经常会发生,因为贷款用户是否发生逾期的表现期比较长(一般几个月),在加工特征时候需要特别强调不能使用申贷之后的数据。

原因很简单,就是老生常谈的保证模型泛化性。如何保证模型的泛化性?一般评估测试集,希望希能代表未来数据的效果。这就要求测试集和未来数据一致性。

即希望测试集上的一群人和未来的那群人一致或接近,这样测试集才有代表性。

人群是否一致,其实就是看特征分布,本来两边的人群是一致的,由于加工时特征穿越的原因,造成不一致了,那这就是你的问题。

举个例子:

训练集上2000年红娘为20岁的A推荐了20岁B,成功结伴

2018年时你建立一个推荐伴侣模型,加工年龄特征时把A和B年龄都加工成38,恭喜你穿越了:明明是20岁的小伙子人喜欢20岁的小姑娘,你干嘛让模型认为38岁的人可能喜欢年龄相近的伴侣!!也许38岁大叔更爱萝莉呢?

 

https://tech.meituan.com/2015/02/10/machinelearning-data-feature-process.html

1如何选择特征

在确定了目标之后,下一步,我们需要确定使用哪些数据来达到目标。需要事先梳理哪些特征数据可能与用户是否点击下单相关。我们可以借鉴一些业务经验,另外可以采用一些特征选择、特征分析等方法来辅助我们选择。具体的特征选择,特征分析等方法我们后面会详细介绍。

2、数据预处理

特征数据只有在和标注数据合并之后,才能用来做为模型的训练。下面介绍下如何清洗标注数据。主要是数据采样和样本过滤

3、特征分类

在分析完特征和标注的清洗方法之后,下面来具体介绍下特征的处理方法,先对特征进行分类,对于不同的特征应该有不同的处理方法。

根据不同的分类方法,可以将特征分为(1)Low level特征和High level特征。(2)稳定特征与动态特征。

长尾样本的预测值主要受high level特征影响。 高频样本的预测值主要受low level特征影响。

稳定特征是变化频率(更新频率)较少的特征,例如评价平均分,团购单价格等,在较长的时间段内都不会发生变化。动态特征是更新变化比较频繁的特征,有些甚至是实时计算得到的特征,例如距离特征,2小时销量等特征。或者叫做实时特征和非实时特征。针对两类特征的不同可以针对性地设计特征存储和更新方式,例如对于稳定特征,可以建入索引,较长时间更新一次,如果做缓存的话,缓存的时间可以较长。

4、特征处理

在对特征进行分类后,下面介绍下对特征常用的处理方法。包括1.特征归一化,离散化,缺省值处理。2.特征降维方法。3.特征选择方法等。

 

没有看懂

特征监控

对于重要的特征进行监控与有效性分析,了解模型所用的特征是否存在问题,当某个特别重要的特征出问题时,需要做好备案,防止灾难性结果。需要建立特征有效性的长效监控机制 我们对关键特征进行了监控,下面特征监控界面的一个截图。通过监控我们发现有一个特征的覆盖率每天都在下降,与特征数据提供方联系之后,发现特征数据提供方的数据源存在着问题,在修复问题之后,该特征恢复正常并且覆盖率有了较大提升。

 

https://zhuanlan.zhihu.com/p/34410903

1、one-hot的另一个角度的理解

One-hot是对低维高信息量的特征在高维中进行打散,使之在模型中更容易被优化/学习。也是ML中常用套路“先升维”的一个方案。

2、id类特征使用方案演进

2.1 大数据时代之前,直接丢弃id类特征

2.2 使用n-gram算法,可以作为一个按某些id n-gram 进行分桶的统计模型

2.3 embedding word2vec等算法,id类特征做one-hot

3、one-hot的使用场景

1、id类特征直接one-hot,userid*itemid这样的交叉特征做one-hot

2、对于某一维或者少数几维的非线性特征,可以对其值域做分区one-hot编码作为特征。这种方式有信息损失、页可以改动为无信息损失的方案

给一系列的词语计算概率的模型叫做语言模型(Language Models),其中,n-gram是最简单的一种。一个n-gram就是一个长度为N的词语组成的序列:

3、在gis领域对坐标处理的一个常见手段就是分区域做one-hot

没有看懂


 

https://cloud.tencent.com/developer/article/1005416

ctr算法的演进和各个模型的优缺点

1、LR 海量高纬度离散特征

优点:由于 LR 模型简单,训练时便于并行化,在预测时只需要对特征进行线性加权,所以性能比较好,往往适合处理海量 id 类特征,用 id 类特征有一个很重要的好处,就是防止信息损失(相对于范化的 CTR 特征),对于头部资源会有更细致的描述。

缺点:LR 的缺点也很明显,首先对连续特征的处理需要先进行离散化,如上文所说,人工分桶的方式会引入多种问题。另外 LR 需要进行人工特征组合,这就需要开发者有非常丰富的领域经验,才能不走弯路。这样的模型迁移起来比较困难,换一个领域又需要重新进行大量的特征工程

2、GBDT少量低维连续特征(Yahoo Bing)

优点:我们可以把树的生成过程理解成自动进行多维度的特征组合的过程,从根结点到叶子节点上的整个路径(多个特征值判断),才能最终决定一棵树的预测值。另外,对于连续型特征的处理,GBDT 可以拆分出一个临界阈值,比如大于 0.027 走左子树,小于等于 0.027(或者 default 值)走右子树,这样很好的规避了人工离散化的问题。

缺点:对于海量的 id 类特征GBDT 由于树的深度和棵树限制(防止过拟合),不能有效的存储;另外海量特征在也会存在性能瓶颈,经笔者测试,当 GBDT one hot 特征大于 10 万维时,就必须做分布式的训练才能保证不爆内存。所以 GBDT 通常配合少量的反馈 CTR 特征来表达,这样虽然具有一定的范化能力,但是同时会有信息损失,对于头部资源不能有效的表达。

3、GBDT LR(FACEBOOK)

优点:GBDT 可以自动进行特征组合离散化LR 可以有效利用海量 id 类离散特征保持信息的完整性

缺点:LR 预测的时候需要等待 GBDT 的输出,一方面 GBDT在线预测慢于单 LR,另一方面 GBDT 目前不支持在线算法,只能以离线方式进行更新。

4、FM DNN(百度凤巢)

用 FM 做 Embedding,DNN 做训练。

优点:FM 可以自动进行特征组合,并能把同一 category field 下的海量离散特征投影到一个低纬的向量空间里,大大减少了 DNN 的输入。而 DNN 不但可以做非线性变换,还可以做特征提取

缺点:由于 2 FM 只支持 2 维的特征交叉(考虑性能的因素常用 2 FM),所以不能像 GBDT 那样做到 10 维的特征组合。另外 DNN 模型出于调参复杂性能不高的原因,并不适用于中小型业务。所以在工业界使用的不多。

5、 MLR (阿里妈妈)

MLR 是 LR 的一个改进, 它采用分而治之的思想,用分片线性的模式来拟合高维空间的非线性分类面。

优点:MLR 通过先验知识对样本空间的划分可以有效提升 LR 对非线性的拟合能力,比较适合于电商场景,如 3C 类和服装类不需要分别训练各自不同的 LR 模型,学生人群和上班族也不需要单独训练各自的 LR,在一个 LR 模型中可以搞定。模型的迁移能力比较强。

缺点:MLR 中超参数 m需要人工去调,另外还是有 LR 共性的缺点,如需要人工特征组合人工离散化分桶

6、FTRL(google)

google 率先把在线算法 FTRL 引入 CTR 预估模型 8

优点:FTRL 可以在线训练,这样使 LR 存储于模型中的信息可以得到快速的更新。另外 FTRL 也具有不错的稀疏性精确度,可以减少内存占用防止过拟合。最后 FTRL_Proximal 还支持动态的学习率,可以对不同完整性的特征采用不同的步长进行梯度下降。

缺点:FTRL 同样具有 LR 的缺点,需要人工特征工程人工离散化分桶

 

http://www.cnblogs.com/pinard/p/9032759.html

特征选择

1、特征的来源

在做数据分析的时候,特征的来源一般有两块,一块是业务已经整理好各种特征数据,我们需要去找出适合我们问题需要的特征;另一块是我们从业务特征中自己去寻找高级数据特征。我们就针对这两部分来分别讨论。
2、关于业务的特征的选择

2.1 过滤法选择特征

使用的指标最多的是方差,方差越大的特征,我们认为越有用。如果方差比较小,这个特征可能对我们的算法作用不大。

相关系数指标:用于输出连续值的监督学习算法中,分别计算训练集中每个特征与输出值的相关系数,设定一个阈值,选择相关系数大的部分特征。

卡方检验:卡方检验可以检测某个特征的分布和输出值的分布之间的相关性。

信息熵:从信息熵的角度,计算信息增益,评估特征和输出值之间的关系。(类似决策树)

2.2 包装法选择特征

典型算法递归消除特征法(RFE),SVM-RFE使用svm做特征选择。它选用svm进行多轮训练,每轮训练后,消除若干权重系数对应的特征,知道特征的数目满足我们的需求为止。

2.3 嵌入法选择特征

这个也是使用机器学习模型选择特征,但是和包装法不同的是,它使用全部特征。最常用的是用L1正则化和L2正则化进行特征选择。

3、制造高级特征

指的是特征组合

 

https://www.cnblogs.com/pinard/p/9061549.html

特征表达

1、缺失值处理

1.1 连续值可以取平均值或者中位数

1.2 离散值取样本中最频繁出现的类别值

2.时间的处理

2.1 连续的时间差值法:计算出样本时间到未来时间的时间戳的差,转换成连续值。

2.2 日期转换: 将样本时间转换成年月日时等离散值。

2.3 权重法: 根据时间的新旧增加一个权重,相当于新增加一个特征表示新旧。

3 地理位置的处理

看需要可以转换成连续值(使用地理的经纬度)和离散值(省市街道等)

4、离散特征连续化

one-hot方法

特征嵌入方法(用于DL)

word2vec方法

5、 连续特征离散化

5.1 根据阈值进行分组

5.2 使用GBDT方法 不懂

 

https://www.cnblogs.com/pinard/p/9093890.html

特征的数字处理

1、标准化或者归一化的方法

1.1 z-score标准化:最常用,求出均值mean 和标准差std,然后用(x-mean)/std代替x。特征变成了均值为0,方差为1.

1.2 min-max标准化:离差标准化。

1.3 L1/L2标准化:求出特征向量x的笵数L,然后用x/L代替x。

1.4 中心化:pca降维的时候,求出特征x的平均值x-mean 后,用x-mean代替x,使得特征的均值改变,方差不变。

2、异常特征样本清洗

2.1 聚类方法:找出聚类之后簇中样本很少或者离簇中心距离很远的样本,这些可能是异常样本。

2.2 异常点检测:算法有one class svm 和 iForest算法

3、处理不平衡数据

3.1 权重法

对每个类别增加一个权重,该类别下的样本越多,权重越低。

3.2 采样法

重采样和过采样,分别针对数据多的类别和数据少的类别。这两个采样法改变了数据集的分布,可能导致泛化能力减小。smote算法对于数据少的类别,利用类别下的数据,重新生成数据,增加这个类别的样本,可以减小这个影响。

 

https://zhuanlan.zhihu.com/p/31817361

1、hash编码和embedding的不同

有同学问HashEmbedding的区别,Embedding本身是需要学习出来的,比如说id1它投影到怎样的Embedding空间,通过学习来获得。而哈希是通过预定义的哈希函数,直接投影过去,本身的哈希函数是不需要学习的。这里它最基础的逻辑是不一样的,Hash Encoding也就是说你这两维特征可以share相同的weight。比如说巴西和智利放在同一列中,他们有相同的权重,而Embedding实际上是一种distributional的表达方式。它的意思是说巴西可能使用64维上不同取值来代表,智利也是同样用这64维,所以这64维,每一列都参与表达不同的国家,每一个国家都由这64维来表达。它们两个的基本思路上是有所区别的。


 

https://www.zhihu.com/question/34819617

讲用户id在逻辑回归时候训练的用处

没有看懂

 

https://arxiv.org/pdf/1712.08289.pdf

讲述怎么使用id类特征,阿里的文章

 

https://www.cnblogs.com/ModifyRong/p/7739955.html

lr的面试题

1、lr的正式介绍

lr假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯度下降来求解参数,达到将数据二分类的目的。

2、adam 动量法等优化方法

2.1 第一个是如何对模型选择合适的学习率。自始至终保持同样的学习率其实很不合适。因为一开始模型刚刚开始学习的时候,此时的参数和最优解隔的比较远,需要保持一个较大的学习率,尽快逼近最优解。但是学习到后面的时候,参数和最优解隔的比较近,如果还保持较大的学习率,则容易越过最优点,在最优点附近来回震荡。

2.2 第二个是如何对参数选择合适的学习率。在实践中,对每个参数保持同样的学习率同样也是不合理的。有些参数更新比较频繁,那么学习率可以适当小一点。有些参数更新缓慢,学习率应该大一点。

3、为什么使用最大似然函数作为损失函数

3.1 损失函数有四种:平方损失函数,对数损失函数,0-1损失函数,绝对值损失函数。极大似然函数取对数后等效于对数损失函数。在Lr中,这个损失函数的训练求解参数的速度是比较快的。

更新速度之和x,y相关,和simmod函数本身的梯度无关,更新速度可以自始至终都比较稳定。

4、 为什么不选平方损失函数

4.1 使用平方损失函数,参数的更新速度和sigmod函数本身的梯度相关,sigmod函数的梯度在定义域内不大于0.25 。这样训练会很慢

5、如果有特征向量中有很多特征高度相关或者某个特征重复了100遍,对训练有什么影响。

在函数最终收敛的情况下,特征高度相关不会影响分类器的效果。假设现在特征向量只有一个特征,现在你把它重复了100遍(变成了100维的向量)。实质上把原来的特征分成了100份,每个特征的权重是原来权重的值百分之一。如果在随机采样的情况下,收敛完后,还是可以认为这100个特征和原来特征扮演的角色是一样的,只是可能中介很多特征的权重值正负抵消了。

6、接问题5,为什么在训练的时候还要把高度相关的特征去掉?

6.1 让模型的可解释性更好

6.2 大大提高模型的训练速度。1是很多特征高度相关的话,损失函数本身收敛了,但是模型并没有收敛。2是特征多了,本身会增大训练的时间。

7 lr的优点

7.1 形式简单、模型的可解释性好。从特征的权重可以看到不同特征对最后结果的影响,某个特征的权重较大,这个特征对结果的影响也大。

7.2 工业上使用效果可以接收。并且特征工程可以并发做,加大开发的速度。

7.3 资源占用小,预测时只需要存储各个维度的特征值。

7.4 方便结果调整,可以调整预测时的阈值。

8 lr的缺点

8.1 准确率不是很高,因为形式简单,所以很难拟合数据的真实分布。

8.2 很难处理数据不平衡的问题。99个正样本,1个负样本时,全部预测为正,也可以使损失函数值很小,但是对正负样本的区分不是很好。

8.3 处理非线性数据麻烦,需要人工进行特征组合。

8.4 本身无法筛选特征,会用gbdt筛选特征,然后用lr训练。

 

https://blog.csdn.net/lujiandong1/article/details/52412123

主要将工业上特征的使用

1、特征的由来

选特征的过程就是先猜想,然后统计验证,最后代入模型中验证。想特征这件事没有靠谱的方法,只能天南海北地想,多了解行业知识。然后进行验证。

验证方法有直接观察ctr,卡方检验,单特征AUC等。直接观察ctr很有效,如根据投放记录,发现化妆品行业中女性的点击率要高于男性的点击率,说明性别这个特征在化妆品行业是有预测能力的。这个就可以作为一个特征。实际使用中发现性别、手机型号这个特征比较有效,地域和年龄也有效,但没有那么明显。

2、特征的处理

2.1 离散化:有些特征虽然也是数值型,但是其值相加减是没有意义的,也需要转换成离散型。比如说年龄的两个值20和30,在w确定的情况下,x是特征向量,x的年龄特征是20与特征是30时相比,wx的差值是很大的,但是20岁的人和30岁的人对同一个广告的反应不会相差那么大。

2.2 交叉:从理论上来说是为模型引入了非线性特性。从实际意义来说,以性别这个特征为例,假设离散化后性别男对应的是编号12的特征值为1.那么对于下列组合(用户,篮球广告),(用户,化妆品广告),(用户,车辆广告)在这些数据的训练过程中,编号12的特征值一直都是1,这样训练出来一个权重,对英编号12的权重值是w,那么无论对于(用户,篮球广告)还是(用户,化妆品广告)来说,编号12都是这样权重w。这样看起来是不合理的,合理的结果是对于(用户,篮球广告)编号12是一个权重,(用户,化妆品广告)是另一个权重。可以将编号12的特征不取1,取值为广告在男性用户上的点击率。对于(用户,篮球广告)编号12是男性在篮球广告上的点击率,对于(用户,化妆品广告)编号12是男性在化妆品广告的点击率。

实际上常用的交叉是,广告和用户的交叉,广告和性别的交叉,广告和年龄的交叉,广告和手机平台的交叉,广告和地域的交叉。

2.3 连续特征变离散特征:原因是特征的取值在不同区间对于点击率的重要性是不一样的。如下图所示互联网广告的点击率分布图。点击率符合一个长尾分布,叫作对数正态分布。现在我们将广告的点击率作为一个特征,加入广告a和b,点击率分别是0.2% 和 0.25%,那么我们可以确定广告b要比广告a好,因为这个区间内的广告很多,b的点击率又比a高。但是当a和b的点击率是1%和1.05%时,并不能确定b比a好,因为这个区间内的广告数量不多,两个广告可以认为是差不多的。这就表明特征在不同区间是不同的权重系数。因为这个特征对于ctr不是完全的正相关性。可能值越大特征越重要,但是值达到一定成都,重要性就下降了。所以,我们将连续特征离散化,就是默认不同区间的权重是不一样的。特征的连续值在不同的区间的重要性是不一样的,所以希望连续特征在不同的区间有不同的权重,实现的方法就是对特征进行划分区间,每个区间为一个新的特征。常用做法,就是先对特征进行排序,然后再按照等频离散化为N个区间

 

 

https://www.jianshu.com/p/27da98e39030

特征组合的简单例子

https://www.theanalysisfactor.com/interpreting-interactions-in-regression/

特征组合的解释

1、特征组合的例子

如下图所示,我们需要根据特征x1和特征x2,对数据进行分类。红色的为正样本,蓝色为负样本。一般情况下公式可以写为

但是观察数据分布,我们无法找到一条直线可以将正负样本分开。

在观察下我们发现若特征x1和特征x2的积若为正时,样本都是正样本;积是负时,样本都是负样本。此时我们可以新增加一个特征x3,使得

则原公式变为

新增加的特征就是特征组合产生的新特征。在原公式中特征x1的作用由权重w1来控制,表示x1这个特征对最终结果的影响。当加入新特征后x1的作用不仅由w1控制,而且还有w3*x2共同来控制。w1的作用现在变成了当特征x2为0时,特征x1对结果的影响。


https://developers.google.com/machine-learning/crash-course/feature-crosses/crossing-one-hot-vectors?hl=zh-cn

特征组合中组合独热矢量

https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf

FM算法论文

 

https://www.jianshu.com/p/b670b2a23187

卡方检验

卡方检验最基本的思想是通过观察实际值与理论值的偏差来确定实际值与理论值的偏差来确定理论的正确与否。

具体做的时候

1、 先假设两个变量确实是独立的(原假设)

2、观察实际值与理论值的偏差程度

3、若果偏差足够小,则认为偏差是很自然的样本误差,接受原假设;否则否定原假设,认为两者是相关的。


 

https://ashokharnal.wordpress.com/2014/03/14/a-very-simple-explanation-for-auc-or-area-under-the-roc-curve/

解释auc

AUC 的意思是area under th curve,其中从curve默认的是roc曲线。ROC曲线是受试者特征曲线,纵坐标是

横坐标是

p是正样本数量,N是负样本数量。

假设数据集有100个正样本,100个负样本,一个模型对其进行预测,100个正样本中70个被标记为正,30个被标记为负。100个负样本中,70个被标记为正,30个被标记为负。那么tpr和fpr可以求出(0.7,0.7),此时tpr和fpr相等的意思是,对于上述预测正确的70个正样本和70个预测错误的负样本,有50%的几率是正确的,50%的几率是错误的。现在有一个样本被标记为正,那么有50%的可能性它属于TP,有50%的可能性ta属于FP。

如果TPR和fpr都是40%呢,同理,假设一个样本被标记为正,同样有50%的可能性它属于TP。这在坐标轴上表示的是一条y=x的直线。

假设tpr为70%,fpr为40%,那么对于新样本,有70 / (70 + 40)= 70/110的概率是属于TP,有40/110的概率属于FP,这种情况是在y=x直线上方。这样的模型就比上个模型要改进了一些,属于更好的模型。

假设tpr为40%,fpr为70%,那么对于新样本,有40/110的概率属于TP,70%的概率属于FP,这个模型比上个模型差。一般情况是label或者算法出错了。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值