欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【机器学习】特征工程

程序员文章站 2024-01-24 15:33:16
...

写在前面:机器学习是一门很大的学问,一个好的特征工程即便使用简单的模型也能取得很好的效果。以下文章总结于七月在线机器学习第九期课程,侵删。

前言

特征工程

  • 特征 => 数据中抽取出来的对结果预测有用的信息
  • 特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

意义

- 更好的特征意味着更强的灵活度 
- 更好的特征意味着只需用简单模型 
- 更好的特征意味着更好的结果

实际工业界的特征工程

算法工程师在干什么?

  • 找特征
  • 数据清晰
  • 甚至于一招LR打天下

数据与特征处理

数据选择/清洗/采样

清洗

  • 数据清洗示例/思考角度
    • 单维度不可信数据
      • 身高3米+的人?
      • 一个月买脸盆墩布买了10w的人
  • 组合或统计属性判定
    • 号称在米国却ip一直都是大陆的新闻阅读用户?
    • 你要判定一个人是否会买篮球鞋,样本中女性用户85%?
  • 补齐可对应的缺省值
    • 不可信的样本丢掉,缺省值极多的字段考虑不用
  • 基于统计分布(箱线图)

采样

  • 数据采样

    • 很多情况下,正负样本是不均衡的
      • 电商的用户点/买过的商品和没有行为的商品
      • 某些疾病的患者 与 健康人
    • 大多数模型对正负样本比是敏感的(比如LR)
    • 随机采样 和 分层抽样
  • 正负样本不平衡处理办法

    • 正样本 >> 负样本,且量都挺大 => 下采样/欠采样
    • 正样本 >> 负样本,量不大 =>
      • 采集更多的数据
      • 过采样(比如图像识别中的镜像和旋转) ,overSamping、smote
      • 修改损失函数/loss function (少的那一类的样本的loss加权)

数值型/类别型/时间型/文本型/统计型/组合特征 特征处理

数值型

  • 幅度调整(归一化)
  • Log等数据域变化
  • 统计值max, min, mean, std
  • 离散化
  • Hash分桶
  • 每个类别下对应的变量统计值histogram(分布状况) o试试数值型=>类别型

幅度调整到[0,1]范围内

对行做处理

如果特征变化范围非常大,那么调整前等高线会非常的窄,呈现长条形等。但是调整后的等高线就会变得比较规则的圆形(碗形)
【机器学习】特征工程

标准化

对列做处理
【机器学习】特征工程

【重要】离散化

即:对特征进行分段(如:年龄,0-6,6-60,>60)

逻辑回归、神经网络需要进行离散化;树模型最不需要离散化
【机器学习】特征工程

如何确定离散边界?
  1. 等距(平)切分 [不科学]
  2. 等平切分:根据分位数切分

类别型

  • onehot
  • 哑变量
  • Hash与聚类处理
  • 统计每个类别变量下各个target比例,转成数值型

one-hot编码 / 哑变量

为什么要用0010而不用1234? 避免不同的label的权重不一样

使用 pd.get_dummies 获取

Hash技巧 -> Mutil Hot

例如在文章领域,使用词表代表。
【机器学习】特征工程

Histogram映射

使用另外一列对某一列进行表达,如下如所示:男:[1/3, 2/3, 0] 代表男生中有1/3的喜欢足球,2/3散步, 0喜欢看电视剧。它可以为特征补充到特征上。
【机器学习】特征工程

时间型

  • 既可以看做连续值,也可以看做离散值
  1. 连续值
    • 持续时间(单页浏览时长)
    • 间隔时间(上次购买/点击离现在的时间)
  2. 离散值
    • 一天中哪个时间段(hour_0-23)
    • 一周中星期几(week_monday…)
    • 一年中哪个星期
    • 一年中哪个季度
    • 工作日/周末

统计值

  • 加减平均:商品价格高于平均价格多少,用户在某个品 类下消费超过平均用户多少,用户连续登录天数超过平 均多少…
  • 分位线:商品属于售出商品价格的多少分位线处
  • 次序型:排在第几位
  • 比例类:电商中,好/中/差评比例 你已超过全国百分之…的同学

