有这么一句话在业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。所以特征工程的目的是最大限度地从原始数据中提取特征, 以供算法和模型使用。

特征类型

  • 普通离散特征
    职业, 婚姻状态等, 同常枚举值不超过100个.
  • id类特征
    如淘宝上的活跃卖家, 可能就上千万了.
  • 连续实值特征
    即 continuous real-valed feature.
    如 身高,体重.

tf中的特征处理

见参考[3].
诸如 连续值按区间边界分桶, string枚举值分配整数id, 还有对稀疏高维特征做 embedding等.

清洗

特征交叉

这里写图片描述
figure gif动图, 描述特征交叉

一般用在LR中. LR只有线性的表达能力, 所以做特征交叉可以额外获得一些非线性表达.
如在个性化推荐中, 将用户的年龄离散化成10个档, 用户的性别又是2个档, 彼此交叉后就有了额外的20个特征.

采样

为了让样本均衡, 可以对某些类别的样本做欠采样或过采样处理.

欠采样

undersampling.
以一定的概率采样.

过采样

oversampling.
重复采样.

数据变换

离散化

分布律如图所示.

  1. 等频划分
    划分后, 图中每档的面积相同, 即每档的人数相同. 建议使用maxcompute的percentrank()函数,
  2. 等宽划分
    对横坐标按照固定间距p进行划分, 即第一档为[a,a+p), 第二档为[a+p,a+2p)

正规化

见参考[2]

指定列的正规化

正规化, Normalization, 又叫归一化.
它会改变原有数据的分布, 使之落入一个小的特定区间.
他会将原有数据转化为无量纲的纯数值, 便于不同单位的指标进行比较.
在多指标评价体系中,由于各评价指标的性质不同,通常具有不同的量纲和数量级。当各指标间的水平相差很大时,如果直接用原始指标值进行分析,就会突出数值较高的指标在综合分析中的作用,相对削弱数值水平较低指标的作用。因此,为了保证结果的可靠性,需要对原始指标数据进行标准化处理。

  • min-max标准化
    KaTeX parse error: Got function '\min' with no arguments as subscript at position 15: x^*=\frac{x-x_\̲m̲i̲n̲}{x_\max-x_\min…
    结果落入[0,1]之间.
    这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。
  • log函数转换
    x ∗ = log ⁡ 10 x l o g 10 max ⁡ x^*=\frac{\log_{10} x}{log_{10}\max} x=log10maxlog10x
  • z-score标准化
    最常见的标准化方法就是Z标准化,也是SPSS统计软件中最为常用的标准化方法.
    x ∗ = x − μ σ x^*=\frac{x-\mu}{\sigma} x=σxμ
    其中μ为所有样本数据的均值,σ为所有样本数据的标准差。

向量的正规化

把一个向量转化为单位向量, 即为向量的正规化.
正规化的好处是, 计算 a,b 的cosine similarity, 只算 dot product 就可以了.
a = ( x 1 , x 2 , . . . , x n ) a=(x_1,x_2, ... , x_n) a=(x1,x2,...,xn)
a ′ = ( x 1 ∣ a ∣ , x 2 ∣ a ∣ , x n ∣ a ∣ ) a'=(\frac {x_1}{|a|} , \frac {x_2}{|a|}, \frac {x_n}{|a|} ) a=(ax1,ax2,axn)
原向量为a, 正规化后的单位向量为a’.
python 代码见下:

# 向量的正规化
import numpy as np
def normalize(v):
    norm=np.linalg.norm(v)
    if norm==0: 
       return v
    return v/norm

对数变换

对数据做平滑处理时可以用到. 待补充.

  • l o g 2 ( 1 + x ) log_2(1+x) log2(1+x)
    经过的点有 (0,0),(≈30, ≈5),(≈128, ≈7),(≈255, ≈8),(≈512, ≈9), (≈1023, ≈10),(≈33000,≈15.00) 等
    在这里插入图片描述

  • y = 1 l o g 2 ( 1 + x ) y=\frac1{log_2(1+x)} y=log2(1+x)1
    搜索排序评价指标ndcg会用到.
    令定义域x>=1, 经过的点 (1,1),(≈2, ≈0.62),(≈3, ≈0.5),(≈4, ≈0.43),(≈10, ≈0.29) .
    在这里插入图片描述

  • y = l o g 2 x y=log_2x y=log2x
    经过的点有 (1,0),(2,1)等
    在这里插入图片描述

参考

  1. 使用sklearn做单机特征工程
  2. 皮皮blog的 数据标准化/归一化normalization
  3. tf中的特征处理, tf.feature_column
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