Kdd Cup 2013 track1总结

来源:互联网 发布:通过交换数据位运算 编辑:程序博客网 时间:2024/04/30 13:34

比赛地址:http://www.kaggle.com/c/kdd-cup-2013-author-paper-identification-challenge


大概也折腾了一个多月吧,从最开始的兴奋到后面的折腾不动,失望,最后来总结一下。

开始阶段完全小白,最好入手的办法用着basicline的代码,添加一两个新的特征,最后就折腾一下模型,这里说一下自己用的特征。

1. 字符串距离 

首先在paperauthor里面是又噪音的,同一个(authorid,paperid)可能出现多次,我做的是把同一个(authorid,paperid)对的多个name和多个affiliation合并起来。例如

aid,pid,name1,aff1 

aid,pid,name2,aff2

aid,pid,name3,aff3

得到aid,pid,name1##name2##name3,aff1##aff2##aff3,“##”为分隔符。由paperauthor里可以知道论文的name和affiliation,另一个方面我们可以根据(authorid,paperid)对中的authorid到author表里找到对应的name和affiliation,假设当前的作者论文对是(aid,pid),从paperauthor里得到的name串和affiliation串分别为name1##name2##name3,aff1##aff2##aff3,根据aid从author表找到的name和affliction分别为name-a,affliction-a,这样我们可以算字符串的距离。


算法有两种:

(1) name-a 与,name1##name2##name3的距离,同理affliction-a和,aff1##aff2##aff3的距离

(2) name-a分别与name1,name2,name3的距离,然后取平均,同理affliction-a和,aff1,aff2,aff3的平均距离

距离的度量:编辑距离(levenshtein distance),最长公共子序列(LCS),最长公共子串(LSS)。

这样我们就得到关于作者name和作者affiliation的字符串相似度的多个特征。


2. coauthor信息

很多论文都有多个作者,根据paperauthor统计每一个作者的top 10(当然可以是top 20或者其他top K)的coauthor,对于一个作者论文对(aid,pid),计算ID为pid的论文的作者有没有出现ID为aid的作者的top 10 coauthor中,可以简单计算top 10 coauthor出现的个数,还可以算一个得分,每个出现pid论文的top 10 coauthor可以根据他们跟aid作者的合作次数算一个分数,然后累加,我简单地把coauthor和当前aid作者和合作次数作为这个coauthor出现的得分。


3. journalid,conferenceid,year

把paper表的journalid,conferenceid和year也作为特征加进去,我的理解journalid和conferenceid可以看做是论文的一个类标签(label),年份year也可以看做是一个label。


4. keyword信息

作者A写过的论文的keyword构成一个集合X,一篇论文B的keyword构成一个集合Y,这里说的keyword是论文的title和keyword分词后得到的单词,对于一个作者论文对(A,B)计算他们的keyword的交集:X∩Y。

每个单词可以类似tf-idf的分数,最后把属于X∩Y的单词的分数累加起来作为一维新的特征。


5.其他

后面做了一下model的ensemble。把knn,svm,sgd分类器,rf随机森林,gbdt,logistic regression,adaboost的结果合并,还是提升不了(菜=。=)

最后只用了rf和gbdt做了加权平均,效果有一点点提高。

试了其他很多方法特征,topic model的主题分布,聚类等等,也没起什么效果,估计是使用的方式不恰当=。=


总结:

publicboard的成绩最后还是死活超不过0.98,卡在0.9788,无比地伤心。大家基本都是用分类的方法。真心感觉这个比赛会抽特征很重要,好的特征才有好的结果。到后面没有进步的原因就是想不出好的特征。



原创粉丝点击