机器学习 - 特征工程
2021-02-26 本文已影响0人
郭彦超
数据处理
-
缺失值处理
行数据缺失过多,用户区分度就会降低,列数据缺失过多会导致建模存在偏差
fillna:填充缺失值;连续值使用中位数,离散值使用众数填充
-
奇异值
通过箱式图可发现奇异值 -
样本均衡处理
随机欠采样:对于样本数过多的分类 采用按比例抽样的方案进行
随机过采样:对于样本过低的分类,采用样本成倍复制的方式增加样本数量
探索数据分布
探索数据分布可快速发现奇异值、缺失值以及特征与目标的共线关系
二项分布:n次独立的伯努利分布实验中 成功次数的离散概率分布
泊松分布:在固定时间范围内 事件发生多少次的概率受平均值的影响
正态分布:数据平均值和中位数相等,对称轴的左右数据量相等
标准正态分布
-
通过QQ图分析某一维度对预测结果的影响 ,如分析不同性别对复购率的影响:
# 探索不同性别的复购分布 train_data_user_info = train_data.merge(user_info,on=['user_id'],how='left') plt.figure(figsize=(8,8)) plt.title('Gender VS Label') ax = sns.countplot('gender',hue='label',data=train_data_user_info)
-
检查测试集用户与训练集用户的重合情况
#查看online offline 训练集的 user_id与测试集的重合度 off_train_user = off_train[['user_id']].copy().drop_duplicates() off_test_user = off_test[['user_id']].copy().drop_duplicates() print('offline 训练集用户ID数量') print(off_train_user.user_id.count()) print('offline 测试集用户ID数量') print(off_test_user.user_id.count()) off_train_user['off_train_flag'] = 1 off_merge = off_test_user.merge(off_train_user, on='user_id', how="left").reset_index().fillna(0) print('offline 训练集用户与测试集用户重复数量') print(off_merge['off_train_flag'].sum()) print('offline 训练集用户与测试集重复用户在总测试集用户中的占比') print(off_merge['off_train_flag'].sum() / off_merge['off_train_flag'].count()) #如果是预测用户对商品的点击,那么需要再分析下商品的重合情况
归一化处理
去量纲 让不同维度数据具有可比性
-
最值归一化
-
z-score归一化, 将数据映射到均值为0,标准差为1 分布上
需要注意的是决策树这类预测模型不需要进行归一化处理
特征转换
将字符特征映射为数值特征
- 序号编码,针对有大小关系的类别,如高、中、低,采用类别编码 分别用3、2、1表示
- one-hot编码,处理不存在大小关系的类别,如红、黄、蓝 转换后为 (1,0,0)、(0,1,0)、(0,0,1)
- hash编码,通常处理id类字符编码,将其映射为一个正整数
- 决策树编码,可有效屏蔽标准化与归一化等问题,典型案例 GBDT+LR
特征降维
提升模型性能,防止过拟合
- PCA降维
- 特征与目标相关性分析
特征选择与特征提取
- 特征提取,从数据中挑选需要的特征,或基于已有特征创造新的特征
- 特征选择,从已知特征中选择模型强相关的特征,去除无用和冗余特征