IT虾米网

机器学习之特征工程(二)详解

developer 2018年07月04日 大数据 432 0

本节主要介绍数据和特征处理。

https://github.com/liuleigit/ML_tutorial

一 特征处理

    (1)数值型
             1. 特征缩放
                 包括标准化和归一化,参看 http://blog.csdn.net/leiting_imecas/article/details/54986045
             2. log等变化
                 特征可能不能通过线性的方式缩放。例如特征符合指数分布,此时可以使用log变化可以将指数域变化到对数域
             3.统计值max, min, mean, std
             4.离散化(discretization)-----最常见
                 把连续的值分段,变成离散的值。例如数值在0-100,0-30表示为向量000,30-80表示为001,80-100表示为100.
                 <1>.有时离散型变量更容易理解;   离散化后方便给不同数值段提供不同的权重
                 <2>.离散化有不同的方式,常见的有等距切分、等频切分
             5.hash分桶
             6.每个类别下对应的变量统计值histogram(分布状况)
             7. 有时做相反的操作:数值型->类别型
    (2)类别型 category
             有三种颜色红、蓝、绿
             1. one-hot encoding(dummy variabel, 哑变量)
                 红[0,0,1], 蓝[0,1,0], 绿[1,0,0]
             2. hash 
                  NLP中常用。例如对于[体育,娱乐,财经]三个维度,'he likes football、basketball and singing'就可以被映射为[2, 1,0]
             3. Histogram映射
                  
       (3)时间型
                工业上作用非常重要。  时间型即可以看做连续型,也可以看做是离散型
              1.连续型
                 a) 持续时间(单页浏览时常)
                 b) 间隔时间(上次购买/点击离现在的时间)
              2. 离散型
                 a) 一天中的那个时间段
                 b)一周中星期几
                 c)一年中的哪个星期
                 d)一年哪个季度
                 e)工作日、周末

         (3) 文本型
              1. bag of words
                    可以看下 sklearn.feature_extraction.text   CountVectorizer
              2. n-gram(n元组)
                    sklearn.feature_extraction.text   CountVectorizer传参ngram_range
              3. tf-idf
                  参考http://blog.csdn.net/leiting_imecas/article/details/52127815
              4. word2vec
                  onehot是稀疏的; word2vec是dense的
                  gensim中既有word2vec也有doc2vec

          (4) 统计型特征
               1. 加减平均:商品价格高于平均价格多少;用户在某个商品类下消费超过平均用户多少;用户连续登录天数...
               2. 分位数: 商品属于售出商品价格的多少分位线处
               3. 次序型: 排在第几位
               4. 比例类:电商中,好/中/差评比例; 你超过全国多少的电脑

           (5)组合特征
               1. 简单拼接
                  举例a) user_id&&category:   10001&&女裙, 10002&&男士牛仔。  直接使用userid会使特征矩阵十分稀疏,所以经常先对user做聚类,再组合
                2. 模型特征组合
                  GBDT + LR
                      

二 特征选择

         1)需要对特征进行选择的原因:
              1. 冗余: 部分特征的相关度太高了,消耗计算资源
              2. 噪声: 部分特征对预测结果有负影响

          2)特征选择 VS 降维
              1.前者只踢掉原本特征里和结果预测关系不大的;后者(SVD或者PCA等)做特征的计算组合构成新特征
              2.SVD 或者 PCA确实能解决一定的高纬度问题

          3)选择方式
               1.过滤型--------工业中偏Linear的模型可以使用,非linear的模型不常用
                  a)评估单个特征和结果之间的相关程度,排序留下top的特征
                  b)相关度可以使用Pearson相关系数、互信息、距离相关度
                  c)缺点:没有考虑特征之间的关联作用,可能把有用的关联信息误剔除。例如特征1和特征2单独作用小但组合起来作用大
                  d) python包:SelectKBest, SelectPercentile, GenericUnivariateSelect

>>> from sklearn.datasets import load_iris 
>>> from sklearn.feature_selection import SelectKBest 
>>> from sklearn.feature_selection import chi2 
>>> iris = load_iris() 
>>> X, y=iris.data, iris.target 
>>> X.shape 
(150, 4) 
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y) 
>>> X_new.shape 
(150, 2)

              2.包裹型
                a)把特征选择看做一个特征子集搜索问题,筛选各种特征子集,用模型评估效果; 实验性的删除相关性低的特征
                b)典型的包裹型算法为"递归特征删除算法" recursive feature elimination algorithm
                   举例,LR算法计算出各个特征的权重,删除5%权重低的特征,重新训练模型;如果删除后准确率或某个评估值依然达到要求,可以
对新模型再删除5%特征,依次进行,知道评估值低于要求
                   sklearn.feature_selection.RFE   (recursive feature elimination)

              3. 嵌入式---------纬度超级大时常用。例如5亿纬度-》几千万纬度
                 a)根据模型来分析特征的重要性 
                 b)最常用的方式是正则化方式做特征选择
                 c)举例,最早的电商用LR做CTR预估,在3-5亿维的系数特征上用L1正则化的LR模型,生育2-3千万的feature, 意味着其他的feature重要度不高
                 
>>> from sklearn.svm import LinearSVC  #一般倾向于使用在线性模型 
>>> from sklearn.datasets import load_iris 
>>> from sklearn.feature_selection import SelectFromModel   #借助模型选择 
>>> iris = load_iris() 
>>> X,y=iris.data, iris.target 
>>> X.shape 
(150, 4) 
>>> lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X,y) 
>>> model = SelectFromModel(lsvc, prefit=True) 
>>> X_new=model.transform(X) 
>>> X_new.shape 
(150, 3)















     
             
发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

机器学习之特征归一化(normalization)详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。