笔记-----------------特征工程

特征工程与具体场景紧密结合:特征工程是使用专业背景知识(场景/业务)和技巧处理数据,使得 特征能在机器学习算法上发挥更好的作用的过程。

1.数据采集,数据格式化,数据清洗,数据采样

数据采集:思考哪些数据有用,一般要从多个维度思考;

数据格式化:确定存储格式(例:时间你用 年月日 or 时间戳 or 第几天 or …)

数据清洗:去掉脏数据(组合过统计属性判定,补齐可对应的缺省值)

数据采样:很多情况下,正负样本是不均衡的,但大多数模型对正负样本比是敏感的(比如LR),可选择随机采样或分层采样;

                正负样本不平衡处理办法:

                 正样本 >> 负样本,且量都挺大 => downsampling

                 正样本 >> 负样本,量不大 => a.采集更多的数据; b.上采样/oversampling(比如图像识别中的镜像和旋转); c.修改损失函数loss function

2.特征处理:

数值型数据:    

          幅度调整/归一化 -------->调整到[0,1]范围内

          统计值max, min, mean, std(方差:波动情况)

          离散化 -------->pandas库中的cut方法,把连续值带入非线性操作,工业界一般按照频次进行不均匀分类

          Hash分桶

          每个类别下对应的变量统计值histogram(分布状况) 

类别型数据:(大多是文本信息:红蓝绿,圆领V领)

          one-hot编码:根据类别,变成n维向量,然后根据所属的类别在相应的位置填上1,其余位置为0;

          哑变量 :经过one-hot编码,转化为哑变量;

          Hash与聚类处理

          小技巧:统计每个类别变量下各个target比例,转成数值型(Histogram映射)

  

时间型数据:既可以看作连续值,也可以看做离散值

       连续值 :a持续时间(单页浏览时长); b间隔时间(上次购买/点击离现在的时间)

       离散值: a一天中哪个时间段(hour_0-23); b 一周中星期几(week_monday...); c 一年中哪个星期; d 一年中哪个季度;

                      e 工作日/周末

文本型数据:

       词袋:文本数据预处理后,去掉停用词,剩下的词组成的list, 在词库中的映射稀疏向量。

               n-gram:2-gram就是把除了存储每个词,还把两个连续的词连起来存储;

               TF-IDF:是一种统计方法,用以评估一字词对于一个文件集或一个语 料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成 反比下降

                           TF(t) = (词t在当前文中出现次数) / (t在全部文档中出现次数)

                            DF(t) = ln(总文档数/ 含t的文档数)

                           TF-IDF权重 = TF(t) * IDF(t)

             word2vec(目前理解不透彻,需后期加强):映射成的向量,不仅仅是0和1,可能存在0.2,0.6等连续值;而且它可以学习到向量之间的关系,像女皇和国王,和男人和女人之间的欧式举例近似相等。

特征处理示例:

      (1) 前一天的购物车商品很有可能第二天就被购买 =>规则

      (2) 剔除掉在30天里从来不买东西的人 => 数据清洗

     (3) 加车N件,只买了一件的,剩余的不会买 => 规则

     (4) 购物车购买转化率 =>用户维度统计特征

     (5) 商品热度 =>商品维度统计特征

     (6) 对不同item点击/收藏/购物车/购买的总计 =>商品维度统计特征

     (7) 对不同item点击/收藏/购物车/购买平均每个user的计数 =>用户维 度统计特征

     (8) 变热门的品牌/商品 =>商品维度统计特征(差值型)

     (9) 最近第1/2/3/7天的行为数与平均行为数的比值 =>用户维度统计 特征(比例型)

     (10)商品在类别中的排序 =>商品维度统计特征(次序型)

     (11) 商品交互的总人数 =>商品维度统计特征(求和型) 3

     (12)商品的购买转化率及转化率与类别平均转化率的比值=>商品维度统 计特征(比例型)

     (13)商品行为/同类同行为均值=>商品维度统计特征(比例型)

     (14) 最近1/2/3天的行为(按4类统计)=>时间型+用户维度统计特征

     (15)最近的交互离现在的时间=>时间型

     (16)总交互的天数=>时间型

     (17)用户A对品牌B的总购买数/收藏数/购物车数=>用户维度统计特征

     (18)用户A对品牌B的点击数的平方 =>用户维度统计特征

     (19)用户A对品牌B的购买数的平方=>用户维度统计特征

     (20)用户A对品牌B的点击购买比=>用户维度统计特征(比例型)

     (21)用户交互本商品前/后,交互的商品数=>时间型+用户维度统计特征

     (22)用户前一天最晚的交互行为时间=>时间型

     (23)用户购买商品的时间(平均,最早,最晚)=>时间型

特征组合:

          简单组合特征:拼接型

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

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

          模型特征组合

                              用GBDT(迭代决策树)产出特征组合路径,组合特征和原始特征一起放进LR训练

                              最早Facebook使用的方式,多家互联网公司在用

3.特征选择

 原因

           冗余:部分特征的相关度太高了,消耗计算性能。

           噪声:部分特征是对预测结果有负影响

特征选择 VS 降维

            前者只踢掉原本特征里和结果预测关系不大的,后者是做特征的计算组合构成新特征

            SVD或者PCA确实也能解决一定的高维度问题

常见的特征选择方式:

        过滤形:一个一个特征的看,评估各特征x和y之间的相关度

                       评估单个特征和结果值之间的相关程度,排序留下Top 相关的特征部分。

                      Pearson相关系数,互信息,距离相关度

                       缺点是没有考虑到特征之间的关联作用,可能把有用 的关联特征误踢掉。

                 常用的数据是scikit-learn包中的SelectKBest和SelectPercentile方法

       包裹形:把特征选择看做一个特征子集搜索问题,筛选各种特 征子集,用模型评估效果。

                   典型的包裹型算法为 “递归特征删除算 法”(recursive feature elimination algorithm)

                    比如用逻辑回归,怎么做这个事情呢?

                         ① 用全量特征跑一个模型

                         ② 根据线性模型的系数(体现相关性),删掉5-10%的弱特征,观 察准确率/auc的变化

                         ③ 逐步进行(重复2),直至准确率/auc出现大的下滑停止

     嵌入型:

          根据模型来分析特征的重要性(有别于上面的方式, 是从生产的模型权重等)。

          最常见的方式为用正则化方式来做特征选择。

整体思路:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值