机器学习特征工程总结
归一化和标准化有什么区别
归一化的依据非常简单,不同变量往往量纲不同,归一化可以消除量纲对最终结果的影响,使不同变量具有可比性。比如两个人体重差10KG,身高差0.02M,在衡量两个人的差别时体重的差距会把身高的差距完全掩盖,归一化之后就不会有这样的问题。
标准化的原理比较复杂,它表示的是原始值与均值之间差多少个标准差,是一个相对值,所以也有去除量纲的功效。同时,它还带来两个附加的好处:均值为0,标准差为1。
怎么用
在涉及到计算点与点之间的距离时,使用归一化或标准化都会对最后的结果有所提升,甚至会有质的区别。那在归一化与标准化之间应该如何选择呢?如果把所有维度的变量一视同仁,在最后计算距离中发挥相同的作用应该选择标准化,如果想保留原始数据中由标准差所反映的潜在权重关系应该选择归一化。另外,标准化更适合现代嘈杂大数据场景。
小结:
- 如果对输出结果范围有要求,用归一化
- 如果数据较为稳定,不存在极端的最大最小值,用归一化
- 如果数据存在异常值和较多噪音,用标准化,可以间接通过中心化避免异常值和极端值的影响
更多解释可参考知乎高赞解答。
参考文章
特征工程一般怎么做
特征工程是为了对数据进行处理,特征是原始数据的数值表示。特征工程是在给定数据、模型和任务的情况下设计出最合适的特征的过程。
没有足够的特征,模型将不能完成最终的任务,特征过多,模型会很难训练且训练成本高昂。
特征工程的步骤可大致概括为如下3大块:
1. 数据清洗
- 特征变换:模型无法处理或不适合处理
a) 定性变量编码:Label Encoder;Onehot Encoder;Distribution coding;
b) 标准化和归一化:z分数标准化(标准正太分布)、min-max 归一化; - 缺失值处理:增加不确定性,可能会导致不可靠输出
a) 不处理:少量样本缺失;
b) 删除:大量样本缺失;
c) 补全:(同类)均值/中位数/众数补全;高维映射(One-hot);模型预测;最邻近补全;
矩阵补全(R-SVD); - 异常值处理:减少脏数据
a) 简单统计:如 describe() 的统计描述;散点图等;
b) 3 σ \sigma σ 法则(正态分布)/箱型图截断;
c) 利用模型进行离群点检测:聚类、K近邻、One Class SVM、Isolation Forest; - 其他:删除无效列/更改dtypes/删除列中的字符串/将时间戳从字符串转换为日期时间格式等
2. 特征构造
- 构造统计量特征,报告计数、求和、比例、标准差等;
- 时间特征,包括相对时间和绝对时间,节假日,双休日等;
- 地理信息,包括分箱,分布编码等方法;
- 非线性变换,包括 log/ 平方/ 根号等;
- 特征组合,特征交叉;
3. 特征选择
- 过滤式(Filter):先用特征选择方法对初识特征进行过滤然后再训练学习器,特征选择过程与后续学习器无关。
a) Relief/方差选择/相关系数/卡方检验/互信息法 - 包裹式(Wrapper):直接把最终将要使用的学习器的性能作为衡量特征子集的评价准则,其目的在于为给定学习器选择最有利于其性能的特征子集。
a) Las Vegas Wrapper(LVM) - 嵌入式(Embedding):结合过滤式和包裹式方法,将特征选择与学习器训练过程融为一体,两者在同一优化过程中完成,即学习器训练过程中自动进行了特征选择。
a) LR+L1或决策树
特征工程内容总结:
以上图片来自知乎,各模块详细内容可参考深度了解特征工程这篇文章或者机器学习中,有哪些特征选择的工程方法?高赞解答。
参考文章
- 深度了解特征工程
- 机器学习中,有哪些特征选择的工程方法?
- 特征工程完全手册 - 从预处理、构造、选择、降维、不平衡处理,到放弃
- 探讨特征工程的方法论
- 什么是特征工程?如何进行特征工程?
- 机器学习中的特征工程
- 推荐系统学习笔记——特征工程
- (二)数据的特征工程方法总结笔记
- 特征工程怎么做
- 手把手教你用sklearn做特征工程
- 特征工程——连续特征与离散特征处理方法
如何进行特征筛选
1. 特征选择的目的
对于一个特定的学习算法来说,哪一个特征是有效的是未知的。因此,需要从所有特征中选择出对于学习算法有益的相关特征。而且在实际应用中,经常会出现维度灾难问题。如果只选择所有特征中的部分特征构建模型,那么可以大大减少学习算法的运行时间,也可以增加模型的可解释性。
- 减少特征数量、降维
- 降低学习任务的难度,提升模型的效率
- 使模型泛华能力更强,减少过拟合
- 增强对特征和特征值之间的理解
2. 特征选择的原则
获取尽可能小的特征子集,不显著降低分类精度、不影响分类分布以及特征子集应具有稳定、适应性强等特点。
3. 特征选择方法的内容总结
各模块具体内容介绍参考特征选择方法最全总结!这篇文章。
连续特征离散化的作用
1. 离散化原因
数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。数据离散化的原因主要有以下几点:
- 1)算法需要
比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力。 - 2)离散化的特征相对于连续型特征更易理解,更接近知识层面的表达
比如工资收入,月薪2000和月薪20000,从连续型特征来看高低薪的差异还要通过数值层面才能理解,但将其转换为离散型数据(底薪、高薪),则可以更加直观的表达出了我们心中所想的高薪和底薪。 - 3)可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定
2. 离散化的优势
在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
- 1)离散特征的增加和减少都很容易,易于模型的快速迭代;
- 2)稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展;
- 3)离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰;
- 4)逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合;
- 5)离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力;
- 6)特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问;
- 7)特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险。
3. 离散化的方法
- 1)无监督学习方法
等宽法:等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如属性值在[0,60]之间,最小值为0,最大值为60,我们要将其分为3等分,则区间被划分为[0,20] 、[21,40] 、[41,60],每个属性值对应属于它的那个区间
等频法:等宽法即是将属性值分为具有相同宽度的区间,区间的个数k根据实际情况来决定。比如有60个样本,我们要将其分为k=3部分,则每部分的长度为20个样本。
基于聚类的方法:基于聚类的方法分为两个步骤,即:选定聚类算法将其进行聚类;将在同一个簇内的属性值做为统一标记。
注:基于聚类的方法,簇的个数要根据聚类算法的实际情况来决定,比如对于k-means算法,簇的个数可以自己决定,但对于DBSCAN,则是算法找寻簇的个数。 - 2)有监督学习方法:
1R方法、基于信息熵的方法、基于卡方的方法
关于离散化方法的具体介绍可参考连续特征离散化(整理)这篇文章。
参考文章
- 连续特征的离散化:在什么情况下将连续的特征离散化之后可以获得更好的效果?
- wide&deep模型中为什么要将连续特征离散化?
- 机器学习处理数据为什么把连续性特征离散化,离散化有何好处?
- 连续特征是直接离散化还是还是归一化后在离散化?
- 特征离散化(分箱)综述
- 连续特征离散化(整理)
- 西瓜书学习笔记——第十一章:特征选择与稀疏学习
特征数值分布比较稀疏如何处理
为什么深度学习的结构特点不利于稀疏特征向量的处理呢?
- 一方面,如果我们深入到神经网络的梯度下降学习过程就会发现,特征过于稀疏会导致整个网络的收敛非常慢,因为每一个样本的学习只有极少数的权重会得到更新,这在样本数量有限的情况下会导致模型不收敛。
- 另一个方面,One-hot 类稀疏特征的维度往往非常地大,可能会达到千万甚至亿的级别,如果直接连接进入深度学习网络,那整个模型的参数数量会非常庞大,这对于一般公司的算力开销都是吃不消的。
所以基于上面两个原因,我们往往先通过 Embedding 把原始稀疏特征稠密化,然后再输入复杂的深度学习网络进行训练,这相当于把原始特征向量跟上层复杂深度学习网络做一个隔离。
机器学习中如何利用id类特征?
- id类特征上的信号是将其稀疏的,所以这意味着我们需要更大量的数据。但是其实这并没有想象中的难,计算广告、推荐系统这种机器学习场景中,单个id上搜集的数据其实非常多。但是一定要通过正则的方法来限制以使得id类特征不过拟合;
- id类特征在预测中的命中率可能并不高,但这其实也不是问题。因为一个特征就是一个体系,一个体系化的特征是通过层次化的特征设计来达到命中率和个性化的综合。比如说,用户id -> 用户GPS坐标 + 用户喜好Tag + 用户最近行为 -> 用户年龄、用户性别。通过分层的,由最细粒度到最粗细度的特征搭配来保证特征命中率;
- 组合。单独的id类特征的意义并没有那么高,有意义的是不同层次的交叉组合。这取决于业务理解和特征工程手法;
- 模型和算法。实际上,LR是适合使用id类特征的,原因在于LR适合接收超高维度的特征输入。对于XGBoost、DNN,这么高维度的特征进来,在工程和算法上都有挑战。然而其实针对这种超高维度的特征灌入Tree、NN模型的方法,并不难想到,就是Embedding。
深度学习模型处理前,一般是先把高维稀疏特征用embedding的方式,转成低维稠密特征。可以先用一些降维的办法对embedding做初始化,以提高训练效果,例如word2vec,svd等等。
以上回答参考知乎~
参考文章
- 什么是稀疏特征(Sparse Features)?
- 特征稀疏对于模型训练过程和结果有什么影响?
- 机器学习中如何利用id类特征?
- 如何在机器学习模型中如何处理稀疏特征(Sparse Features)?
- 推荐系统中稀疏特征Embedding的优化表示方法
- 分解机(Factorization Machines)推荐算法原理
- 解决样本稀疏/稀缺问题的方法
- 数据挖掘&机器学习面试题整理(入门级面试)
- 传统的CTR或推荐系统拥有高维特征和稀疏数据,转向深度学习如何高效实现?
- 高维稀疏特征向量该如何进行Feature Engineering才能适合神经网络训练?
- 为什么深度学习的结构特点不利于稀疏特征向量的处理呢?
- 为何稀疏特征不适合使用树算法?
正负样本不均衡如何处理
1. 样本不均衡现象以及带来的问题
很多机器学习算法都有一个基本假设,就是数据分布是均匀的。当我们把这些算法直接应用在实际数据中时,大多数情况下都无法取得理想的结果,因为实际数据往往分布的很不均衡,都存在长尾效应。
举个例子,大部分(假如是97%以上)的微博的总互动数(包括被转发,评论和点赞数量)都在0~5之间,交互数多的微博(多于100)非常的少,如果我们去预测一条微博交互数所在档位,预测器只需要把所有微博预测为第一档(0-5)就能解决非常高的准确率,而这样的预测器没有任何价值。
再比如,CTR任务中我们需要预测用户是否会对广告进行点击,通常情况下曝光一个广告用户点击的比率非常低,这里我们假如给101个用户曝光广告可能只有一个人点击,那么得到的正负样本比例就为1:100。如果是更高层级的广告转化目标比如下载、付费等正负样本的比例就更低了。
2. 解决办法
总体来看,样本不均衡问题可以从数据层面和模型层面来解决。
2.1 数据层面
上采样(过采样):通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本。如机器学习中的SMOTE算法,NLP中相似文本生成技术,深度学习中数据增强等。
下采样(欠采样):通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。
上采样和下采样更适合大数据分布不均衡的情况,尤其是第一种(上采样)方法应用更加广泛。
2.2 模型层面
1)正负样本的惩罚权重
在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。
如果算法本身支持基于类别参数的调整设置,这种思路是更加简单且高效的方法。
下面举例说明以下:
可以修改模型的损失函数,比如采用类别加权的loss、Focal Loss等。
拿二分类任务来举例,通常使用交叉熵来计算损失,下面是交叉熵的公式:
上面的公式中y是样本的标签,p是样本预测为正例的概率。
为了解决样本不均衡的问题,最简单的是基于类别的加权Loss,具体公式如下:
基于类别加权的 Loss 其实就是添加了一个参数
α
\alpha
α,这个
α
\alpha
α 主要用来控制正负样本对 Loss 带来不同的缩放效果,一般和样本数量成反比。
需要说明的是,上面基于类别加权Loss虽然在一定程度上解决了样本不均衡的问题,但是实际的情况是不仅样本不均衡会影响Loss,而且样本的难易区分程度也会影响Loss。在样本不均衡的场景中,有非常多的负样本是易区分样本。虽然这些样本的Loss很低,但是数量确很多,所以对于最终的Loss有很大的贡献,导致模型最终的效果不够好。基于这个问题2017年何恺明大神在论文《Focal Loss for Dense Object Detection》中提出了非常火的Focal Loss,下面是Focal Loss的计算公式:
相比于公式2来说,Focal Loss 添加了参数
γ
\gamma
γ 从置信的角度来加权 Loss 值。假如
γ
\gamma
γ 设置为0,那么公式3退化成了基于类别的加权也就是公式2;下面重点看看如何通过设置参数
γ
\gamma
γ 来使得简单和困难样本对 Loss 的影响。当
γ
\gamma
γ 设置为2时,对于模型预测为正例的样本也就是 p>0.5 的样本来说,如果样本越容易区分那么 (1-p) 的部分就会越小,相当于乘了一个系数很小的值使得 Loss 被缩小,也就是说对于那些比较容易区分的样本 Loss 会被抑制,同理对于那些比较难区分的样本 Loss 会被放大,这就是 Focal Loss 的核心:通过一个合适的函数来度量简单样本和困难样本对总的损失函数的贡献。 关于参数γ的设置问题,Focal Loss 的作者建议设置为2。下面是不同的参数值γ样本难易程度对Loss的影响对比图:
下面是一个Focal Loss的实现:
2)组合/集成
组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。
例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。
这种解决问题的思路类似于随机森林。如果计算资源充足,并且对于模型的时效性要求不高的话,这种方法比较合适。
3)一分类
对于正负样本极不平衡的场景,我们可以换一个完全不同的角度来看待问题:把它看做一分类(one class learning) 或异常检测问题,这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,比较有代表性的是 one-class-SVM。
单分类实际中有很多应用,比如人脸识别,我们不可能给所有的图片让机器去分类,事实上我们只能给出很多人脸的图像,让机器去学习识别。之后再来图像时,符合这些图像特征的就属于人脸,反之则不是。对比二分类,显著的区别就是,二分类不但能的出来这个图片不是人脸,他还能告诉你这个图片是猪脸。
参考文章
- 机器学习中如何解决样本不均衡的问题?
- 广告行业中那些趣事系列24:从理论到实践解决文本分类中的样本不均衡问题
- 推荐系统的正负样本比例悬殊:600(负):1(正),如何处理?
- 样本数据量很大的情况下,样本极度不平衡(1:370)怎么解决?
- 正负样本极不平衡的问题?
- 机器学习中非均衡数据集的处理方法?
- 样本不均衡的处理(Xgboost,pytorch及tensorflow)
- 机器学习中,正负样本比例差距大,导致分类效果差的理论依据是什么?怎么解决正负样本不均衡问题?
- CTR 预估正负样本 不平衡,请问怎么解决 ?
海量类别型特征如何处理
类别型特征主要指性别(男、女)、血型(A、B、AB、O)等只在有限选项内取值的特征。类别型特征元时输入通常是字符串形式,除了决策树等少数模型能直接处理字符串形式的输入,对于逻辑回归,SVM等模型,类别型特征必须要转换为数值型才能使用。
处理类别型特征的方法
-
序号编码。序号编码通常用来处理类别间具有大小关系的数据。例如,成绩分为‘高,中,低’三档,将其转换为序号后,序号编码会依据大小关系对类别型特征赋予一个数值ID。例如高表示为3,中表示为2,低表示为1。转换后依然保留了大小关系。
-
独热编码。当类别间不存在大小关系时,可以采用独热向量编码。比如特征“颜色”有“红,黄,蓝”三种,转换为独热向量之后,红表示为(1,0,0),黄表示为(0,1,0),蓝表示为(0,0,1)。经过这样的变换之后,不同类别之间具有同等的地位。但是,如果采用序号编码,将三种颜色表示为1,2,3的话,就会有问题。因此这种编码方式默认了蓝色比其它颜色的数值要大,这是不合理的,这三种颜色应该是平等的。对于类别特别多的特征,在使用独热向量编码时,需注意如下问题:
a)使用稀疏向量存储来节省空间。one-hot编码中,特征向量只有某一维度取1,其余维度均为0。因此可以利用向量的稀疏表示有效节省空间;
b)配合特征选择降低维度。因为高维度特征会带来如下几方面的问题:- 在K近邻算法中,高维空间下两点之间的距离很难得到有效的衡量;
- 在LR模型中,参数的数量会随着维度的增高而增加,容易引起过拟合问题;
- 通常只有部分维度对分类、预测有帮助
-
二进制编码。二进制编码分为两步。首先进行序号编码。给每个类别一个ID,然后再将该ID转换为二进制。这种做法的本质在于利用二进制对ID进行映射,最终也得到0/1向量,但是维度显著小于独热向量编码,节省了存储空间。
lightgdm序号编码后不需要归一化的原因?
- 1.树模型对于特征量纲没有要求,连续特征,类别型特征都不要归一化操作, 一是因为树模型不是利用SGD等优化算法进行优化; 二是LightGBM中回归树生长过程中,是利用特征的直方图寻找最优的特征,以及分裂点,因此这个过程只关心取值的顺序,即使归一化之后,各个样本的取值的顺序依然不会改变,所以没有必要;
- 2.对于类别型的特征,传统的机器学习模型是需要先利用one-hot编码,而在LightGBM中只需要提前将类别映射到非负整数即可(
integer-encoded categorical features
),例如,进行如下编码mapping{'川建国': 1, '傻蛋': 2, '其他': 0}
,在官方文档中也建议使用从0开始的连续的数值进行编码,当训练集中的某个类别型的特征取值个数超大,可以将其看做是连续特征看待,或者进行embedding编码。
参考文章
- 浅谈类别特征处理
- 特征处理经验
- 用lightgbm建模时,标签编码后的类别型特征还需要归一化吗?还是只需要对连续型特征做归一化呢?
- 数据采样与特征工程(数值型特征 类别型特征 时间型特征 文本型特征)介绍
- 【百面机器学习】数据预处理时,应该怎样处理类别特征?
id类特征one-hot编码后维度过高如何处理
- 对那个很多维度的类别变量,根据每一项出现的次数进行标记;比如,A类出现了5次,就标为5;
- 特征哈希,进行hashing trick,也就是进行mod分类,再one-hot;
- 根据类别特征的意义进行合并(分桶),按目标值进行合并,比如A和B和C都有85%概率使结果为1;
- 对分类变量先one-hot,再对这部分PCA降维;
- 考虑平均数编码(高基数类别特征),具体参考类别型特征的处理方法与平均数编码;
- 直接用lightgbm,原因见Optimal Split for Categorical Features;
- 低纬嵌入,也叫Embedding
lightgdm:Optimal Split for Categorical Features
用一个热编码来表示分类特征是很常见的,但这种方法对于树学习者来说是次优的。特别是对于高基数的分类特征,基于one-hot特征构建的树往往是不平衡的,需要非常深才能获得良好的准确性。
最佳的解决方案不使用one-hot编码,而是通过将类别划分为2个子集来拆分类别特征。如果该特征有k个类别,则有2^(k-1)-1个可能的分区。但是回归树有一个有效的解决方案8。需要大约O(k*log(k))才能找到最佳分区。
其基本思想是根据每次划分的训练目标对类别进行排序。更具体地说,LightGBM根据其累积值(sum_gradient/sum_hessian)对直方图进行排序(针对分类特征),然后在排序后的直方图上找到最佳分割。
以上回答参考知乎~
参考文章
- One hot编码维度过高解决方法
- onehot编码后生成的特征列太多怎么办?
- 关于lightgbm处理category特征的理解
- 类别型特征的处理方法与平均数编码
- [Word Embedding系列] one-hot 编码
- 关于sklearn中的决策树是否应该用one-hot编码?
- 高基数类别型特征的处理方案记录
DNN能做特征交叉吗
1. 为什么要做特征交叉
特征交叉(Feature Crosses)也叫特征组合,是指通过将两个或多个特征相乘,实现对样本空间的非线性变换,来增加模型的非线性能力。从本质上讲,特征交叉是利用非线性映射函数f(x)将样本从原始空间映射至特征空间的过程。
特征交叉的目的是「提升模型的效果」。通过特征交叉,将样本映射至高维空间,从而增加模型的非线性能力,提升模型的预测效果。
2. 怎么做特征交叉
特征交叉主要有两大类:1) 显示交叉;2) 隐式交叉
2.1 显式交叉
显示交叉主要是基于先验知识通过人工来手动构造交叉特征,主要有三种类型的交叉:1)內积;2)哈达玛积;3)笛卡尔积。
在构造显性交叉特征时,一定要结合业务和数据分析来构造,切忌无脑交叉。
代表方法有:FM、FFM
注:FM从形式上来说应该算显示交叉,但其实其具体交叉向量是在模型训练过程中不断优化的(隐式的)。
2.2 隐式交叉
显示特征交叉有以下几个局限性:(1)对非线性的建模能力是有限的,(2)很难扩展到更高阶的特征交叉,(3)但数据稀疏性很大时,模型训练比较困难,(4)对所有特征交叉项一视同仁,可能会限制模型的表达能力,(5)不能自动化实现特征交叉。
相较于显示交叉,隐式交叉省去了手动设计交叉的工作,直接通过模型来学习交叉。这样做的好处在于可以解决显示交叉需要依赖人工经验、特征交叉计算量大、维度爆炸等问题。主要有基于FM和MLP两大类隐式交叉方法。
代表方法有:DeepFM、Wide & Deep、Deep Crossing、Deep Cross Network等
小结:
在推荐系统中对模型优化基本都是围绕特征交叉进行的,要么手动显示的构造各种交叉特征,让模型根据历史数据学习交叉特征的有效性;要么是采用FM或MLP等方式实现隐式交叉,让模型从历史数据中自动学到有效的交叉特征。
从总体来看,当前主流的推荐模型大多是同时包含了**手动交叉+FM交叉+MLP交叉
**,始终是围绕对业务的分析和理解来选择特征和模型。
另外,当前主流的推荐算法基本都是通过对Wide&Deep进行魔改优化的,总体都逃不过交叉。
参考文章
- 推荐系统(五)—— 特征交叉
- 来聊聊:特征交叉
- 原创 | 想做推荐算法?先把FM模型搞懂再说
- 特征工程中的特征交叉究竟是什么?
- 如果说DNN的目的是特征交叉,为什么普通的全连接网络不能很好的表达模型呢?
- DNN可以进行高阶特征交互,为什么Wide&Deep和DeepFM等模型仍然需要显式构造Wide部分?
- 深入理解推荐系统:特征交叉组合模型演化简史
- 谈谈如何在推荐系统中做特征交叉
- 梳理汇总特征交叉方向的CTR预估模型
- 揭秘 Deep & Cross : 如何自动构造高阶交叉特征
- [CTR] 高阶特征的显式交叉 – DCN, DCN-v2, xDeepFM, AutoInt
- 工业界推荐系统怎么做特征?
pearson相关系数的作用
要理解Pearson相关系数,首先要理解协方差(Covariance),协方差是一个反映两个随机变量相关程度的指标,如果一个变量跟随着另一个变量同时变大或者变小,那么这两个变量的协方差就是正值,反之相反,公式如下:
Pearson相关系数公式如下:
由公式可知,Pearson相关系数是用协方差除以两个变量的标准差得到的,虽然协方差能反映两个随机变量的相关程度(协方差大于0的时候表示两者正相关,小于0的时候表示两者负相关),但是协方差值的大小并不能很好地度量两个随机变量的关联程度,例如,现在二维空间中分布着一些数据,我们想知道数据点坐标X轴和Y轴的相关程度,如果X与Y的相关程度较小但是数据分布的比较离散,这样会导致求出的协方差值较大,用这个值来度量相关程度是不合理的,如下图:
为了更好的度量两个随机变量的相关程度,引入了Pearson相关系数,其在协方差的基础上除以了两个随机变量的标准差,容易得出,pearson是一个介于-1和1之间的值,当两个变量的线性关系增强时,相关系数趋于1或-1;当一个变量增大,另一个变量也增大时,表明它们之间是正相关的,相关系数大于0;如果一个变量增大,另一个变量却减小,表明它们之间是负相关的,相关系数小于0;如果相关系数等于0,表明它们之间不存在线性相关关系。《数据挖掘导论》给出了一个很好的图来说明:
以上回答来自知乎~
参考文章
介绍下最近邻检索
K-最近邻(K-nearest-neighbor, KNN)搜索是高维数据常用的一个操作,一般用于搜索目标数据点周围最近(最相似)的K个数据点。为了提高搜索效率,也会采用近似的搜索方法(approximate nearest neighbor, ANN),即搜索到的K个点未必是最近的点,允许存在一定误差。
如果不使用最近邻检索的库,怎么做最近邻检索
最近邻检索的方法可分为三大类:
1)基于树的方法
KD树是其下的经典算法。一般而言,在空间维度比较低时,KD树的查找性能还是比较高效的;但当空间维度较高时,该方法会退化为暴力枚举,性能较差,这时一般会采用下面的哈希方法或者矢量量化方法。
2)哈希方法
LSH(Locality-Sensitive Hashing)是其下的代表算法。
对于小数据集和中规模的数据集(几个million-几十个million),基于LSH的方法的效果和性能都还不错。这方面有2个开源工具FALCONN和NMSLIB。
3)矢量量化方法
矢量量化方法,即vector quantization。在矢量量化编码中,关键是码本的建立和码字搜索算法。比如常见的聚类算法,就是一种矢量量化方法。而在相似搜索中,向量量化方法又以PQ方法最为典型。
对于大规模数据集(几百个million以上),基于矢量量化的方法是一个明智的选择,可以用用Faiss开源工具。
参考文章