山东大学机器学习大作业

文章介绍了DLRM模型在数据处理与可视化中的应用,特别是在处理CTR问题上的性能。DLRM结合了协同过滤和预测分析,有效地处理大规模数据。模型包括Embedding层、特征交互和预测网络,适用于处理离散特征和特征交叉。在一次比赛中,使用DLRM模型取得了0.17369的得分,排名850,展示了其在推荐系统中的潜力。
摘要由CSDN通过智能技术生成

数据处理与可视化

这里是DLRM模型数据集预处理模块:

args.ln_emb = ln_emb.tolist()

m_spa = args.arch_sparse_feature_size

ln_emb = np.asarray(ln_emb)

num_fea = ln_emb.size + 1 # num sparse + num dense features

m_den_out = ln_bot[ln_bot.size - 1]

Sparse fea = 26, Dense fea = 13,有26个稀疏的类别,密集的数据有13个类别;

其中ln_bot=[ 13 512 256 64 16],m_den_out = 16(最后一个输出维度)。Dense数据进入的维度是13,出来的维度是16.

下面是查看了1,2,3....服装的会话数量百分比:

上面是特征类别的频数:

结果展示

下面分别是使用MMR,ItemCF,DLRM模型方法得到的结果,其中使用DLRM模型的得分为0.17369,算是比较好的,排名当时在850。

模型算法描述

经过多次尝试不同模型和方法:比如MMR,ItemCF,DLRM等等,由于DLRM取得的分数和排名较好,所以我这里对DLRM进行说明。

概述

DLRM是深度学习推荐模型的实现,用于个性化推荐。DLRM通过结合协同过滤和基于预测分析的方法的原理,在其他模型的基础上取得了进展,这使得它能够有效地处理生产规模的数据,并提供最先进的结果。

DLRM是Facebook在2019年提出的用于处理CTR问题的算法模型,与传统的CTR模型并没有太大的差别,文章本身更注重的是工业界对于深度模型的落地,在文中介绍了很多深度学习在实际落地过程中的细节,包括如何高效训练。在此我们更多的是关注模型本身,尝试揭开DLRM模型的本质。在DLRM模型中,突出解决两个问题:

第一,如何处理离散特征。CTR的训练样本中包含了大量的离散的类别特征,这样的数据是不能直接放入到深度学习模型中,在DLRM中,通过Embedding层将离散的特征转化成稠密的特征;

第二,如何做特征交叉。特征交叉对于CTR问题的求解具有重要的作用,在DLRM模型中,模仿着FM算法中的做法,对向量两两做点积。

模型结构

dense feature和sparse indices嵌入的向量必须相同。dense用MLP来处理成一个向量,sparse indice用embdding_lookup嵌入到相同维度的向量。

模型图如下:

设计的推荐系统架构如上图所示。整个模型主要包含:特征工程(包含 spare 和 dense 特征),用于特征建模 Embedding 和 Embedding Lookup,用于特征转换的 NNs,用于特征交互的 Interactions 以及最后的预测 NNs。

特征表示Embedding

在实际的推荐场景中,用户和商品通常都有丰富的特征信息。用户的特征通常用性别,年龄,居住地等。如何将这些类别特征转为模型可以处理的向量。做法是将这些类别特征编码为one-hot 的向量,然后通过 embedding lookup 来得到其表示。

特征交互Interaction

在得到特征的表示后,我们通过内积等简单操作实现模型的预测:

但是,如果我们能够抓住的描述特征关联性,那么模型的预测能力可能会进一步提升。例如,经典的FM:

模型预测NNs

有了特征的表示及其交互之后,我们可以将其送入到MLP 中,并利用 Sigmoid 函数预测最终的点击概率。

模型并行

在工业界的大规模数据下,模型并行是必不可少的一个步骤。DLRM 模型的主要参数来自于特征的 embedding,后面特征交互和模型预测部分的参数其实很少。假设我们有一亿个用户,如果对其 ID 进行 embedding,那么 embedding matrix 就会有一亿行,这是一个非常大的参数矩阵。

对于特征embedding 部分,这里采用的是模型并行,将一个大的embedding 矩阵放到多个设备上,然后更新相应的特征 embedding。