特征处理实例

  1. 前一天的购物车商品很有可能第二天就被购买 =>规则
  2. 剔除掉在30天里从来不买东西的人 => 数据清洗
  3. 加车N件,只买了一件的,剩余的不会买 => 规则
  4. 购物车购买转化率 =>用户维度统计特征
  5. 商品热度 =>商品维度统计特征
  6. 对不同item点击/收藏/购物车/购买的总计 =>商品维度统计特征
  7. 对不同item点击/收藏/购物车/购买平均每个user的计数=>用户维 度统计特征
  8. 变热门的品牌/商品 =>商品维度统计特征(差值型)
  9. 最近第1/2/3/7天的行为数与平均行为数的比值=>用户维度统计特征(比例型)
  10. 商品在类别中的排序 =>商品维度统计特征(次序型)
  11. 商品交互的总人数 =>商品维度统计特征(求和型)
  12. 商品的购买转化率及转化率与类别平均转化率的比值=>商品维度统计特征(比例型)
  13. 商品行为/同类同行为均值=>商品维度统计特征(比例型)
  14. 最近1/2/3天的行为(按4类统计)=>时间型+用户维度统计特征
  15. 最近的交互离现在的时间=>时间型
  16. 总交互的天数=>时间型
  17. 用户A对品牌B的总购买数/收藏数/购物车数=>用户维度统计特征
  18. 用户A对品牌B的点击数的平方 =>用户维度统计特征
  19. 用户A对品牌B的购买数的平方=>用户维度统计特征
  20. 用户A对品牌B的点击购买比=>用户维度统计特征(比例型)
  21. 用户交互本商品前/后,交互的商品数=>时间型+用户维度统计特征
  22. 用户前一天最晚的交互行为时间=>时间型
  23. 用户购买商品的时间(平均,最早,最晚)=>时间型

组合特征处理

简单特征组合:拼接型

  1. user_id&&category: 10001&&女裙 10002&&男士牛仔
  2. user_id&&style: 10001&&蕾丝 10002&&全棉

实际电商点击率预估中: 正负权重,喜欢&&不喜欢某种类型

模型特征组合

  1. 用GBDT产出特征组合路径
  2. 组合特征和原始特征一起放进LR训练
  3. 最早Facebook使用的方式,多家互联网公司在用

如下图,可以使用一条路径实现特征组合(不一定选择整条路径,可以选一小截)
【机器学习】特征工程

特征选择

  • 原因:
    • 冗余:部分特征的相关度太高了,消耗计算性能。
    • 噪声:部分特征是对预测结果有负影响
  • 特征选择VS降维
    • 前者只踢掉原本特征里和结果预测关系不大的,后者做特征的计算组合构成新特征
    • SVD或者PCA确实也能解决一定的高维度问题

常见的特征选择方式:过滤型

  • 评估单个特征和结果值之间的相关程度,排序留下Top相关的特征部分。
  • Pearson相关系数,互信息,距离相关度
  • 缺点:没有考虑到特征之间的关联作用,可能把有用 的关联特征误踢掉。

如何在代码中使用:
【机器学习】特征工程

常见特征选择方式之 包裹型

  1. 把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果。
  2. 典型的包裹型算法为 “递归特征删除算 法”(recursive feature eliminationalgorithm)
  3. 比如用逻辑回归,怎么做这个事情呢?
    1. 用全量特征跑一个模型
    2. 根据线性模型的系数(体现相关性),删掉5-10%的弱特征,观察准确率/auc的变化
    3. 逐步进行,直至准确率/auc出现大的下滑停止

使用sklearn包中的RFE进行包裹型特征选择
【机器学习】特征工程
【机器学习】特征工程

常见特征选择方式之 嵌入型

  1. 根据模型来分析特征的重要性(有别于上面的方式,是从生产的模型权重等)。
  2. 最常见的方式为用正则化方式来做特征选择。
  3. 举个例子,最早在电商用LR做CTR预估,在3-5亿维的系数 特征上用L1正则化的LR模型。剩余2-3千万的feature,意 味着其他的feature重要度不够。

代码实现:
【机器学习】特征工程

特征工程案例

kaggle EDA model: https://download.csdn.net/download/qq_31573519/12322100

相关标签: 机器学习