特征工程
特征归一化
特征归一化的目的是为了消除特征之间的量纲影响,使不同指标之间具有可比性,在公众号文章前我分析的赛题(工业蒸汽预测)中我们总结了L2规则的归一化,更加简单的方法还有线性函数归一化和零均值归一化
-
线性函数归一化,也称为最大值-最小值归一化,将数据映射到[0,1]这个范围内
-
零均值归一化(Z-Score Normalizationn)将数据映射到均值为0,标准差为1的分布上,公式如下
通过梯度下降求解的模型,归一化会对收敛速度产生影响,因为通常情况下都需要归一化,包括线性回归,逻辑回归,支持向量机等,但是决策树一般不需要进行归一化
类别型特征的转换
类别型特征是指在有限选项中取值的特征,通常为字符串形式,决策树等少数模型能直接处理字符串形式的输入,而逻辑回归,SVM等模型必须将类别特征转换为数值特征后才可以正常工作
-
序号编码:例如我们的成绩,可以转化为优秀,良好,及格三个等级,就可以分别用3,2,1表示,转换后依然可以保留大小关系
-
独热编码(one-hot):通常用于处理类别间不具有大小关系的特征,例如血型中,我们的A型血可以表示为(1,0,0,0),B型血可以表示为(0,1,0,0)
-
二进制编码,和独热编码的思想类似,不同点在于二进制编码中允许多位为1
高维组合特征的处理
我们将一阶离散特征进行两两组合,就形成了高阶组合特征,例如下面,我们有两组特征
- [“中文”,“英文”,“日文”]
- [“电影”,“电视剧”,“小说”]
这样就可以组成 3 * 3 = 9 种特征组合,分别如下:
- [“中文电影”,“中文电视剧”,“中文小说”,“英文电影”,“英文电视剧”,“英文小说”,“日文电影”,“日文电视剧”,“日文小说”]
但是如果是引入了ID类型的特征数据时,通常需要降维,比如一个推荐问题,例如我们在淘宝上买东西,可能有这么一个组合特征{uid,item}代表着用户uid是否点击了过商品item的商品页,但是如果有10000个用户,商品有10000个时候,这样组合后的特征数就会很大,所以就需要进行特征降维,常见的可以采用SVD(奇异值分解)的思想,在降低参数的同时,还可以增加参数的迭代拟合数量,有效的防止过拟合
组合特征
第三种方式的思想是仿造了决策树对特征进行划分的模式,加入我们有多种特征,例如,我们现在有一组用户特征,比如年龄,性别,用户类型(试用期/付费),物品类型(食品/护肤品/电子设备)等,就可以构造一个决策树来进行特征组合
文本表示模型
词袋模型
词袋模型是最基础的文本表示类型,是将文本以词为单位切分开(将每篇文章看作是一袋子的单词,并且忽略每个单词出现的顺序),将文章表示为一个长向量,每一维表示一个单词,该维的权重表示重要程度,常用TF-IDF来计算权重:
TF-IDF(t,d)=TF(t,d)*IDF(t)
其中TF(t,d)为单词t在文本中出现的频率,IDF(t)是逆文档频率,用来衡量单词t对表达语义所起的重要性,表示为
IDF(t) = log(a / (b + 1))
其中,a为文章总数,b为包含单词t的文章种数
N-gram模型
N-gram模型是一种语言模型,对于其中由N个词组成的语句片段,我们假设第N个词出现与否只与前N-1个词相关,整个语句出现的频率就是这N个词概率的乘积
主题模型
词袋模型和N-gram模型都无法识别两个不同的词或词组是否有相同的主题,而主题模型可以将具有相同主题的词或词组映射到同一个维度上,映射到的这一个维度表示某个主题
词嵌入
词嵌入是一类将词向量化的模型的统称,核心思想是将每个词语都映射到低维空间(K为50-300)的一个稠密向量
One-hot编码
由于本题基本信息字段不多,涉及的又是有关电商平台用户购买预测业务,所以可以去观察一下数据,基本信息中有年龄,性别,所属,包括设备等信息,但其实对数据分析之后,有一些数据列的使用是可选的,在这一步,我当时是画图了,认为有一些列(例如性别)出现了太多的空值,以及设备列种类居多,可能关联不大,所以没有用,但在竞赛中,建议小伙伴有余力还是多试试,我最终选择了onehot编码,然后输入到特征组中,简单介绍一下onehot编码
TF-IDF提取
词频逆向统计是一种用于信息检索和文本挖掘的信息检索技术,是一种针对关键词的统计分析方法,用于评估一个词对一个文件集或者一个语料库的重要程度。一个词的重要程度跟它在文章中出现的次数成正比,跟它在语料库出现的次数成反比。这种计算方式能有效避免常用词对关键词的影响,提高了关键词与文章之间的相关性。关于TF-IDF进一步介绍以及其他特征构建可
FastText/Word2Vec
由于用户行为序列信息是经过平台脱敏处理后的数据,而且每组行为的长度都是不一样的,所以需要将这些序列预处理,这里可以视为一个文本预处理问题,将序列看成一组文本,需要将文本转化为模型能够识别的向量,FastText/Word2Vec两个模型大同小异,都是国外人研发的,是一类比较好上手的文本处理库
这两种模型其实在底层都是基于Skip-grow和cbow两种词向量训练方法,是早期nlp领域的研究理论,举例来说,我们都做过英文阅读理解,那么skip-grow解决的问题就是我们现在有了一个词语,要去推断词语对应的上下文要填什么句子,而cbow解决的就是我们现在有了上下文,需要结合上下文去推断这个词语本身,相比于Word2Vec,FastText的训练速度更快,但是效果二者都基本相差无几,底层都是浅层的神经网络
最后将所有输入向量进行组合一下,就可以准备放到模型里训练了,整个做特征的时间在后期花了我廷多时间,同时特征数据量也挺大的,在embedding的过程中得耐下心来去花费一些实践训练,同时记得保存模型结果