特征工程

0 压缩读取

当处理比较大的数据时,可以先进行数据内存压缩
主要是根据数据的大小,选择相应的数据类型

numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']

for col in df.columns:
        col_type = df[col].dtypes
        if col_type in numerics:
            c_min = df[col].min()
            c_max = df[col].max()
            if str(col_type)[:3] == 'int':
                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:
                    df[col] = df[col].astype(np.int8)
                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:
                    df[col] = df[col].astype(np.int16)
                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:
                    df[col] = df[col].astype(np.int32)
                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:
                    df[col] = df[col].astype(np.int64)
            else:
                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:
                    df[col] = df[col].astype(np.float16)
                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:
                    df[col] = df[col].astype(np.float32)
                else:
                    df[col] = df[col].astype(np.float64)

1 负采样

如果发现正负样本差距极度不平衡,我们可以先对负样本进行下采样

下采样的目的一方面缓解了正负样本比例的问题,另一方面也减小了做排序特征的压力

需要注意:

  1. 只对负样本进行下采样(如果有比较好的正样本扩充的方法其实也是可以考虑的)
  2. 负采样之后,保证所有的用户和文章仍然出现在采样之后的数据中
  3. 下采样的比例可以根据实际情况人为的控制

做完负采样之后,更新此时新的用户召回物品列表,因为后续做特征的时候可能用到相对位置的信息。

其实负采样也可以留在后面做完特征再进行,因为做排序特征太慢了,把负采样的环节提到前面了。

1 特征归一化

特征归一化的目的是消除数据特征之间的量纲影响,使不同指标之间具有可比性。

线性函数归一化

也称最大值-最小值归一化,将数据映射到 [0, 1] 之间
x n o r m = X − X m i n X m a x − X m i n x_{norm}=\frac{X-X_{min}}{X_{max}-X_{min}} xnorm=XmaxXminXXmin

零均值归一化

将数据映射到均值为 0、标准差为 1 的分布上
z = x − μ σ z = \frac{x-\mu}{\sigma} z=σxμ

通过梯度下降求解的模型,归一化会对收敛速度产生影响

这些模型包括线性回归、逻辑回归、支持向量机、神经网络等,但对决策树模型一般不进行归一化处理

2 类别型特征的转换

类别型特征是指在有限选项内取值的特征,通常为字符串形式。

决策树等少数模型能直接处理字符串形式的输入;而逻辑回归、SVM等模型,必须将类别型特征处理成数值型特征

方法

  1. 序号编码
    如工资可以转换为高、中、低三档,分别用3、2、1表示,转换后依然保留大小关系
  2. 独热(one-hot)编码
    处理类别间不具有大小关系的特征,如男(1, 0),女(0, 1)
  3. 二进制编码
    和独热类似,不过允许多位为1,本质是利用二进制对ID进行哈希映射,比独热编码节省空间

3 特征组合

把一阶离散特征两两组合,就构成了高阶组合特征。高阶组合特征处理的目的是提高复杂关系的拟合能力,信息更具体

但是简单地将特征两两组合容易存在参数过多、过拟合等问题,可以引入决策树方法来组合特征。
决策树的特征组合

是否点击年龄性别用户类型游戏类型编码
28免费RPG(1, 1, 0, 0)
20付费动作(0, 0, 1, 1)

如第一条样本,满足图中两条路径,则可编码为 (1, 1, 0, 0)

特征提取

一般在原始数据集或合并后的数据集上进行特征的提取

  • 店铺信息
    如一般可能有不同店铺个数、不同物品类别/品牌个数、不同商品个数

  • 用户信息
    如访问的最早时间、最晚时间、活跃天数、常见行为动作

  • 用户和店铺关系
    用户点击、加购、购买、收藏等特征

组合特征

  • 进行业务的特征提取
  • 利用 countvector, tfidf 提取特征
  • Embedding 特征
  • Stacking 特征
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值