一、聚类算法
1、kmeans
- 定义:K-means算法,也被称为K-均值或K-平均算法,是一种广泛使用的聚类算法。K-means算法是基于相似性的无监督的算法,通过比较样本之间的相似性,将较为相似的样本划分到同一类别中。
- 思想:
事先确定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,接着,重新计算每个类的质心(即为类中心),重复这样的过程,知道质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。 - 优点:
- 理解容易,聚类效果好;
- 处理大数据时,该算法可以保证较好的伸缩性和高效性;
- 当簇近似高斯分布时,效果很好
- 缺点:
- K值需要自己设定,不同K值结果不同;
- 对于初试设定的重心非常敏感;
- 不适合发现非凸形状的簇或者大小差别较大的簇
- 特殊值(离群值)对模型的影响较大
2、层次聚类
- 定义:层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成了一个类。
- 思想:
- 将每个对象看作一类,计算两两之间的最小距离;
- 将距离最小的两个类合并成一个新类;
- 重新计算新类与所有类之间的距离;
- 重复2、3,直到所有类最后合并成一类。
- 优点:
- 距离和规则的相似度容易定义,限制少;
- 不需要预先制定聚类数;
- 可以发现类的层次关系;
- 可以聚类成其它形状
- 缺点:
- 计算复杂度太高;
- 奇异值也能产生很大影响;
- 算法很可能聚类成链状
3、Mean Shift
-
定义:均值迁移,在数据集中选定一个点,然后以这个点为圆心,r为半径,画一个圆(二维下是圆),求出这个点到所有点的向量的平均值,而圆心与向量均值的和为新的圆心,然后迭代此过程,直到满足一点的条件结束
-
思想:
- 在指定的区域内计算偏移均值
- 移动该点到偏移均值点处
- 重复上述的过程(计算新的偏移均值,移动)
-
优点:
- 算法计算量不大,在目标区域已知的情况下完全可以做到实时跟踪;
- 采用核函数直方图模型,对边缘遮挡、目标旋转、变形和背景运动不敏感
-
缺点:
- 缺乏必要的模板更新
- 跟踪过程中由于窗口宽度大小保持不变,当目标尺度有所变化时,跟踪就会失败
- 当目标速度较快时,跟踪效果不好
- 直方图特征在目标颜色特征描述方面略显匮乏,缺少空间信息
4、DBSCAN
-
定义:种基于高密度连通区域的、基于密度的聚类算法,能够将具有足够高密度的区域划分为簇,并在具有噪声的数据中发现任意形状的簇。
-
思想:需要用户输入2个参数:一个参数是半径(Eps),表示以给定点P为中心的圆形邻域的范围;另一个参数是以点P为中心的邻域内最少点的数量(MinPts)。如果满足:以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点。
-
优点:
- 不需要指定簇个数
- 可以发现任意形状的簇
- 擅长找到离群点(检测任务)
- 两个参数就够了
-
缺点:
- 高维数据有些困难(可以做降维)
- 参数难以选择(参数对结果的影响非常大)
- Sklearn中效率很慢(数据削减策略)
二、机器学习
1、Logistic regression
-
定义:Logistic regression 模型是广义线性模型的一种,属于线性的分类模型。对于一个线性函数Wx+b=0通过对训练样本的学习,最终得到一个超平面,将不同的类区分开正负两个类别。一般使用阈值函数,将样本映射到不同的类别中,常见的阈值函数有sigmoid函数。将值域映射到(0,1)之间。
-
思想:使用逻辑损失函数进行梯度下降法进行迭代求解
-
优点:
- 训练速度较快,分类的时候,计算量仅仅只和特征的数目相关
- 简单易理解,模型的可解释性非常好,从特征的权重可以看到不同的特征对最后结果的影响
- 适合二分类问题,不需要缩放输入特征
- 内存资源占用小,因为只需要存储各个维度的特征值
-
缺点:
- 不能用Logistic回归去解决非线性问题,因为Logistic的决策面试线性的
- 对多重共线性数据较为敏感
- 很难处理数据不平衡的问题
- 准确率并不是很高,因为形式非常的简单(非常类似线性模型),很难去拟合数据的真实分布
- 逻辑回归本身无法筛选特征,有时会用gbdt来筛选特征,然后再上逻辑回归
2、adaboost
-
定义:
AdaBoost是最著名的Boosting族算法,是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器,即弱分类器,然后把这些弱分类器集合起来,构造一个更强的最终分类器
。算法本身是改变数据分布实现的,它根据每次训练集之中的每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值。将修改权值的新数据送给下层分类器进行训练,然后将每次训练得到的分类器融合起来,作为最后的决策分类器。 -
思想:开始时,所有样本的权重相同,训练得到第一个基分类器。从第二轮开始,每轮开始前都先根据上一轮基分类器的分类效果调整每个样本的权重,上一轮分错的样本权重提高,分对的样本权重降低。之后根据新得到样本的权重指导本轮中的基分类器训练,即在考虑样本不同权重的情况下得到本轮错误率最低的基分类器。重复以上步骤直至训练到约定的轮数结束,每一轮训练得到一个基分类器
-
优点:
- 很好的利用了弱分类器进行级联
- 可以将不同的分类算法作为弱分类器
- AdaBoost具有很高的精度
- 相对于bagging算法和Random Forest算法,AdaBoost充分考虑的每个分类器的权重
- 缺点:
- AdaBoost迭代次数也就是弱分类器数目不太好设定,可以使用交叉验证来进行确定
- 数据不平衡导致分类精度下降
- 训练比较耗时,每次重新选择当前分类器最好切分点
3、GBDT
-
定义:(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。
-
思想:每一次的计算是为了减少上一次的残差(residual),而为了消除残差,我们可以在残差减少的梯度(Gradient)方向上建立一个新的模型。所以说,在Gradient Boost中,每个新的模型的建立是为了使得之前模型的残差往梯度方向减少,与传统Boost对正确、错误的样本进行加权有着很大的区别。
-
优点:
- 预测精度高
- 可以处理非线性数据
- 可以处理各种类型的数据(离散/连续)
-
缺点:
- 不适合高维稀疏数据
- 由于模型之间有依赖关系,无法并行处理
4、XGboost
-
定义:XGBoost是一种提升树模型,是GBDT的一种高效实现,它是将许多树模型集成在一起,形成一个很强的分类器,所用到的树模型则是CART回归树模型。
-
思想:XGBoost算法思想就是不断地添加树,不断地进行特征分裂来完成一棵树的构建。每次添加一个树,实际上是学习一个新函数,去拟合上次预测的残差。我们训练完成时会得到k棵树 。当我们要预测一个样本的分数时,根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数,最后只需要将每棵树对应的分数加起来就是该样本的预测值。
-
优点:
- 算法的损失函数上,除了本身的损失,还加上了正则化部分。在算法的优化方式上,GBDT的损失函数只对误差部分做负梯度(一阶泰勒)展开,而XGBoost损失函数对误差部分做二阶泰勒展开,更加准确。
- 自动地运用CPU的多线程进行并行计算
- 对于缺失值的特征,通过枚举所有缺失值在当前节点是进入左子树还是右子树来决定缺失值的处理方式
- 缺点:
- 空间消耗大。这样的算法需要保存数据的特征值,还保存了特征排序的结果(例如,为了后续快速的计算分割点,保存了排序后的索引),这就需要消耗训练数据两倍的内存
- 时间上也有较大的开销,在遍历每一个分割点的时候,都需要进行分裂增益的计算,消耗的代价大
5、lightGBM
-
定义:LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀。原理上它和GBDT及xgboot类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。
-
思想:
- 基于Histogram的决策树算法
- 单边梯度采样 Gradient-based One-Side Sampling(GOSS):使用GOSS可以减少大量只具有小梯度的数据实例,这样在计算信息增益的时候只利用剩下的具有高梯度的数据就可以了,相比XGBoost遍历所有特征值节省了不少时间和空间上的开销
- 互斥特征捆绑 Exclusive Feature Bundling(EFB):使用EFB可以将许多互斥的特征绑定为一个特征,这样达到了降维的目的
- 带深度限制的Leaf-wise的叶子生长策略:大多数GBDT工具使用低效的按层生长 (level-wise) 的决策树生长策略,因为它不加区分的对待同一层的叶子,带来了很多没必要的开销。实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。LightGBM使用了带有深度限制的按叶子生长 (leaf-wise) 算法
- 直接支持类别特征(Categorical Feature)
- 支持高效并行
-
优点:
- LightGBM 采用了直方图算法将遍历样本转变为遍历直方图,极大的降低了时间复杂度;
- LightGBM 在训练过程中采用单边梯度算法过滤掉梯度小的样本,减少了大量的计算;
- LightGBM 采用了基于 Leaf-wise 算法的增长策略构建树,减少了很多不必要的计算量;
- LightGBM 采用优化后的特征并行、数据并行方法加速计算,当数据量非常大的时候还可以采用投票并行的策略;
- LightGBM 对缓存也进行了优化,增加了缓存命中率;
- XGBoost使用预排序后需要记录特征值及其对应样本的统计值的索引,而 LightGBM 使用了直方图算法将特征值转变为 bin 值,且不需要记录特征到样本的索引,将空间复杂度从 降低为 ,极大的减少了内存消耗;
- LightGBM 采用了直方图算法将存储特征值转变为存储 bin 值,降低了内存消耗;
- LightGBM 在训练过程中采用互斥特征捆绑算法减少了特征数量,降低了内存消耗。
-
缺点:
暂无
6、随机森林(Random Forests)
-
定义:随机森林是一种重要的基于Bagging的集成学习方法,可以用来做分类、回归等问题
-
思想:从原始训练样本集N中
有放回地重复随机
抽取k个样本生成新的训练样本集合,然后根据自助样本集生成k个分类树组成随机森林,新数据的分类结果按分类树投票多少形成的分数而定。其实质是对决策树算法的一种改进,将多个决策树合并在一起,每棵树的建立依赖于一个独立抽取的样品,森林中的每棵树具有相同的分布,分类误差取决于每一棵树的分类能力和它们之间的相关性。特征选择采用随机的方法去分裂每一个节点,然后比较不同情况下产生的误差。能够检测到的内在估计误差、分类能力和相关性决定选择特征的数目。单棵树的分类能力可能很小,但在随机产生大量的决策树后,一个测试样品可以通过每一棵树的分类结果经统计后选择最可能的分类 -
优点:
- 具有极高的准确率
- 随机性的引入,使得随机森林不容易过拟合
- 随机性的引入,使得随机森林有很好的抗噪声能力
- 能处理很高维度的数据,并且不用做特征选择
- 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
- 训练速度快,可以得到变量重要性排序
- 容易实现并行化
-
缺点:
- 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
- 随机森林模型还有许多不好解释的地方,有点算个黑盒模型
7、极端随机森林(extra tree)
-
定义:极端随机森林同样是一种多棵决策树集成的分类
-
思想:
- ExtraTree使用的所有的样本,只是特征是随机选取的,因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好
- 比较的激进,会随机的选择一个特征值来划分决策树
-
优点:
泛化能力比RF更好 -
缺点:决策树的规模一般会大于RF
8、孤立森林(IsolationForest)
-
定义:)孤立森林是一个基于Ensemble的快速异常检测方法,具有线性时间复杂度和高精准度,是符合大数据处理要求的state-of-the-art算法
-
思想:切割是随机的,所以需要用ensemble的方法来得到一个收敛值(蒙特卡洛方法),即反复从头开始切,然后平均每次切的结果。iForest由t个iTree(Isolation Tree)孤立树 组成,每个iTree是一个二叉树结构,其实现步骤如下:
- 从训练数据中随机选择Ψ个点样本点作为子样本,放入树的根节点。
- 随机指定一个维度,在当前节点数据中随机产生一个切割点p——切割点产生于当前节点数据中指定维度的最大值和最小值之间。
- 以此切割点生成了一个超平面,然后将当前节点数据空间划分为2个子空间:把指定维度里小于p的数据放在当前节点的左边,把大于等于p的数据放在当前节点的右边。
- 在子节点中递归步骤2和3,不断构造新的子节点,直到子节点中只有一个数据(无法再继续切割)或子节点已到达限定高度。
获得t个iTree之后,iForest训练就结束,然后我们可以用生成的iForest来评估测试数据了。对于一个训练数据x,我们令其遍历每一棵iTree,然后计算x最终落在每个树第几层(x在树的高度)。然后我们可以得出x在每棵树的高度平均值。
获得每个测试数据的高度平均值后,我们可以设置一个阈值(边界值),高度平均值低于此阈值的测试数据即为异常。也就是说异常在这些树中只有很短的平均高度
-
优点:可以用于无监督学习
-
缺点:
- iForest仅对全局稀疏点敏感,不擅长处理局部的相对稀疏点;
- iForest不适用于特别高维的数据。由于每次切数据空间都是随机选取一个维度,建完树后仍然有大量的维度信息没有被使用,导致算法可靠性降低。高维空间还可能存在大量噪音维度或无关维度(irrelevant attributes),影响树的构建。
- iForest属于无监督问题,这是区别于其他森林系的。所以iForest预测结果为异常值的样本需要进行人工检查。比如:我们用的样本数据是城市个维度的数据,最终检查的结果是北上广深发达城市和西北的一些落后城市,也就是说iForest只能检查出异常,但是不能区分异常的好坏。所以大家运用的时候还要谨慎。
9、深度森林(Deep Forest)
-
定义:是周志华教授和冯霁博士在2017年2月28日发表的论文《Deep Forest: Towards An Alternative to Deep Neural Networks》中提出来的一种新的可以与深度神经网络相媲美的基于树的模型
-
思想:
-
级联森林:每一层都由多个随机森林组成。通过随机森林学习输入特征向量的特征信息,经过处理后输入到下一层。为了增强模型的泛化能力,每一层选取多种不同类型的随机森林,上图给了两种随机森林结构,分别为completely-random tree forests(蓝色)和random forests(黑色),每种两个。其中,每个completely-random tree forests包含1000棵树,每个节点通过随机选取一个特征作为判别条件,并根据这个判别条件生成子节点,直到每个叶子节点只包含同一类的实例而停止;每个random forests同样包含1000棵树,节点特征的选择通过随机选择√d个特征(d为输入特征的数量),然后选择基尼系数最大特征作为该节点划分的条件。
-
多粒度扫描:第一步:使用多粒度扫描对输入特征进行预处理;第二步:将得到的特征向量输入到级联森林中进行训练。
- 优点:
- 容易训练,计算开销小
- 天然适用于并行的部署,效率高
- 超参数少,模型对超参数调节不敏感,并且一套超参数可使用到不同数据集
- 可以适应于不同大小的数据集,模型复杂度可自适应伸缩
- 每个级联的生成使用了交叉验证,避免过拟合
- 在理论分析方面也比深度神经网络更加容易。
- 缺点:暂无
10、KNN
-
定义:k近邻分类(k-nearest neighbor classification)算法。K近邻是一种基本分类与回归的方法。可以简单粗暴的认为是:K个最近的邻居,当K=1时,算法便成了最近邻算法,即寻找最近的那个邻居。
-
思想:即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居),这K个实例的多数属于某个类,就把该输入实例分类到这个类中
-
优点:
- 理论成熟,思想简单,既可以用来做分类也可以用来做回归
- 可用于非线性分类
- 训练时间复杂度比支持向量机之类的算法低,仅为O(n)
- 和朴素贝叶斯之类的算法比,对数据没有假设,准确度高,对异常点不敏感
- 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合
- 该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分
- 缺点:
- 计算量大,尤其是特征数非常多的时候
- 样本不平衡的时候,对稀有类别的预测准确率低
- KD树,球树之类的模型建立需要大量的内存
- 使用懒散学习方法,基本上不学习,导致预测时速度比起逻辑回归之类的算法慢
- 相比决策树模型,KNN模型可解释性不强
- k值大小的选择
11、支持向量机(SVM)
-
定义:SVM是英文Support Vector Machine首字母缩写,中文名支持向量机
-
思想:SVM就是要找到一个超平面把两类点进行最优分类;如果数据中有噪音点,为了避免过拟合需要引入松弛因子进行软间隔分类;对于线性不可分的数据,要引入核函数进行分类
-
优点:
- 解决小样本下机器学习问题。
- 解决非线性问题。
- 无局部极小值问题。
- 可以很好的处理高维数据集。
- 泛化能力比较强。
- SVM 的最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。
- 缺点:
- 对于核函数的高维映射解释力不强,尤其是径向基函数。
- 对缺失数据敏感。
- SVM算法对大规模训练样本难以实施
- 用SVM解决多分类问题存在困难
待更
12、贝叶斯
13、关联规则
14、EM
15、pagerank
三、推荐算法
1、SVD
引入
特征值分解最大的问题是只能针对方阵,即n*n的矩阵。而在实际的应用中,我们分解的大部分都不是方阵,为了解决这个问题,就引入了奇异值分解。
奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解:
A
=
Q
∑
V
T
A=Q\sum V^T
A=Q∑VT
假设A是一个mn的矩阵,那么得到的U是一个mm的方阵,U里面的正交向量被称为左奇异向量。Σ是一个mn的矩阵,Σ除了对角线其它元素都为0,对角线上的元素称为奇异值。是v的转置矩阵,是一个nn的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会将Σ上的值按从大到小的顺序排列。
求解
左奇异向量
将A和A的转置做矩阵的乘法,得到一个方阵,用这样的方阵进行特征分解,得到的特征和特征向量满足下面的等式:
(
A
A
T
)
u
=
λ
u
(AA^T)u=\lambda u
(AAT)u=λu,这里的 u就是左奇异向量。
右奇异向量
我们用矩阵A的转置乘以A,得到一个方阵,用这样的方阵进行特征分解,得到的特征值和特征向量满足下面的等式:
(
A
T
A
)
υ
=
λ
υ
(A^TA)\upsilon=\lambda \upsilon
(ATA)υ=λυ,这里的
υ
\upsilon
υ就是我们要求的右奇异向量。
奇异值
A = Q ∑ V T A=Q\sum V^T A=Q∑VT
A T = V ∑ Q T A^T=V\sum Q^T AT=V∑QT
A T A = V ∑ Q T Q ∑ V T = V ∑ 2 V T A^TA=V\sum Q^TQ\sum V^T=V\sum ^2V^T ATA=V∑QTQ∑VT=V∑2VT
所以满足以下关系
σ
i
=
λ
i
\sigma_i=\sqrt{\lambda_i}
σi=λi
其中
σ
i
\sigma _{i}
σi就是奇异值,奇异值跟特征值类似,在矩阵Σ中也是从大到小排列
LDA
-
是复杂度很高,运算速度慢,效率太低
-
是预测结果不准确,甚至预测不出来
-
还有另外一个很重要的因素就是变量之间的相关性和变量的贡献度很低(就是个别变量根本与结果时无关的,也就是统计学里的不显著)。
用途:数据预处理中的降维,分类任务
目标:LDA关心的是能够最大化类间区分度的坐标轴成分
将特征空间(数据集中的多维样本)投影到一个维度更小的 k 维子空间中,同时保持区分类别的信息
原理:投影到维度更低的空间中,使得投影后的点,会形成按类别区分, 一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近方法
LDA分类的一个目标是使得不同类别之间的距离越远越好, 同一类别之中的距离越近越好
PCA
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征
PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标
轴选择是原始数据中方差最大的方向,第二个新坐标轴
选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴
是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
FM
因子分解机(FactorizationMachine,FM)是由SteffenRendle在2010年提出的一种基于矩阵分解的机器学习算法。算法的核心在于特征组合,以此来减少人工参与特征组合工作。
在传统的逻辑回归等相关变种模型里面均认为特征是相互独立的,但是,实际在很多情况下特征之间的依赖关系却是不能忽视的,因此需要进行特征交叉。在大多数业务场景下,类别特征做完one-hot后会变得相当稀疏,尤其是在进行特征交叉后,特征空间变得很大。
FM模型就是引入了多项回归来加入特征的关联性,通常对线性模型增加一个二阶多项式。但是对于这些二次项系数,都需要大量的非零样本来进行求解。但是很多时候特征空间是相当稀疏的,这种情况下参数估计变得相当不准确。
所以FM引入了矩阵分解的思路,对交叉的二次项的系数矩阵提供了分解。分解的思想:由于特征之间不是相互独立的,因此可以使用一个隐因子来串联。类似于推荐算法中,可以将一个评分矩阵分解为用户矩阵和物品矩阵,每个用户和物品都可以用一个隐向量来表示。FM采取了类似思想,将所有的二次项系数组成一个对称矩阵W,W可以被分解为
V
T
V
V^TV
VTV,V的第j列即第j维特征的隐向量。
FFM
场感知分解机器(Field-aware Factorization Machine ,简称FFM)最初的概念来自于Yu-Chin Juan与其比赛队员,它们借鉴了辣子Michael Jahrer的论文中field概念,提出了FM的升级版模型。通过引入field的概念,FFM把相同性质的特征归于同一个field。
假设每条样本的n个特征属于f个field,那么FFM的二次项有nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。因此可以把FM看作是FFM的特例,即把所有的特征都归属到一个field是的FFM模型。
FFM优点
:
增加field的概念,同一特征针对不同field使用不同隐向量,模型建模更加准确
FFM缺点
:
计算复杂度比较高,参数个数为nfk,计算复杂度为O(kn2)
注意:
-
样本归一化。对样本进行归一化,否则容易造成数据溢出,梯度计算失败
-
特征归一化。为了消除不同特征取值范围不同造成的问题,需要对特征进行归一化
-
Early stopping。一定要设置该策略,FFM很容易过拟合
-
省略零值特征。零值特征对模型没有任何贡献,省略零值特征,可以提高FFM模型训练和预测的速度,这也是稀疏样本采用FFM的显著优势
wide&deep
wide &deep模型的思想来源是根据人脑有不断记忆并且泛化的过程,这里讲宽线形模型和深度神经网络模型相结合,汲取各自优势形成了wide &deep模型,以用于推荐排序。
- 记忆(memorization)即从历史数据中发现item或者特征之间的相关性。这里通过大量的特征交叉产生特征交互作用的“记忆”,高效且可解释。但要泛化需要更多的特征工程。
- 泛化(generalization)即相关性的传递,发现在历史数据中很少或者没有出现的新的特征组合。这里通过Embedding的方法,使用低维稠密特征的输入,可以更好的泛化训练样本中未出现的交叉特征。
联合训练
:
联合训练是指wide模型和deep模型组合在一起,在训练的时候进行加权求和,并且通过采用logistic作为损失函数来进行训练。会同市优化所有的参数,通过将wide模型和deep模型在训练时进行加权求和的方式进行。
在训练的时候通过对梯度执行相互传播算法,wide和deep同时分别训练自己的参数。这样就可以使用wide中的组合特征能够记住那些稀疏的、特定的规则;deep通过embedding来泛化推荐一些相似的物品。
deepFM
- FM因为计算复杂度的原因一般都只用到了二阶特征组合
- DNN离散特征的处理,我们使用的是将特征转换成为one-hot的形式,但是将One-hot类型的特征输入到DNN中,会导致网络参数太多
DeepFM包含两部分:神经网络部分与因子分解机部分,分别负责低阶特征的提取和高阶特征的提取。这两部分共享同样的输入
- FM部分是一个因子分解机。因为引入了隐变量的原因,对于几乎不出现或者很少出现的隐变量,FM也可以很好的学习
- 深度部分是一个前馈神经网络。
在第一层隐含层之前,引入一个嵌入层来完成将输入向量压缩到低维稠密向量。
网络结构有两个有趣的特性,1)尽管不同field的输入长度不同,但是embedding之后向量的长度均为K。2)在FM里得到的隐变量Vik现在作为了嵌入层网络的权重。
优点:
- 没有用FM预训练向量V,没有用V初始化DNN–FNN需要FM预训练来初始化DNN
- FM模块不是独立的,而是跟整个模型一起训练学习得到的,是一个端到端的学习–wide&deep是分开学习的
- 不需要特征工程,而是直接输入原始特征进行学习
- 训练效率高-PNN内积/外积参数多,训练效率低
待更