2018腾讯广告算法大赛小tip积累

1.CountVectorizer()的用法

前几天在做特征工程的时候发现,对特征组进行向量化,使用CountVectorizer()

from sklearn.feature_extraction.text import CountVectorizer

结果它默认将长度小于等于1的字符当停止词去掉了,这就让我很难受了。因为我需要分析的特征

['0', '10', '11', '12', '13', '14', '15', '2', '3', '5', '6', '8', '9']

有很多是一位的数字。这个类的文档又不太容易读懂,于是很难受,后来在一篇博客里找到了解决方法:

使用

vectorizer = CountVectorizer(min_df=0,token_pattern='\w+')

效果如图:

 

 2.使用pandas merge数据,出现不应该出现的NaN。

查阅资料发现原因:待merge的两个表中的uid,dtype类型不同,造成python以为两个表没有共同键值,于是产生大量NaN。

事实确实如此:

 解决方案:

直接更改uf['uid'].dtype会报错,应该使用pandas.DataFrame.astype()方法

因为train的df里就是int64,所以直接用int就可以解决问题。

 

3.我们需要将ct,os,marriageStatus三个属性中,同时有多个属性的样本拆分成多个样本(样本a的ct同时有3个值:0,1,2,则将之拆分成a1(ct:0),a2(ct:1),a3(ct:2)。

开始想着用基础python做,出了很奇怪的问题。

然后想着用python+pandas做,逻辑没法写。因为dataframe的bool查找不能精确到某行某列(?也可能可以但是我没找到方法)

于是最终无奈的我查找了pandas拆分数据 这个关键词,结果竟然找到了!

本来应该最先想到这个解决方案的……好吧,下次就长记性了。

方法参考知乎答案:https://zhuanlan.zhihu.com/p/28337202(貌似这个答案是转自别的大神的博客的)

 

 

 

 

备用

posted @ 2018-05-04 20:51  大胖子球花  阅读(676)  评论(0)    收藏  举报