赞
踩
“Feature engineering is the art part of data science” —Sergey Yurgenson
Feature engineering is the process of using domain knowledge to extract features from raw data via data mining techniques. These features can be used to improve the performance of machine learning algorithms.—wiki
特征工程(Feature Engineering)是将数据转换为能更好地表示潜在问题的特征,从而提高机器学习性能的过程。
a.使模型更精准:好的特征工程是数据中抽取出来的对预测结果最有用的信息,可以提高模型的业务指标。
序号 | 领域 | 评价指标 | 介绍 |
---|---|---|---|
1 | classification(分类) | accuracy_score | 分类准确率分数是指所有分类正确的百分比 |
2 | balanced_accuracy_score | 计算平衡精度 | |
3 | confusion_matrix | 混淆矩阵 | |
4 | f1_score | f1值 | |
5 | jaccard_similarity_score | Jaccard相似系数得分 | |
6 | precision_recall_fscore_support | 为每个类计算precision, recall, F值和 support | |
7 | precision_score | 计算precision | |
8 | recall_score | 计算召回率 | |
9 | multilabel_confusion_matrix | 多标签混淆矩阵 | |
10 | regression(回归) | explained_variance_score | 解释回归模型的方差得分,其值取值范围是[0,1],越接近于 1说明自变量越能解释因变量的方差变化,值越小则说明效果越差。 |
11 | mean_absolute_error | 平均绝对误差 | |
12 | mean_squared_error | 均方差(Mean squared error,MSE),该指标计算的是拟合数据和原始数据对应样本点的误差的平方和的均值,其值越小说明拟合效果越好 | |
13 | mean_squared_log_error | 均方差加log | |
14 | r2_score | R2 决定系数(拟合优度) 模型越好:r2→1 模型越差:r2→0 |
b.模型更简单:好的特征工程应该使得模型复杂度更低,更加精简
ID | 评价指标 | 介绍 | |
---|---|---|---|
1 | 参数个数 | 参数量 | 模型的参数数量 |
2 | 时间复杂度 | 计算量FLOPS | 模型的运算次数 |
c. 模型更稳定: 算法模型运行更加稳定,鲁棒性更强
ID | 名称 | 评价指标 | 介绍 |
---|---|---|---|
1 | 计算稳定性 | 下溢(Underflow)和上溢(Overflow) | 受限于计算机的运算精度使得大量的微小误差积少成多造成模型失效 |
2 | 特征稳定性 | PSI = \sum{(\rho_{test}^{i} - \rho_{base}^{i})\ast \ln (\rho_{test}^{i}/ \rho_{base})}PSI=∑(ρtesti−ρbasei)∗ln(ρtesti/ρbase) | PSI是对两个日期的特征数据进行计算,可以任选其一作为base集另一则是test集,小于0.1认为特征稳定 |
3 | 模型稳定性 | psi = sum((实际占比-预期占比)/ln(实际占比/预期占比)) | 一般认为psi小于0.1时候模型稳定性很高,0.1-0.25一般,大于0.25模型稳定性差,建议重做。 |
4 | 模型稳定性 | 交叉验证 | 当算法的输入发生变化时,输出是否会随之发生较大的变化 |
特征变换(feature transformation)指的是使用数学映射从现有特征构建新特征。例如,在一组体检数据中,若提供了身高、体重等信息,想要判断受检者健康情况,单单把身高、体重两列数据不加处理地直接交给模型进行训练,训练结果就不够好。
对于离散的类别特征,往往需要进行必要的特征编码才能将其作为特征输入到模型中。常用的编码方式有OneHot编码。譬如对于性别这个特征(取值为男性和女性),使用这两种方式可以分别编码为{0,1}和{1,0}。此外还有Count Encoding和Target Encoding。Count Encoding编码,用类别的频数来编码,也可以对频数进行归一化,Target Encoding用目标变量(二分类)中的某一类的比例来编码。
归一化:使得不同尺度的数据转换到同一规格尺度
目的:
1)归一化可以让不属于同一尺度的特征值进行比较:比如身高(cm)体重(kg)
2)归一化后模型收敛会加快(运行速度快)
3)归一化对一些模型的结果影响比较大,比如聚类模型,归一化后效果更好
效果:把原始的连续型变量转换为均值为0,标准差为1的变量
公式:
\tilde{x}=\frac{{x-\bar{x}}}{\delta}x~=δx−xˉ
\overline{x}x均值, \deltaδ 是标准差。
最大最小归一化
效果:把原始的连续型变量转换为范围在[a-b]之间的变量,常见的a=0,b=1
公式:
\tilde{x}=\frac{{x-min(x)}}{max(x)-min(x)}x~=max(x)−min(x)x−min(x)
特征离散化:把连续的数值切割为少数的一些区间,例如将年龄切割为5个年龄段
目的:离散化后的特征方便探索数据的分布和相关性,同时对异常数据有很强的鲁棒性可以减少异常数据对模型的影响,对特征离散化后引入非线性,可以提升模型的预测能力。
常用的无监督的离散化方法主要有:自定义规则,等宽法,等频法等。
二值化是一种特殊的离散方法,它把连续型变量分割为0/1(是/否)类型的类别型变量,例如年龄是否大于18岁,电话号码是否是手机 城市是否是一线城市。
特征深度合成算法(结构型数据 知识图谱)
论文:Kanter, James Max, and Kalyan Veeramachaneni. “Deep feature synthesis: Towards automating data science endeavors.” 2015 IEEE international conference on data science and advanced analytics (DSAA). IEEE, 2015.
原理:
例子:
特征组合也叫特征交叉(Feature Crosses),即不同类型或者不同维度特征之间的交叉组合,其主要目的是为了弥补早期的模型无法有效的进行特征组合而产生的:
按照特征进行分类可以分为类别特征之间交叉和类别特征和数值特征之间交叉
类别特征之间交叉组合:比如用户性别、年龄、喜爱视频类别之间的交叉特征。类别特征和数值特征之间交叉组合 这类特征通常是在类别特征某个具体类别中计算一些统计量。例如用户对不同类目视频的完播率、平均播放时长等。
与非嵌入法不同,嵌入法是直接将特征交叉嵌入到模型的构建过程中。
按照特征交叉的方式可以分为非嵌入式和嵌入式
非嵌入式交叉:非嵌入式的关联方式有内积、笛卡尔积、哈达玛积以及多项式方法等。
嵌入式交叉: 利用模型可以自动进行特征的交叉组合,比如常用的 FM 和 FFM 模型等
非嵌入法和具体的机器学习算法相互独立,可以通过机器学习算法评估特征子集的效果,非嵌入法主要包括内积、笛卡尔积、哈达马内积以及多项式的方法进行组合。
模型特征交叉:
针对特征交叉的问题,工程师首先想到的是特征两两组合,这种组合特征然后在手工筛选的方式无疑是低效的。
2.2.2.1 POLY2模型
POLY2模型:
POLY2(w,x) = \sum_{j_{1} = 1}^{n-1}\sum_{j_{2} = j_{1}+1}^{n}w_{h}(j_{1},j_{2})x_{j1}x_{j2}POLY2(w,x)=j1=1∑n−1j2=j1+1∑nwh(j1,j2)xj1xj2
POLY2模型一定程度上解决了特征组合的问题,但是它本质还是线性模型,训练方法和逻辑回归一样。
缺陷:
1)在处理数据时,类别数据一般采用onehot编码,这样的话特征向量会很稀疏,再利用POLY2进行无选择的特征交叉会使原来非常稀疏的特征向量更加稀疏,会导致大部分交叉特征权重缺少有效的数据进行训练。
2)权重参数的数量由nn直接上升到n^{2}n2极大的增加了训练复杂度。
2.2.2.2 FM模型
FM模型
为了POLY2模型的缺陷,Rendle于2010年提出FM模型:
下面是FM的二阶形式:
FM(w,x) = \sum_{j_{1} = 1}^{n-1}\sum_{j_{2} = j_{1}+1}^{n}(w_{1}.w_{2})x_{j1}x_{j2}FM(w,x)=j1=1∑n−1j2=j1+1∑n(w1.w2)xj1xj2
与POLY2模型相比,主要的区别是用两个向量的内积 代替了单一的权重系数 。
FM为每个特征学习了一个隐权重向量,在特征交叉时,使用两个特征隐向量的内积w_{1}.w_{2}w1.w2作为交叉特征的权重。
FM引入隐向量的思路和矩阵分解的思路有异曲同工之妙,直接把POLY2模型n^2n2级别的权重直接降低到nknk,梯度下降过程训练FM过程中,FM的复杂度同样减低到 nknk 。
隐向量的引入也使FM可以更好的解决数据稀疏性的问题,比如推荐场景中某样本有两个特征频道(channel)和品牌(brand),某训练样本组合是(ESPN,Adidas)在POLY2中,只有ESPN和Adidas同时出现在一个样本中的时候模型才能学习到权重,而在FM中,ESPN的隐向量可以通过(ESPN,Gucci)学习,Adidas隐向量可以通过( NBC,Adidas )学习,甚至对于没有出现过的(NBC,Gucci)模型也可以学习到权重。
理论上,FM可以引申到三阶特征交叉,甚至更高维度,但是由于组合爆炸的问题,三阶FM无论是权重数量还是训练复杂度都过高。
2.2.2.3 GBDT+LR模型
FM模型只能做二阶特征交叉,要想提高特征交叉的维度会不可避免的产生组合爆炸和计算复杂度高的问题。
为了有效的解决高维特征组合和特征筛选的问题,2014年Facebook提出来GBDT+LR模型
组合模型利用GBDT自动进行特征筛选和组合,生成新的离散特征向量,然后把该特征向量当做LR模型的输入。
一个训练样本输入GBDT模型落入 某一子树,会根据每个节点的规则最终落到某个叶子节点上,那么这个叶子节点标为1,其他节点为0,综合所有子树的结果,把特征向量连接起来就是新的离散型特征向量。
事实上,决策树的深度决定了特征交叉的阶数,如果决策树深度为4那么就是3次节点分裂的结果也就是三阶特征交叉。可以看出GBDT特征组合能力远远强过FM,但是GBDT容易过拟合。
当特征经过处理之后,虽然可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,出现训练时间长的问题,因此对特征进行压缩可以有效解决训练时间过长的问题特征压缩最直接的方法就是特征降维,常见的降维方法主要是主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中。
PCA算法:
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到 个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面k个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面k个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。
LDA算法:
线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。因此,它是一种有效的特征抽取方法。使用这种方法能够使投影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。就是说,它能够保证投影后模式样本在新的空间中有最小的类内距离和最大的类间距离,即模式在该空间中有最佳的可分离性。
Embedding中文可以直译为嵌入,一般翻译为向量化或者向量映射。特别是在推荐广告和搜索为核心的互联网Embedding技术应用非常广泛。Embedding从形式上讲就是用一个低稠密的向量“表示”一个对象。这里对象可以是一个词也可以是一个电影一个商品。表示就是说Embedding向量能够表达相应对象的某些特征,同时向量之间的距离反映了对象之间的相似性。
Embedding方法首先流行于NLP领域,在大语料的输入下,Embedding可以挖掘一些潜在的知识。
Embedding技术的重要性:
1)推荐场景中大量使用onehot编码对类别id型特征进行编码,导致样本特征极度稀疏,在几乎所有的推荐模型中都会有Embedding层负责将这些高维稀疏的特征转换成低维稠密特征向量。
2)Embedding本身就是十分重要的特征向量,Embedding的表达能力更强。
3)Embedding技术对物品用户的相似度计算是最常用的一种召回层技术,结合局部敏感哈希技术之后更适合海量数据的初步筛选。
2.3.2.1 Word2vec
Word2vec
自2013年谷歌提出Word2vec以来,Embedding技术从自然语言处理推广到广告 搜索 图像 推荐等深度学习领域。Word2vec是word to vector 的简称,Word2vec是一种生成对词的向量表达的一种方法。
为了训练Word2vec模型,需要准备一组由句子组成的语料,我们假设一个长度为T的句子 w_{1} w_{2} w_{3}... w_{T}w1w2w3...wT
CBOW模型是用 w_{T}wT的周边词预测w_{T}wT,Skip-Gram是用 w_{T}wT预测w_{T}wT的周边词。
输入:选取一个 2c+12c+1 (目标词前后各取 cc个词)的滑动窗口,从语料库抽取一个句子,滑动窗口从左到右,每移动一次,窗口中的词就组成了一个训练样本。
优化目标:每个词 w_twt决定了相邻词 x_{t+1}xt+1基于极大似然法,希望所有样本条件概率p(w_{t+j}|w_{t})p(wt+j∣wt)的乘积最大
\frac{1}{T}\sum_{t = 1}^{T}\sum_{-c\leq{ j }\leq c, j\neq 0 }\log{p(w_{t+j}|w_{t})}T1t=1∑T−c≤j≤c,j=0∑logp(wt+j∣wt)
p(w_{t+j}|w_{t})p(wt+j∣wt)的定义:Word2vec模型的目的是希望用一个向量 V_wVw表示词ww,用词之间的内积 V_{i}^{T}V_{j}ViTVj表示语义的接近程度,最后套上一次softmax函数就可以对上多分类。
p(w_{O}|w_{I}) = \frac{exp(V_{wo}^{T}V_{wI})}{\sum_{t = 1}^{T}exp(V_{w}^{T}V_{wI})}p(wO∣wI)=∑t=1Texp(VwTVwI)exp(VwoTVwI)
V_{w}^{T}VwT表示要训练出的词向量V_{wI}VwI 是输入词的向量 V_{wo}^{T}VwoT是输出词的向量
2.3.2.2 Item2vec
基本思想:Word2vec是对词序列进行Embedding,那么这里的词也可以是一个商品 一部电影。
Word2vec 一个长度为T的句子 w_{1} w_{2} w_{3}... w_{T}w1w2w3...wT 优化目标
\frac{1}{T}\sum_{t = 1}^{T}\sum_{-c\leq{ j }\leq c, j\neq 0 }\log{p(w_{t+j}|w_{t})}T1t=1∑T−c≤j≤c,j=0∑logp(wt+j∣wt)
那么对应到Item2Vec就对应一个长度为K的用户历史记录w_{1} w_{2} w_{3}... w_{K}w1w2w3...wK
Item2Vec的优化目标变成了:
\frac{1}{T}\sum_{t = 1}^{T}\sum_{j\neq i }^{K}\log{p(w_{t+j}|w_{t})}T1t=1∑Tj=i∑Klogp(wt+j∣wt)
可以发现Item2Vec摒弃了时间窗口的概念,认为序列里任意两个物品都是相关的,剩下的训练过程和word2vec一致。
2.3.2.3 GraphEmbedding
GraphEmbedding是对图结构中的节点进行Embedding编码的方法,最终生成的Embedding向量一般包含图的结构信息和附近节点的局部相似性信息。
DeepWalk是早期影响力比较大的一种GraphEmbedding方法,该方法是2014年提出的,它的主要思想是在由物品组成的图结构上进行随机游走,产生大量的物品序列,然后将这些物品序列作为训练样本输入word2vec进行训练,得到物品Embedding向量。
2016年,斯坦福大学在DeepWalk的基础上更进一步,通过调整随机游走权重的方法使graph embedding的结果在网络的同质性(homophily)和结构性(structural equivalence)中进行权衡权衡。具体来讲,网络的“同质性”指的是距离相近节点的embedding应该尽量近似,节点u与其相连的节点s1、s2、s3、s4的embedding表达应该是接近的,这就是“同质性“的体现。“结构性”指的是结构上相似的节点的embedding应该尽量接近,图中节点u和节点s6都是各自局域网络的中心节点,结构上相似,其embedding的表达也应该近似,这是“结构性”的体现。
为了使Graph Embedding的结果能够表达网络的结构性,在随机游走的过程中,需要让游走的过程更倾向于宽度优先搜索(BFS),因为BFS更喜欢游走到跟当前节点有直接连接的节点上,因此就会有更多同质性信息包含到生成的样本序列中,从而被embedding表达;另一方面,为了抓住网络的同质性,就需要随机游走更倾向于深度优先搜索(DFS),因为DFS会更倾向于通过多次跳转,游走到远方的节点上,使得生成的样本序列包含更多网络的整体结构信息。
那么在node2vec算法中,是怎样控制BFS和DFS的倾向性的呢?主要是通过节点间的跳转概率。图5显示了node2vec算法从节点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。