关于推荐系统中的特征工程

自动选择方法就很多了,用的也是常用的各种自动选择方法,什么forward selection啊backward selection啊各种regularization等等,全写在这里篇幅就太长,推荐看看一些其他关于机器学习里 feature selection 的blog和综述。值得提醒的是选择方法和评价函数的关联。推荐系统的评价函数一般不是AUC曲线等按照error计算的函数,也就是说推荐的效果并不是按照“精准”来衡量,要遵循特定问题需要的评价函数比如nDCG,所以以error matrix为标准的一些方法可能效果会不好。比如说用PCA降低特征的维度很可能把那些对推荐效果很重要的长尾特征给舍弃了。

特征的组合变化

这部分工作看起来就比较碉堡,可发挥的空间就看你的想像力和经验了。这里的组合变化远不限于把已有的特征加减乘除(比如Kernel Tricks之类),我举个比较有想像力的例子。

现在市面上社交网络里面“你可能认识的人”的推荐算法几乎都是基于补全网络的办法,这样推荐的人可能只是单纯的补充和完善朋友圈,推荐的人可能很无趣,这样会导致推荐效果不好让用户失去接受推荐的兴趣。目测新浪微博用的还是这种补全的方法,因为整天向我推荐丁一晨李开复姚晨等人或者最近关注的人的共同关注人,所以推荐的人很无趣几乎都不会点关注。

斯坦福小帅哥教授 Jure Leskovec 在2010年的一篇文章“Predicting Positive and Negative Links in Online Social Networks”说到过一种基于用户反馈的推荐“你可能认识的人”的推荐算法,他把邻近三人之间的三角关系总共16种正负反馈的组合当作特征向量用来表达用户A和被推荐目标用户C之间的正负反馈,在图里去掉一些已知正负反馈的边来构建训练数据,用简单的Logistic Regression训练模型达到了不错的效果。可以谷歌找到这篇文章的幻灯片,里面有图示讲解。

结语

这篇文章就简单提及一些特征工程的常用方法,说的是手工提取特征,从这些入手可以深入研究研究具体问题的具体做法,这是一个很细致的工作可以多钻研钻研。这里面没有说到自动提取方法比如深度学习和卷积网络等等,也没说到推荐系统的其他方面比如大规模用户聚类。构建一个推荐系统需要涉及很多东西,绝对不是GraphLab或者Mahout跑个协同过滤就能上马的,这里面特征工程是很重要的一部分工作,在很多其他数据和机器学习的工作里面特征工程也差不多是从根本上改变模型效果的重要办法之一。大家在欢乐调参的过程中不妨考虑考虑搞搞特征。

作者:Reprehensible side 来源于 http://phunters.lofter.com/