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 特征归一化
特征归一化的目的是消除数据特征之间的量纲影响,使不同指标之间具有可比性。
线性函数归一化
也称最大值-最小值归一化,将数据映射到 [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=Xmax−XminX−Xmin
零均值归一化
将数据映射到均值为 0、标准差为 1 的分布上
z
=
x
−
μ
σ
z = \frac{x-\mu}{\sigma}
z=σx−μ
通过梯度下降求解的模型,归一化会对收敛速度产生影响
这些模型包括线性回归、逻辑回归、支持向量机、神经网络等,但对决策树模型一般不进行归一化处理
2 类别型特征的转换
类别型特征是指在有限选项内取值的特征,通常为字符串形式。
决策树等少数模型能直接处理字符串形式的输入;而逻辑回归、SVM等模型,必须将类别型特征处理成数值型特征
方法
- 序号编码
如工资可以转换为高、中、低三档,分别用3、2、1表示,转换后依然保留大小关系 - 独热(one-hot)编码
处理类别间不具有大小关系的特征,如男(1, 0),女(0, 1) - 二进制编码
和独热类似,不过允许多位为1,本质是利用二进制对ID进行哈希映射,比独热编码节省空间
3 特征组合
把一阶离散特征两两组合,就构成了高阶组合特征。高阶组合特征处理的目的是提高复杂关系的拟合能力,信息更具体
但是简单地将特征两两组合容易存在参数过多、过拟合等问题,可以引入决策树方法来组合特征。
是否点击 | 年龄 | 性别 | 用户类型 | 游戏类型 | 编码 |
---|---|---|---|---|---|
是 | 28 | 女 | 免费 | RPG | (1, 1, 0, 0) |
否 | 20 | 男 | 付费 | 动作 | (0, 0, 1, 1) |
如第一条样本,满足图中两条路径,则可编码为 (1, 1, 0, 0)
特征提取
一般在原始数据集或合并后的数据集上进行特征的提取
-
店铺信息
如一般可能有不同店铺个数、不同物品类别/品牌个数、不同商品个数 -
用户信息
如访问的最早时间、最晚时间、活跃天数、常见行为动作 -
用户和店铺关系
用户点击、加购、购买、收藏等特征
组合特征
- 进行业务的特征提取
- 利用 countvector, tfidf 提取特征
- Embedding 特征
- Stacking 特征