精华内容
下载资源
问答
  • 数据挖掘交叉特征案例
  • 特征工程——特征交叉、交叉特征、特征组合 关于特征交叉的作用以及原理,我这里不进行详细描述,因为大佬们已经说得很清楚了,这里就附上几个连接: 特征组合&特征交叉 (Feature Crosses) 结合sklearn进行特征...

    特征工程——特征交叉、交叉特征、特征组合

    关于特征交叉的作用以及原理,我这里不进行详细描述,因为大佬们已经说得很清楚了,这里就附上几个连接:

    特征组合&特征交叉 (Feature Crosses)

    结合sklearn进行特征工程

    对于特征离散化,特征交叉,连续特征离散化非常经典的解释

    下面说怎样制作和交叉特征:

    多项式生成函数:

    sklearn.preprocessing.PolynomialFeatures(degree=2, interaction_only=False, include_bias=True)
    

    参数说明:

    • degree:默认为2,多项式次数(就同几元几次方程中的次数一样)
    • interaction_only:是否包含单个自变量**n(n>1)特征数据标识,默认为False,为True则表示去除与自己相乘的情况(例: a 2 , b 2 a^{2},b^{2} a2,b2
    • include_bias:是否包含偏差标识,默认为True,为False则表示不包含偏差项

    举例说明:

    import numpy as np
    from sklearn.preprocessing import PolynomialFeatures
    
    X = np.arange(6).reshape(3, 2)
    
    X
    
    array([[0, 1],
           [2, 3],
           [4, 5]])
    
    poly = PolynomialFeatures(degree = 2)
    
    poly.fit_transform(X)
    
    array([[ 1.,  0.,  1.,  0.,  0.,  1.],
           [ 1.,  2.,  3.,  4.,  6.,  9.],
           [ 1.,  4.,  5., 16., 20., 25.]])
    
    # 设置参数interaction_only = True,不包含单个自变量****n(n>1)特征数据
    poly = PolynomialFeatures(degree = 2, interaction_only = True)
    
    poly.fit_transform(X)
    
    array([[ 1.,  0.,  1.,  0.],
           [ 1.,  2.,  3.,  6.],
           [ 1.,  4.,  5., 20.]])
    
    # 再添加 设置参数include_bias= False,不包含偏差项数据
    poly = PolynomialFeatures(degree = 2, interaction_only = True, include_bias=False)
    
    poly.fit_transform(X)
    
    array([[ 0.,  1.,  0.],
           [ 2.,  3.,  6.],
           [ 4.,  5., 20.]])
    
    展开全文
  • 为提高结构光三维重构系统的点云匹配速度及精度,提出二维视图及三维点云交叉特征点协同匹配的方法。首先,通过投影变换及维度映射关系实现待拼接投影图像的归一化,经预处理后提取端点及分叉点作为关键点,对同类点进行...
  • python_多项式交叉特征

    2019-12-16 11:37:07
    python_多项式交叉特征 import numpy as np import pandas as pd from sklearn.preprocessing import PolynomialFeatures #polynomial feature 多项式交叉特征 def col_pf(p=3,col=None,title='PF'): '''不含常数...
    # 定义:# 多项式特征可以理解为对现有特征的乘积,比如现在有特征A,特征B,特征C,那就可以得到特征A的平方(A^2),A*B,A*C,B^2,B*C以及C^2. 新生成的这些变量即原有变量的有机组合,换句话说,当两个变量各自与y的关系并不强时候,把它们结合成为一个新的变量可能更会容易体现出它们与y的关系.# 变量与结果 之间不是线性关系, 或者两个变量之间相互依赖时, 用多项式交叉特征# 多项式特征和 交叉特征
    import numpy as np
    from sklearn.preprocessing import PolynomialFeatures
    ​
    # 특성 행렬을 만듭니다.
    features = np.array([[2, 3],
                         [2, 3],
                         [2, 3]])
    features
    # 创建 PolynomialFeatures 对象  
    polynomial_interaction = PolynomialFeatures(degree=2, include_bias=False)# 创建 2阶的多项式特征和  交叉特征
    polynomial_interaction.fit_transform(features)
    array([[2., 3., 4., 6., 9.],
           [2., 3., 4., 6., 9.],
           [2., 3., 4., 6., 9.]])# interaction_only=True  创建只包含多项式的特征
    interaction = PolynomialFeatures(degree=2, 
                                     interaction_only=True, include_bias=False)
    interaction.fit_transform(features)
    array([[2., 3., 6.],
           [2., 3., 6.],
           [2., 3., 6.]])
    

    python_多项式交叉特征

    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import PolynomialFeatures
    #polynomial feature 多项式交叉特征
    
    def col_pf(p=3,col=None,title='PF'):
        '''不含常数项,含自乘项'''
        assert p<=3
        assert p>1
        l=len(col)+1
        col=[]
    #     for i in range(1,l):
    #         col.append(title+str(i))
        if p>=2:
            col=col+[title+str(i)+str(j) for i in range(1,l) for j in range(i+1,l)]
        if p>=3:
            col=col+[title+str(i)+str(j)+str(k)  for i in range(1,l) for j in range(i+1,l) for k in range(j+1,l)]
        return col
    
    def poly_fea(input=None,degree=2,title='PF'):
        poly=PolynomialFeatures(degree=degree,interaction_only=True,include_bias=False)
        pf_trans=poly.fit_transform(input)
        pf_trans=pf_trans[:,input.shape[1]:]
        
        col=col_pf(p=degree,col=input.columns,title=title)
        
        return pd.DataFrame(pf_trans,index=input.index,columns=col)
    
    展开全文
  • 我们提出了一种使用零交叉特征和轮廓测量来提取边缘的方法。 该方法与以前的方法明显不同,因为它提供了检测零交叉的定量分析方法。 此方法有两个主要步骤。 首先,通过轮廓测量的值获得边缘强度。 其次,根据边缘...
  • 再利用梯度下降法求出V,即得到每个特征的隐含向量(能反映交叉信息),同时训练即可得到分类或回归模型。 注:V的维度为,的维度为,为超参,表示向量维度。 FFM算法 在FM的基础上引入了类别(field)的概念,n个...

    FM算法

    公式:

    $$y = w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw_{ij}x_ix_j$$

    其中

    \sum_{i=1}^n\sum_{j=i+1}^nw_{i,j}x_ix_j=\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j

    W=VV^T

    其中V =(v_1,v_2,...,v_n)

    利用上三角矩阵=(对称矩阵-对角矩阵)/2的思想,将其化简为

    \sum_{i=1}^n\sum_{j=i+1}^nw_{ij}x_ix_j=\frac12(\sum_{f=1}^k(\sum_{i=1}^nv_{i,f}x_i)^2-\sum_{i=1}^nv_{i,f}^2x_i^2)

    再利用梯度下降法求出V,即得到每个特征的隐含向量(能反映交叉信息),同时训练即可得到分类或回归模型。

    注:V的维度为n \times kv_i的维度为1 \times kk为超参,表示向量维度。

    FFM算法

    在FM的基础上引入了类别(field)的概念,n个特征(已one-hot编码)属于f个field。

    y = w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^n<v_{i,f_j},v_{j,f_i}>x_ix_j

    此时相对于FM中的v_{i(1 \times k)},FFM中的v_i维度为n \times kv_i中有f个向量是不相同的,同一fiield下的向量是相同的。

    DeepFM算法

    对高阶特征组合进行建模

    FM算法中 

    y = w_0+\sum_{i=1}^nw_ix_i+\sum_{i=1}^n\sum_{j=i+1}^nw_{ij}x_ix_j =\sum_{i=1}^n\sum_{j=i+1}^n<v_i,v_j>x_ix_j

    FM layer中的+的输入为onehot编码,x的输入为词向量v_i,ANN的输入也是词向量v_i

    最后的\hat{y} = activation(y_{FM}+y_{DNN})

    DCN算法(Deep & cross network)

    其中x_0是连续变量和分类变量embedding向量的组合向量

    x_0=[x_{embed,1}^T,x_{embed,2}^T,...,x_{embed,k}^T,x_{dense}^T]^T

    x_1=x_0x_0^Tw_{c,0}+b_{c,0}+x_0

    x2=x_0x_1^Tw_{c,1}+b_{c,1}+x_1

    通过不断地叠加,实现了高阶的交叉cross。

    参考大佬文章:https://zhuanlan.zhihu.com/p/55234968

    xDeepFM算法

    DCN中没有考虑field概念,xDeepFM考虑了filed概念,核心是CIN的理解:

    x^0中的m行表示有m个特征(field),每个field的向量维度为D,x^0一开始是初始化的向量矩阵,由embedding vector组成。

    后续再通过如下算式进行特征的高阶交叉:

    X_{h,*}^k=\sum_{i=1}^{H_{k-1}}\sum_{j=1}^mW_{ij}^{k,h}(X_{i,*}^{k-1}\circ X_{j,*}^0)

    首先理解X_{i,*}^{k-1}\circ X_{j,*}^0

    x^k中有H_k个field,x^0中有m个field,进行点乘的维度效果为:

    (H_k \times 1)\times(1 \times m)=(H_k,m)

    z1 = x1*y1;z2 = x2*y1,z3 = x3*y3;z4 = x1*y4

    最后得到一个维度为(H_k,m,D)的矩阵,可以理解为有D个样本(每个样本是一个embedding维度),每个样本有H_k个特征和m个特征的交叉,即有H_k\times m个值。

    再理解W_{i=1}^{k.h}(X_{i,*}^{k-1}\circ X_{j,*}^0)

    z_1 = \sum_{i=1}^3w_ix_i

    其中向量(x_1,x_2,x_3)为权重向量,最后得到维度为(H_k,D)的矩阵x^{k+1},最后对每个filed的向量进行加总求和实现sum pooling。

    在用代码实现过程中,可将维度为(H_k,m,D)的矩阵的矩阵进行压缩,得到维度为(n_{samples},D,H_k\times m)的矩阵,然后用维度为(1,H_k\times m,n_{chanels})的filter进行conv1d的卷积操作,再进行sum_pooling操作。

    参考大佬文章:https://zhuanlan.zhihu.com/p/57162373

    展开全文
  • 业界常用的方法有人工特征 + LR,GBDT + LR,FM 和 FFM 等模型。 近几年提出了很多基于 FM 改进的方法,如 DeepFM,FNN,PNN,DCN,xDeepFM 等,今天给大家分享 FM。 Factorization Machine (FM) 是由 Steff...

    在计算广告和推荐系统中,CTR 预估是非常重要的一个环节,判断物品是否进行推荐,需要根据 CTR 预估的点击率排序决定。业界常用的方法有人工特征 + LR,GBDT + LR,FM 和 FFM 等模型。

    近几年提出了很多基于 FM 改进的方法,如 DeepFM,FNN,PNN,DCN,xDeepFM 等,今天给大家分享 FM。

    Factorization Machine (FM) 是由 Steffen Rendle 在 2010 年提出的,模型主要通过特征组合来解决大规模稀疏数据的分类问题。

    1、什么是 Factorization Machine?

    One-Hot 带来的问题?

    在面对 CTR 预估的问题的时候,我们常常会转化为下面这种类型的二分类问题。

    点击性别国别
    1中国
    0美国
    1法国

    由于 性别,国别 等特征都是类别特征,所以在使用的时候常常采用 One-Hot Encoding 将其转化为数值类型。

    点击性别 = 男性别 = 女国别 = 中国国别 = 美国国别 = 法国
    110100
    001010
    101001

    上图可以看出,在经过 One-Hot 编码之后,每个样本的特征空间都变大了许多,特征矩阵变得非常稀疏,在现实生活中,我们常常可以看见超过 10⁷ 维的特征向量。

    如果我们采用单一的线性模型来学习用户的点击,打分习惯,我们很容易忽略特征潜在的组合关系,比如:女性喜欢化妆品,男性喜欢打游戏,买奶粉的用户常常买尿不湿等。

    二阶多项式核 SVM

    SVM 为了学习交叉特征,引入了核函数的概念,最简单直接的做法就是为两两的特征组合分配一个权重参数。这些新的权重参数和原始特征对应的参数一样,交给模型去在训练阶段学习。如此一来就形成了如下的预测函数:

    这实际上就是核函数选择为二阶多项式核的 SVM 模型。这样设计的模型看起来能够学到特征的两两交叉带来的信息,但这只是理论上的改进,但是模型在处理大量稀疏数据时,没有很好的泛化能力。

    由于 w i , j w_{i,j} wi,j 的取值完全取决于 x i x_i xi x j x_j xj 的乘积,在数据稀疏的场景下,可能存在训练集中 x i x j x_ix_j xixj 始终为零的情况,这样一来,模型就无法有效的更新权重 w i , j w_{i,j} wi,j 了,更进一步,在预测阶段,模型遇到 x i x j x_ix_j xixj 不为零的情况就很难有效的泛化。

    因子分解机模型

    既然二阶多项式核 SVM 泛化性能不足的原因是 w i , j w_{i,j} wi,j 的取值完全取决于 x i x_i xi x j x_j xj 的乘积,那么最直接的办法就是突破这一限制了。

    FM 模型的解决办法是为每个维度的特征 ( x i x_i xi) 学习一个表征向量 ( v i v_i vi, 其实可以理解为特征 ID 的 Embedding 向量)。而后将 x i x_i xi x j x_j xj 的乘积的权重设定为各自表征向量的点积,也就是有如下形式的预测函数:

    显然,FM 模型也具有二阶多项式核 SVM 的优点:能够学习到特征两两交叉带来的信息。

    FM 通过对二阶参数加以限制,减少模型的自由度,分解为两个低秩矩阵的乘积。

    通过下面这个表达可以看出,FM 很像是计算每个经过 One-Hot 编码变化的特征 Embedding,然后学习不同特征之间 Embedding 相似度对于最后预测结果的影响。由于我们可以将上千万维的稀疏向量压缩为几十,或者几百维的 Embedding,极大地减小了模型的参数数量级,从而增强模型的泛化能力,得到更好的预测结果。

    我们回到上一小节举的例子:训练集中 x i x j x_ix_j xixj 始终为零。在二阶多项式核 SVM 中,由于参数权重 w i , j w_{i,j} wi,j 得不到更新,模型无法学到 x i x_i xi x j x_j xj 交叉带来的信息。但是在 FM 中, x i x_i xi x j x_j xj 的参数并不完全由 x i x_i xi x j x_j xj 的乘积决定。具体来说,每一维特征的表征向量由该维特征与其它所有维度特征的交叉共同决定。于是,只要存在某个 k k k 使得 x i x_i xi x k x_k xk 的乘积不总是为零,那么第 i 维特征的表征向量 v i → v_i^→ vi 就能够学到有效的信息——同理对 v j → v_j^→ vj 也有同样的结论。于是乎,哪怕在训练集中, x i x j x_ix_j xixj 始终为零,其参数 ⟨ v i → , v j → ⟩ ⟨v_i^→,v_j^→⟩ vi,vj 也是经过了学习更新的,因此能够表现出很好的泛化性能。

    FM 和矩阵分解

    基于矩阵分解的协同过滤是推荐系统中常用的一种推荐方案,从历史数据中收集 user 对 item的 评分,可以是显式的打分,也可以是用户的隐式反馈计算的得分。由于 user 和 item 数量非常多,有过打分的 user 和 item 对通常是十分稀少的,基于矩阵分解的协同过滤是来预测那些没有过行为的 user 对 item 的打分,实际上是一个评分预测问题。

    矩阵分解的方法假设 user 对 item 的打分 R 由 User Embedding 和 Item Embedding 相似性以及用户,物品的偏见决定。

    这些参数可以通过最小化经验误差得到:

    m i n p , q , b ∑ ( u , i ) ∈ K ( r u i − r ‾ u i ) 2 + λ ( ∣ ∣ p u ∣ ∣ 2 + ∣ ∣ q i ∣ ∣ 2 + b u 2 + b i 2 ) min_{p,q,b}\sum_{(u,i)∈K}(r_{ui}-\overline{r}_{ui})^2+λ(||p_u||^2+||q_i||^2+b_u^2+b_i^2) minp,q,b(u,i)K(ruirui)2+λ(pu2+qi2+bu2+bi2)

    从上面的叙述来看,FM 的二阶矩阵也用了矩阵分解的技巧,那么基于矩阵分解的协同过滤和 FM 是什么关系呢?以 user 对 item 评分预测问题为例,基于矩阵分解的协同过滤可以看做 FM的一个特殊例子,对于每一个样本,FM 可以看做特征只有 userid 和 itemid 的 onehot 编码后的向量连接而成的向量。另外,FM 可以采用更多的特征,学习更多的组合模式,这是单个矩阵分解的模型所做不到的!因此,FM 比矩阵分解的方法更具普遍性!事实上,现在能用矩阵分解的方法做的方案都直接上 FM 了!

    FM 如何解决效率问题?

    考虑到 FM 模型会对特征进行二阶组合,在有 n 个原始特征时,交叉特征就会有 ( n 2 − n ) / 2 (n^2-n)/2 (n2n)/2 个。因此,如果不做任何优化,FM 模型的复杂度会是 O ( n 2 ) O(n2) O(n2),具体来说是 O ( k n 2 ) O(kn^2) O(kn2)(其中 k 是表征向量的长度)。在特征规模非常大的场景中,这是不可接受的。

    那么问题来了,是否有办法将复杂度降低到 O ( k n ) O(kn) O(kn) 呢?答案是可以的,我们来看针对特征交叉项的一系列变换。

    可以看到这时的时间复杂度为 O ( k n ) O(kn) O(kn)

    参数学习

    从上面的描述可以知道FM可以在线性的时间内进行预测。因此模型的参数可以通过梯度下降的方法(例如随机梯度下降)来学习,对于各种的损失函数。FM模型的梯度是:

    由于 ∑ j = 1 n v j , f x j \sum_{j=1}^nv_{j,f}x_j j=1nvj,fxj 只与 f f f 有关,与 i i i 是独立的,可以提前计算出来,并且每次梯度更新可以在常数时间复杂度内完成,因此 FM 参数训练的复杂度也是 O ( k n ) O(kn) O(kn) 。综上可知,FM可以在线性时间训练和预测,是一种非常高效的模型。

    总结

    FM模型有两个优势:

    1. 在高度稀疏的情况下特征之间的交叉仍然能够估计,而且可以泛化到未被观察的交叉
    2. 参数的学习和模型的预测的时间复杂度是线性的

    FM模型的优化点:

    1. 特征为全交叉,耗费资源,通常 user 与 user,item 与 item 内部的交叉的作用要小于 user 与 item 的交叉。

    2. 使用矩阵计算,而不是 for 循环计算。

    3. 高阶交叉特征的构造。

    如果觉得文章对你有帮助,欢迎点赞,转发,收藏。

    原创不易,你的支持是我创作的动力!

    展开全文
  • 十分钟上手sklearn 特征提取 常用模型 交叉验证. 主要内容包括: PCA算法 LDA算法 线性回归 逻辑回归 朴素贝叶斯 决策树 SVM 神经网络 KNN算法
  • 当我们使用一次多项式拟合一组数据时,可能不太理想,如下图: 如果用直线来进行拟合的话: 如果用三次函数来拟合的话: ...如何用python的sklearn库来做呢?...from sklearn.preprocessing import Pol...
  • 推荐系统模型总结——特征交叉

    千次阅读 2020-11-18 01:08:24
    DCN改进版FMFFMDCNDCN-M背景模型改进思路反思 ...cross network的核心思想是更高效地实现显式特征交叉,每一层的计算如下: x0,xl,wl,blx_0,x_l,w_l,b_lx0​,xl​,wl​,bl​ 都是d维的列向量,形状是(d,1
  • https://www.kaggle.com/dollardollar/bosch-production-line-performance/eda-of-important-features/comments ...1、分析特征跟label的关系 2、分析,不同label的样本,其缺失的比例 3、绘制相关性热图
  • 特征交叉

    千次阅读 2018-07-03 08:13:08
    假设一个数据集有特征x1x1x_1和x2x2x_2,那么引入交叉特征值x3x3x_3,使得: x3=x1x2x3=x1x2x_3=x_1x_2 那么最终的表达式为: y=b+w1x1+w2x2+w3x3y=b+w1x1+w2x2+w3x3y=b+w_1x_1+w_2x_2+w_3x_3 为什...
  • 互联网广告特征工程 博文《互联网广告综述之点击率系统》论述了互联网广告的点击率系统,可以看到,其中的logistic regression模型是比较简单而且实用的,其训练方法虽然有多种,但目标是一致的,训练结果对效果的...
  • 特征组合&特征交叉 (Feature Crosses)

    千次阅读 2018-05-09 19:42:42
    特征组合也叫特征交叉特征组合也叫特征交叉特征组合也叫特征交叉(说三遍) 合成特征 (synthetic feature)和特征组合(Feature Crosses)不太一样,特征交叉是特征组合的一个子集。 合成特征 (syntheti...
  • 【学习笔记】学习特征交叉类经典模型POLY2、FM、FFM

    千次阅读 热门讨论 2020-11-30 19:48:30
    特征交叉类经典推荐模型——POLY...因为我们知道的,有些情况下仅仅依靠单一的特征而非交叉特征进行判断的情况下有时不仅会导致信息损失,甚至可能导致得出的结论是错误的。如果大家曾经了解过‘辛普森悖论’,那么也许
  • 机器学习之特征组合、特征交叉

    千次阅读 2018-11-15 20:27:52
    机器学习之特征组合、特征交叉 为什么需要特征组合、特征交叉特征交叉是数据特征的一种处理方式,通过特征组合的方式增加特征的维度,以求得更好的训练效果。 在实际场景中,我们常常遇到这要的情况,线性...
  • 文章目录逻辑回归POLY2特征交叉的开始FM隐向量特征交叉FFM引入特征域FM源码演化 逻辑回归 由于矩阵分解的缺陷:不方便加入用户、物品、上下文环境等相关的特征,使得矩阵分解丧失了利用很多有效信息的机会。当缺乏...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,363
精华内容 38,145
关键字:

交叉特征