我是数据挖掘和推荐系统的新手,现在正试图为具有这些参数的用户构建某种rec系统:
为了计算它们之间的相似性,我将应用余弦相似度和离散相似度。 例如:
1 0 0 1 0 0 ... n
1 1 1 0 1 0 ... n
其中1
表示存在兴趣,n
表示所有兴趣的总数。
我的问题是: 如何以适当的顺序组合这三个相似之处?我的意思是只是总结它们听起来不太聪明,是吗?我也想听听关于我的“新手相似系统”的评论,哈哈。
答案 0 :(得分:3)
没有硬性和快速的答案,因为这里的答案很大程度上取决于您的输入和问题域。由于这个原因,机器学习的许多工作是准备你的输入的艺术(而不是科学)。我可以给你一些一般的想法来思考。你有两个问题:从每个项目中获得有意义的相似性,然后将它们组合起来。
城市相似性听起来很合理,但实际上取决于您的域名。难道真的是在同一个城市意味着一切,在邻近城市意味着什么吗?例如,在类似规模的城市中,什么算什么呢?在同一个州?如果他们这样做,你的相似性应该反映出来。
教育:我理解为什么你可能会使用余弦相似性,但这并不能解决这里的真正问题,即处理不同的令牌意味着同样的事情。你需要“eng”和“engineering”来匹配,“ba”和“bachelors”这样的东西。一旦你以这种方式准备令牌,它可能会产生良好的结果。
兴趣:我不认为余弦将是这里的最佳选择,尝试简单的tanimoto系数相似性(只是交叉大小的联合大小)。
你不能只对它们求和,因为我假设你仍然想要一个[0,1]范围内的值。你可以平均他们。这假设每个输出都可以直接比较,如果你愿意的话它们是相同的“单位”。他们不在这里;例如,它不像是概率。
在实践中,它可能仍然可以平均它们,可能还有重量。例如,在这里居住在同一个城市与拥有完全相同的兴趣同样重要。是真的还是不那么重要?
您可以尝试测试不同的变体和重量,希望您有一些测试历史数据的方案。我会指出你的项目Mahout,因为它有一个完整的推荐和评估框架。
然而,所有这些解决方案都是hacky和启发式的。我想你可能想采用更正式的方法来进行特征编码和相似性。如果您愿意购买一本书并喜欢Mahout,Mahout in Action在聚类章节中有很好的报道,如何选择和编码特征,以及如何从中获得一个相似性。
答案 1 :(得分:0)
这是机器学习的常用技巧。
city:如果x = y则d(x,y)= 0.否则,d(x,y)= 1。
我认为这意味着你使用了一个K编码。那很好。
教育:在这里我将使用余弦相似性,因为单词出现在部门名称或学士学位
你也可以在这里使用一个K编码来产生一个大小为| V |的向量。其中 V 是词汇表,即训练数据中的所有单词。
如果现在将兴趣数归一化,使其始终位于[0,1]范围内,则可以在最终向量之间使用普通L1(曼哈顿)或L2(欧几里得)距离度量。后者对应于信息检索的余弦相似度量。
尝试使用L1和L2来确定最佳选择。