特征工程

本片博文对应的代码在github:https://github.com/kunguang/SelectFeature/tree/develop ,develop分支下

转载请注明:http://blog.csdn.net/zkwdn/article/details/53390923

背景


      在ctr训练模型之前,我们需要特征交叉,特征选择,特征编号,单特征auc和logloss(这3步是一个重复的循环,得到每个特征的auc和logloss后,选择一些有用的特征重新开始编号),映射成训练样本(libsvm格式或者其他格式)这5个过程。但是,其中特征交叉和特征编号这2个过程有点复杂,当我们实验一个新的特征的时候,要改写大量的代码。我们熟知的特征交叉形式有如下3种形式:单特征和单特征的交叉,比如性别和年龄的交叉;单特征和多特征的交叉,比如年龄和用户的兴趣;多特征和多特征的交叉,比如用户的兴趣和当前搜索的query包含的关键词。我们最后选取的特征既有连续特征,又有ID特征,其中连续特征需要等频离散或者其他离散方式进行编号,将他们统一编号有些复杂。所以,本代码的目的就是为了能够在不改变代码的前提下,紧紧通过配置文件(xml格式)便可以完成上述5个过程,最终的到训练集和测试集。  


模块描述

 

本小节按照上面的5个过程描述一个真正的实例,

假设现在输入的数据格式如下,

label

uid

sex(性别)

age(年龄)

location(地域)

custuid(广告主ID)

inters(用户兴趣)

搜索query包含关键词

日期

1

1

18

北京

1

足球|篮球

体育|足球

20161102

0

2

19

上海

2

军事|娱乐

飞机|大炮

20161102

0

3

18

北京

1

体育|娱乐

范冰冰|电影

20161103

1

4

19

上海

2

足球|篮球

足球|奥运

20161103


1.特征交叉和特征选择


特征交叉的形式如背景中描述,有3种形式:

1.单特征和单特征的交叉:比如性别和年龄,广告主三者的交叉,相当于在本来的6个特征中额外又加入了一列sex_age_custuid,


sex_age_custuid

女_18_1

男_19_2

女_18_1

男_19_2

2.单特征和多特征的交叉,比如性别和用户兴趣的2者交叉,相当于在本来的6个特征中额外加入了一列,sex_inters

sex_inters

女_体育|女_足球

男_飞机|男_大炮

女_体育|女_娱乐

男_足球|男_篮球

3.多特征和多特征的交叉,比如兴趣和当前搜索词的交叉,相当于在本来的6个特征中额外加入了一列,inters_query

inters_query

足球_体育|足球_足球|篮球_体育|篮球_足球

军事_飞机|军事_大炮|娱乐_飞机|娱乐_大炮

体育_范冰冰|体育_电影|娱乐_范冰冰|娱乐_电影

足球_足球|足球_奥运|篮球_足球|篮球_奥运


配置文件如下:

每个特征用<item></item>包括,包含4个属性:

1.index:

用来描述输入数据中该特征在第几列,从0开始.比如性别这个特征,index就是1.对于交叉特征,即输入数据中没有的这个特征,这个属性不应该存在。

2.name :   用来描述该特征的名字,比如性别这个特征的名字叫sex

3.category:有2个取值,singlefeature,crossfeature。对于输入数据中所有的特征都取值single feature,对于所有输入数据中没有需要交叉才能得到的叫做cross feature。  

4.selectindex:用来描述输入数据中,该特征应该在第几列。比如想让性别这个特征在输出中是第3列,那么数值就是3。如果不想让性别这个特征在输出数据中存在,就不要这个属性或者值默认为-1。用作特征选择

这样来看,其实category这个属性和index冗余了,即当Index属性不存在时,category的值应该是cross feature,表明这个特征在输入数据中不存在,需要交叉获取。但是为了以后理解起来方便,还是加上吧。


<allitem>

    <item>

        <index>0</index>

        <name>label</name>

        <category>singlefeature</category>

        <selectindex>0</selectindex>

    </item>

    <item>

        <index>1</index>

        <name>uid</name>

        <category>singlefeature</category>

        <selectindex>-1</selectindex>

    </item>

    <item>

        <index>2</index>

        <name>sex</name>

        <category>singlefeature</category>

        <selectindex>-1</selectindex>

    </item>

    <item>

        <index>3</index>

        <name>age</name>

        <category>singlefeature</category>

        <selectindex>-1</selectindex>

    </item>

    <item>

        <index>4</index>

        <name>location</name>

        <category>singlefeature</category>

        <selectindex>-1</selectindex>

    </item>

    <item>

        <index>5</index>

        <name>custuid</name>

        <category>singlefeature</category>

        <selectindex>1</selectindex>

    </item>

    <item>

        <index>5</index>

        <name>inters</name>

        <category>singlefeature</category>

        <selectindex>-1</selectindex>

    </item>

    <item>

        <index>6</index>

        <name>query</name>

        <category>singlefeature</category>

        <selectindex>-1</<

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值