美文网首页
特征工程

特征工程

作者: 寒寒_21b7 | 来源:发表于2018-07-27 00:27 被阅读0次

    特征工程

     我们做比赛的初衷是想在比赛中锻炼用深度学习模型解决实际问题的能力。所以我们做特征工程时更多的考虑了深度学习的特点(自动学习数据的分布,自动学习出数据的高阶特征),因此我们做特征工程的出发点是尽最大可能保留原始数据的信息。

    1、数据集:

     官方提供的数据集有三部分,
    1、用户特征文件(用户池),2、广告特征文件(广告池), 3、训练集(现实中用户(id)对特定广告(id)推送的点击情况(label -> +1,-1 ))

    2、目标分析

    首先必须通过官方提供的三个文件构建出可以用于模型训练的数据集。即将用户id替换成用户特征,广告id替换成广告特征。label变成0和1(便于做sigmoid)。之后便可以用建立好的数据集进行模型训练,爽快进行结果提交上分了。

    3、面临的问题及解决办法:

      1. 样本数据对齐:

     原始数据中广告特征属于category特征,很容易用one-hot 方式进行编码,用户特征中部分特征(age,gender等)属于category特征,也可以用one-hot方式进行编码,但是用户特征中有很多特征不是category特征,例如interest,topic,这类特征的特点是特征的values是不固定的多值(有多有少,甚至为0),无序。对于这种特征使用multi-hot编码方式,其实就是bag of words的方法,只是有效位的值只能为1。通过将广告特征和用户特征进行one-hot以及multi-hot编码后,实现了各个sample的数据对齐,紧接着产生了另外一个问题数据高度稀疏即数据集存储。

      1. 数据高度稀疏及数据集存储:

      经过one-hot和multi-hot编码之后每一个sample的维度急剧上升至几十万,而且高度稀疏,有效位(填1的位置)极少,同时自然而然的带来另外一个问题---存储。普通的存储方式(直接将0,1存入硬盘)几乎是不现实的,首先是运算过程中的内存开销他太大,其次是占用非常多的硬盘存储空间,可能硬盘大小不是问题,但是接下来的模型训练还要对文件进行读取,考虑到调试时数据的读取时间,这种方式几乎不可行。解决办法是用稀疏矩阵来表征稀疏数据,借助scipy中的sparse模块可以很容易将数据表示成csr形式的稀疏矩阵,之后再进行存储,因为稀疏表示只记录了矩阵的结构、有效位的位置和有效值,所以数据的存储大幅下降。同时我们发现现在的机器学习、深度学习框架几乎都支持对稀疏矩阵的计算,所以接下来的步骤都变得容易起来。

    4、总结

     我们的特征工程及其简陋,完全不够高大上。(很惭愧,特征工程这块没太多经验,只能简单的做一下,比赛时重心过多的放在了模型上)不过还好,因为我们的特征构建方式对原始信息的保留还可以,再加上深度学习的强学习能力,最终这种特征也能在比赛中和各路高手抗衡一下。

    相关文章

      网友评论

          本文标题:特征工程

          本文链接:https://www.haomeiwen.com/subject/kwixmftx.html