机器学习 - 特征工程


数据处理

  • 缺失值处理

    行数据缺失过多,用户区分度就会降低,列数据缺失过多会导致建模存在偏差

    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降维
  • 特征与目标相关性分析

特征选择与特征提取

  • 特征提取,从数据中挑选需要的特征,或基于已有特征创造新的特征
  • 特征选择,从已知特征中选择模型强相关的特征,去除无用和冗余特征
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。