对于特征交互和模型预测部分,这里的参数量相对较少而且用户/商品的数量无关,本文采用的是数据并行的方式。在多个设备上计算梯度,然后将梯度合并来更新模型。

总结:

其实随着信息量越来越大,推荐系统也变得越来越重要,因为我们不可能看到信息的全部。更多时候我们看到的东西全都是推荐系统展示给我们的。这样一个直接的影响就是,推荐系统或多或少都在影响着我们对世界的认知。推荐系统是能在几乎所有产品中存在的载体,它几乎可以无延时地以用户需求为导向,来满足用户。其代表的意义和效率,远远超过传统模式。

在这次比赛中,我学会了运用课堂所学的知识去实践,比较完全基于统计的方法ItemCF。也接触了学习接触了一些深度学习,比如一些知识点和推荐算法模型等等。这次比赛花费了很多心血,结果也是令人满意的,对机器学习这一领域接触也更深了,拓宽了视野,促使我成长!

作业一(Matlab) 假设x=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20),y=( 2.94, 4.53, 5.96, 7.88, 9.02, 10.94, 12.14, 13.96, 14.74, 16.68, 17.79, 19.67, 21.20, 22.07, 23.75, 25.22, 27.17, 28.84, 29.84, 31.78).请写出拟合的直线方程,并画图(包括原数据点及拟合的直线),请打印出来。 请使用线性回归模型来拟合bodyfat数据。数据集介绍可阅读:https://www.mathworks.com/help/nnet/examples/body-fat-estimation.html 在matlab中,在命令行中输入[X,Y] = bodyfat_dataset; 即可获得一个拥有13个属性,252个样本的数据集。使用前200个样本来获得模型,并写出你所获得的模型。使用后52个样本做测试,汇报你所获得的泛化误差。 编程实现对数回归,并给出教材89页上的西瓜数据集3.0上的结果。要求采用4折交叉验证法来评估结果。因为此处一共17个样本,你可以去掉最后一个样本,也可以用所有数据,然后测试用5个样本。在汇报结果时,请说明你的选择。请在二维图上画出你的结果(用两种不同颜色或者形状来标注类别),同时打印出完整的代码。 作业二 采用信息增益准则,基于表4.2中编号为1、2、3、6、7、9、10、14、15、16、17的11个样本的色泽、根蒂、敲声、文理属性构建决策树。(本次作业可以用笔算,鼓励编程实现,但都需要列出主要步骤,其中log2(3)=1.585,log2(5)=2.322,log2(6)=2.585,log2(7)=2.807,log2(9)=3.17,log2(10)=3.322,log2(11)=3.459) 用表4.2中编号为4、5、8、11、12、13的样本做测试集,对上题的训练数据采用预剪枝策略构建决策树,并汇报验证集精度。 用表4.2中编号为4、5、8、11、12、13的样本做测试集,对题1所构建的决策树进行后剪枝,并汇报验证集精度。 作业三(Matlab) 试编程实现累积BP算法,在西瓜数据集2.0上(用训练数据)训练一个单隐层网络,用验证集计算出均方误差。要自己实现,不能直接调用现成的库函数。 作业四 下载并安装libsvm,http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ,在西瓜数据集3.0a上分别用线性核训练一个SVM。用正类1-6和负类9-14作为训练集,其余作为测试集。C取不同的值,其它参数设为默认值。作出测试正确率随C取值变化的图,C=[1 100 10000 10^6 10^8]。 换成高斯核(宽度设为1),重复上题的步骤。 作业五 以西瓜数据集2.0(见教材76页表4.1)中样本1--16为训练集训练一个朴素贝叶斯分类器,对测试样本17进行分类。请写出详细的计算过程。 假设x_k是一个班上学生的分数,对应的分数及其分布是 x_1=30, P1=0.5,一共有14个学生; x_2=18, P2=mu,有6个学生; x_3=20, P3=2mu,有9个学生; x_4=23, P4=0.5-3mu,有10个学生; 通过最大对数似然法求出mu的值。 作业六(Python) 1 使用PCA对Yale人脸数据集进行降维,并分别观察前20、前100个特征向量所对应的图像。请随机选取3张照片来对比效果。数据集http://vision.ucsd.edu/content/yale-face-database
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值